]> git.apps.os.sepia.ceph.com Git - ceph-ci.git/commitdiff
rgw: add rgw_remove_user_buckets_index
authorCasey Bodley <cbodley@redhat.com>
Tue, 6 Aug 2019 14:24:06 +0000 (10:24 -0400)
committerCasey Bodley <cbodley@redhat.com>
Wed, 7 Aug 2019 20:25:12 +0000 (16:25 -0400)
helper function to remove the user:buckets object.
rgw_remove_uid_index() now omits the object version tracker argument to
avoid reading the user info

Signed-off-by: Casey Bodley <cbodley@redhat.com>
src/rgw/rgw_user.cc
src/rgw/rgw_user.h

index 4c98b81741837d58885912749d662bc40f1bc963..0d7eb16c13474988f95ac423ecd91e69e1c4a5fd 100644 (file)
@@ -417,18 +417,17 @@ int rgw_remove_key_index(RGWRados *store, RGWAccessKey& access_key)
 
 int rgw_remove_uid_index(RGWRados *store, rgw_user& uid)
 {
-  RGWObjVersionTracker objv_tracker;
-  RGWUserInfo info;
-  int ret = rgw_get_user_info_by_uid(store, uid, info, &objv_tracker, NULL);
-  if (ret < 0)
-    return ret;
-
-  string oid = uid.to_str();
-  ret = store->meta_mgr->remove_entry(user_meta_handler, oid, &objv_tracker);
-  if (ret < 0)
-    return ret;
+  return store->meta_mgr->remove_entry(user_meta_handler, uid.to_str(), nullptr);
+}
 
-  return 0;
+int rgw_remove_user_buckets_index(RGWRados *store, rgw_user& uid)
+{
+  string buckets_obj_id;
+  rgw_get_buckets_obj(uid, buckets_obj_id);
+  rgw_raw_obj uid_bucks(store->svc.zone->get_zone_params().user_uid_pool, buckets_obj_id);
+  auto obj_ctx = store->svc.sysobj->init_obj_ctx();
+  auto sysobj = obj_ctx.get_obj(uid_bucks);
+  return sysobj.wop().remove(null_yield);
 }
 
 int rgw_remove_email_index(RGWRados *store, string& email)
@@ -489,26 +488,19 @@ int rgw_delete_user(RGWRados *store, RGWUserInfo& info, RGWObjVersionTracker& ob
     return ret;
   }
 
-  string buckets_obj_id;
-  rgw_get_buckets_obj(info.user_id, buckets_obj_id);
-  rgw_raw_obj uid_bucks(store->svc.zone->get_zone_params().user_uid_pool, buckets_obj_id);
   ldout(store->ctx(), 10) << "removing user buckets index" << dendl;
-  auto obj_ctx = store->svc.sysobj->init_obj_ctx();
-  auto sysobj = obj_ctx.get_obj(uid_bucks);
-  ret = sysobj.wop().remove(null_yield);
+  ret = rgw_remove_user_buckets_index(store, info.user_id);
   if (ret < 0 && ret != -ENOENT) {
-    ldout(store->ctx(), 0) << "ERROR: could not remove " << info.user_id << ":" << uid_bucks << ", should be fixed (err=" << ret << ")" << dendl;
+    ldout(store->ctx(), 0) << "ERROR: could not remove user buckets index object for "
+        << info.user_id << ": " << ret << dendl;
     return ret;
   }
 
-  string key;
-  info.user_id.to_str(key);
-  
-  rgw_raw_obj uid_obj(store->svc.zone->get_zone_params().user_uid_pool, key);
   ldout(store->ctx(), 10) << "removing user index: " << info.user_id << dendl;
-  ret = store->meta_mgr->remove_entry(user_meta_handler, key, &objv_tracker);
-  if (ret < 0 && ret != -ENOENT && ret  != -ECANCELED) {
-    ldout(store->ctx(), 0) << "ERROR: could not remove " << info.user_id << ":" << uid_obj << ", should be fixed (err=" << ret << ")" << dendl;
+  ret = rgw_remove_uid_index(store, info.user_id);
+  if (ret < 0 && ret != -ENOENT) {
+    ldout(store->ctx(), 0) << "ERROR: could not remove " << info.user_id
+        << ": " << ret << dendl;
     return ret;
   }
 
@@ -635,6 +627,11 @@ static bool remove_old_indexes(RGWRados *store,
       set_err_msg(err_msg, "ERROR: could not remove index for uid " + old_info.user_id.to_str());
       success = false;
     }
+    ret = rgw_remove_user_buckets_index(store, old_info.user_id);
+    if (ret < 0 && ret != -ENOENT) {
+      set_err_msg(err_msg, "ERROR: could not remove buckets index for uid " + old_info.user_id.to_str());
+      success = false;
+    }
   }
 
   if (!old_info.user_email.empty() &&
index 02805d9d521d7fbbe9b57cb61f6d7599d92e4194..fe5a7fbd4353197ffaedcc51edbfc43c969af1e8 100644 (file)
@@ -123,6 +123,7 @@ extern int rgw_delete_user(RGWRados *store, RGWUserInfo& user, RGWObjVersionTrac
  */
 extern int rgw_remove_key_index(RGWRados *store, RGWAccessKey& access_key);
 extern int rgw_remove_uid_index(RGWRados *store, rgw_user& uid);
+extern int rgw_remove_user_buckets_index(RGWRados *store, rgw_user& uid);
 extern int rgw_remove_email_index(RGWRados *store, string& email);
 extern int rgw_remove_swift_name_index(RGWRados *store, string& swift_name);