From: Casey Bodley Date: Tue, 6 Aug 2019 14:24:06 +0000 (-0400) Subject: rgw: add rgw_remove_user_buckets_index X-Git-Tag: v15.1.0~1913^2~5 X-Git-Url: http://git.apps.os.sepia.ceph.com/?a=commitdiff_plain;h=b8a60eb04684572e4993187630bd1871e5561604;p=ceph-ci.git rgw: add rgw_remove_user_buckets_index 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 --- diff --git a/src/rgw/rgw_user.cc b/src/rgw/rgw_user.cc index 4c98b817418..0d7eb16c134 100644 --- a/src/rgw/rgw_user.cc +++ b/src/rgw/rgw_user.cc @@ -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() && diff --git a/src/rgw/rgw_user.h b/src/rgw/rgw_user.h index 02805d9d521..fe5a7fbd435 100644 --- a/src/rgw/rgw_user.h +++ b/src/rgw/rgw_user.h @@ -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);