]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
rgw: bucket meta remove don't overwrite entry point first
authorYehuda Sadeh <yehuda@inktank.com>
Mon, 19 Aug 2013 23:56:27 +0000 (16:56 -0700)
committerJosh Durgin <josh.durgin@inktank.com>
Wed, 27 Nov 2013 22:45:57 +0000 (14:45 -0800)
Fixes: #6056
When removing a bucket metadata entry we first unlink the bucket
and then we remove the bucket entrypoint object. Originally
when unlinking the bucket we first overwrote the bucket entrypoint
entry marking it as 'unlinked'. However, this is not really needed
as we're just about to remove it. The original version triggered
a bug, as we needed to propagate the new header version first (which
we didn't do, so the subsequent bucket removal failed).

Reviewed-by: Greg Farnum <greg@inktank.com>
Signed-off-by: Yehuda Sadeh <yehuda@inktank.com>
(cherry picked from commit 0373d749cea7d9b532069ba8ebca2f005b2c9f59)

src/rgw/rgw_bucket.cc

index 4c53dfe6eb1c23c721c6eb0740f3843948c309a6..28dda2f99c8c93881b43bf9c0f9c6a6e5b96f196 100644 (file)
@@ -1455,7 +1455,12 @@ public:
     if (ret < 0)
       return ret;
 
-    ret = rgw_unlink_bucket(store, be.owner, entry);
+    /*
+     * We're unlinking the bucket but we don't want to update the entrypoint here — we're removing
+     * it immediately and don't want to invalidate our cached objv_version or the bucket obj removal
+     * will incorrectly fail.
+     */
+    ret = rgw_unlink_bucket(store, be.owner, entry, false);
     if (ret < 0) {
       lderr(store->ctx()) << "could not unlink bucket=" << entry << " owner=" << be.owner << dendl;
     }