]> git.apps.os.sepia.ceph.com Git - ceph-ci.git/commitdiff
rgw: fix radosgw-admin bucket rm with --purge-objects and --bypass-gc
authorAleksei Gutikov <aleksey.gutikov@synesis.ru>
Tue, 14 Nov 2017 12:45:39 +0000 (15:45 +0300)
committerAleksei Gutikov <aleksey.gutikov@synesis.ru>
Thu, 16 Nov 2017 09:20:20 +0000 (12:20 +0300)
Call RGWRados::delete_bucket() from rgw_remove_bucket_bypass_gc()
instead of partial copy of code of RGWRados::delete_bucket().

Fix updating user stats after radosgw-admin bucket rm --purge-objects and --bypass-gc
Due to rgw_user(const std::string& s) was called incorrect version of rgw_bucket_sync_user_stats().

Fixes: http://tracker.ceph.com/issues/22122
Fixes: http://tracker.ceph.com/issues/19959
Signed-off-by: Aleksei Gutikov <aleksey.gutikov@synesis.ru>
src/rgw/rgw_bucket.cc

index a481aa5b4bf788c38d32aaad0c12029339273719..1c4ceda7033f37bc5bdf9022f074f69318a3c611 100644 (file)
@@ -567,7 +567,7 @@ int rgw_remove_bucket(RGWRados *store, rgw_bucket& bucket, bool delete_children)
     return ret;
   }
 
-  ret = rgw_bucket_sync_user_stats(store, bucket.tenant, info);
+  ret = rgw_bucket_sync_user_stats(store, info.owner, info);
   if ( ret < 0) {
      dout(1) << "WARNING: failed sync user stats before bucket delete. ret=" <<  ret << dendl;
   }
@@ -728,29 +728,19 @@ int rgw_remove_bucket_bypass_gc(RGWRados *store, rgw_bucket& bucket,
     return ret;
   }
 
-  ret = rgw_bucket_sync_user_stats(store, bucket.tenant, info);
+  ret = rgw_bucket_sync_user_stats(store, info.owner, info);
   if (ret < 0) {
      dout(1) << "WARNING: failed sync user stats before bucket delete. ret=" <<  ret << dendl;
   }
 
   RGWObjVersionTracker objv_tracker;
 
-  ret = rgw_bucket_delete_bucket_obj(store, bucket.tenant, bucket.name, objv_tracker);
+  ret = store->delete_bucket(info, objv_tracker);
   if (ret < 0) {
-    lderr(store->ctx()) << "ERROR: could not remove bucket " << bucket.name << "with ret as " << ret << dendl;
+    lderr(store->ctx()) << "ERROR: could not remove bucket " << bucket.name << dendl;
     return ret;
   }
 
-  if (!store->is_syncing_bucket_meta(bucket)) {
-    RGWObjVersionTracker objv_tracker;
-    string entry = bucket.get_key();
-    ret = rgw_bucket_instance_remove_entry(store, entry, &objv_tracker);
-    if (ret < 0) {
-      lderr(store->ctx()) << "ERROR: could not remove bucket instance entry" << bucket.name << "with ret as " << ret << dendl;
-      return ret;
-    }
-  }
-
   ret = rgw_unlink_bucket(store, info.owner, bucket.tenant, bucket.name, false);
   if (ret < 0) {
     lderr(store->ctx()) << "ERROR: unable to remove user bucket information" << dendl;