From a4f5afe6a7dad55702ec1ab36616d62f026b4a4e Mon Sep 17 00:00:00 2001 From: Yehuda Sadeh Date: Fri, 31 May 2019 14:49:01 -0700 Subject: [PATCH] rgw: move mdlog related functionality to the be_sobj impl Signed-off-by: Yehuda Sadeh --- src/rgw/rgw_metadata.cc | 2 +- src/rgw/services/svc_bucket.cc | 8 ++- src/rgw/services/svc_mdlog.cc | 4 +- src/rgw/services/svc_mdlog.h | 2 +- src/rgw/services/svc_meta_be.cc | 86 ++++++++++------------------ src/rgw/services/svc_meta_be.h | 37 +++++------- src/rgw/services/svc_meta_be_otp.cc | 10 ++-- src/rgw/services/svc_meta_be_otp.h | 10 ++-- src/rgw/services/svc_meta_be_sobj.cc | 80 +++++++++++++++++++++++--- src/rgw/services/svc_meta_be_sobj.h | 30 ++++++++-- src/rgw/services/svc_user_rados.cc | 3 +- 11 files changed, 163 insertions(+), 109 deletions(-) diff --git a/src/rgw/rgw_metadata.cc b/src/rgw/rgw_metadata.cc index 464a6678472..1c0277a78a8 100644 --- a/src/rgw/rgw_metadata.cc +++ b/src/rgw/rgw_metadata.cc @@ -448,7 +448,7 @@ int RGWMetadataHandlerPut_SObj::put_checked() encode_obj(¶ms.bl); - int ret = op->put(entry, params, &objv_tracker, y, apply_type); + int ret = op->put(entry, params, &objv_tracker, y); if (ret < 0) { return ret; } diff --git a/src/rgw/services/svc_bucket.cc b/src/rgw/services/svc_bucket.cc index 3a45633d560..5670845c150 100644 --- a/src/rgw/services/svc_bucket.cc +++ b/src/rgw/services/svc_bucket.cc @@ -22,7 +22,8 @@ class RGWSI_Bucket_Module : public RGWSI_MBSObj_Handler_Module { const string prefix; public: - RGWSI_Bucket_Module(RGWSI_Bucket::Svc& _svc) : svc(_svc) {} + RGWSI_Bucket_Module(RGWSI_Bucket::Svc& _svc) : RGWSI_MBSObj_Handler_Module("bucket"), + svc(_svc) {} void get_pool_and_oid(const string& key, rgw_pool *pool, string *oid) override { if (pool) { @@ -57,7 +58,8 @@ class RGWSI_BucketInstance_Module : public RGWSI_MBSObj_Handler_Module { const string prefix; public: - RGWSI_BucketInstance_Module(RGWSI_Bucket::Svc& _svc) : svc(_svc), prefix(RGW_BUCKET_INSTANCE_MD_PREFIX) {} + RGWSI_BucketInstance_Module(RGWSI_Bucket::Svc& _svc) : RGWSI_MBSObj_Handler_Module("bucket.instance"), + svc(_svc), prefix(RGW_BUCKET_INSTANCE_MD_PREFIX) {} void get_pool_and_oid(const string& key, rgw_pool *pool, string *oid) override { if (pool) { @@ -120,7 +122,7 @@ public: * point, so that the log entries end up at the same log shard, so that we process them * in order */ - string get_hash_key(const string& section, const string& key) override { + string get_hash_key(const string& key) override { string k = "bucket:"; int pos = key.find(':'); if (pos < 0) diff --git a/src/rgw/services/svc_mdlog.cc b/src/rgw/services/svc_mdlog.cc index 4dc0fcd9962..b2368547711 100644 --- a/src/rgw/services/svc_mdlog.cc +++ b/src/rgw/services/svc_mdlog.cc @@ -353,8 +353,8 @@ RGWMetadataLog* RGWSI_MDLog::get_log(const std::string& period) return &insert.first->second; } -int RGWSI_MDLog::add_entry(RGWSI_MetaBackend::Module *module, const string& section, const string& key, bufferlist& bl) +int RGWSI_MDLog::add_entry(const string& hash_key, const string& section, const string& key, bufferlist& bl) { ceph_assert(current_log); // must have called init() - return current_log->add_entry(module->get_hash_key(secrion, key), section, key, bl); + return current_log->add_entry(hash_key, section, key, bl); } diff --git a/src/rgw/services/svc_mdlog.h b/src/rgw/services/svc_mdlog.h index 7072f81e73d..41b65caec14 100644 --- a/src/rgw/services/svc_mdlog.h +++ b/src/rgw/services/svc_mdlog.h @@ -97,7 +97,7 @@ public: RGWObjVersionTracker *objv_tracker, bool exclusive = false); - int add_entry(RGWSI_MetaBackend::Module *module, const string& section, const string& key, bufferlist& bl); + int add_entry(const string& hash_key, const string& section, const string& key, bufferlist& bl); RGWPeriodHistory *get_period_history() { return period_history.get(); diff --git a/src/rgw/services/svc_meta_be.cc b/src/rgw/services/svc_meta_be.cc index 3bbf9477667..dfb0b17984b 100644 --- a/src/rgw/services/svc_meta_be.cc +++ b/src/rgw/services/svc_meta_be.cc @@ -1,7 +1,6 @@ #include "svc_meta_be.h" -#include "svc_mdlog.h" #include "rgw/rgw_mdlog.h" @@ -18,73 +17,43 @@ int RGWSI_MetaBackend::pre_modify(RGWSI_MetaBackend::Context *ctx, const string& key, RGWMetadataLogData& log_data, RGWObjVersionTracker *objv_tracker, - RGWMDLogStatus op_type) + RGWMDLogStatus op_type, + optional_yield y) { /* if write version has not been set, and there's a read version, set it so that we can * log it */ - if (objv_tracker) { - if (objv_tracker->read_version.ver && !objv_tracker->write_version.ver) { - objv_tracker->write_version = objv_tracker->read_version; - objv_tracker->write_version.ver++; - } - log_data.read_version = objv_tracker->read_version; - log_data.write_version = objv_tracker->write_version; + if (objv_tracker && + objv_tracker->read_version.ver && !objv_tracker->write_version.ver) { + objv_tracker->write_version = objv_tracker->read_version; + objv_tracker->write_version.ver++; } - log_data.status = op_type; - - bufferlist logbl; - encode(log_data, logbl); - - int ret = mdlog_svc->add_entry(ctx->module, ctx->section, key, logbl); - if (ret < 0) - return ret; - return 0; } int RGWSI_MetaBackend::post_modify(RGWSI_MetaBackend::Context *ctx, const string& key, RGWMetadataLogData& log_data, - RGWObjVersionTracker *objv_tracker, int ret) + RGWObjVersionTracker *objv_tracker, int ret, + optional_yield y) { - if (ret >= 0) - log_data.status = MDLOG_STATUS_COMPLETE; - else - log_data.status = MDLOG_STATUS_ABORT; - - bufferlist logbl; - encode(log_data, logbl); - - int r = mdlog_svc->add_entry(ctx->module, ctx->section, key, logbl); - if (ret < 0) - return ret; - - if (r < 0) - return r; - - return 0; + return ret; } int RGWSI_MetaBackend::prepare_mutate(RGWSI_MetaBackend::Context *ctx, const string& key, const real_time& mtime, RGWObjVersionTracker *objv_tracker, - RGWMDLogSyncType sync_mode) + optional_yield y) { real_time orig_mtime; unique_ptr params(alloc_default_get_params(&orig_mtime)); - int ret = get_entry(ctx, key, *params, objv_tracker); + int ret = get_entry(ctx, key, *params, objv_tracker, y); if (ret < 0 && ret != -ENOENT) { return ret; } - bool exists = (ret != -ENOENT); - if (!RGWMetadataHandler::check_versions(exists, objv_tracker->read_version, orig_mtime, - objv_tracker->write_version, mtime, sync_mode)) { - return STATUS_NO_APPLY; - } if (objv_tracker->write_version.tag.empty()) { if (objv_tracker->read_version.tag.empty()) { @@ -102,14 +71,14 @@ int RGWSI_MetaBackend::mutate(RGWSI_MetaBackend::Context *ctx, const ceph::real_time& mtime, RGWObjVersionTracker *objv_tracker, RGWMDLogStatus op_type, - RGWMDLogSyncType sync_mode, std::function f, - bool generic_prepare) + bool generic_prepare, + optional_yield y) { int ret; if (generic_prepare) { - ret = prepare_mutate(ctx, key, mtime, objv_tracker, sync_mode); + ret = prepare_mutate(ctx, key, mtime, objv_tracker, y); if (ret < 0 || ret == STATUS_NO_APPLY) { return ret; @@ -117,7 +86,7 @@ int RGWSI_MetaBackend::mutate(RGWSI_MetaBackend::Context *ctx, } RGWMetadataLogData log_data; - ret = pre_modify(ctx, key, log_data, objv_tracker, op_type); + ret = pre_modify(ctx, key, log_data, objv_tracker, op_type, y); if (ret < 0) { return ret; } @@ -126,7 +95,7 @@ int RGWSI_MetaBackend::mutate(RGWSI_MetaBackend::Context *ctx, /* cascading ret into post_modify() */ - ret = post_modify(ctx, key, log_data, objv_tracker, ret); + ret = post_modify(ctx, key, log_data, objv_tracker, ret, y); if (ret < 0) return ret; @@ -136,41 +105,44 @@ int RGWSI_MetaBackend::mutate(RGWSI_MetaBackend::Context *ctx, int RGWSI_MetaBackend::get(Context *ctx, const string& key, GetParams& params, - RGWObjVersionTracker *objv_tracker) + RGWObjVersionTracker *objv_tracker, + optional_yield y) { - return get_entry(ctx, key, params, objv_tracker); + return get_entry(ctx, key, params, objv_tracker, y); } int RGWSI_MetaBackend::put(Context *ctx, const string& key, PutParams& params, RGWObjVersionTracker *objv_tracker, - RGWMDLogSyncType sync_mode) + optional_yield y) { std::function f = [&]() { - return put_entry(ctx, key, params, objv_tracker); + return put_entry(ctx, key, params, objv_tracker, y); }; return mutate(ctx, key, params.mtime, objv_tracker, - MDLOG_STATUS_WRITE, sync_mode, + MDLOG_STATUS_WRITE, f, - false); + false, + y); } int RGWSI_MetaBackend::remove(Context *ctx, const string& key, RemoveParams& params, RGWObjVersionTracker *objv_tracker, - RGWMDLogSyncType sync_mode) + optional_yield y) { std::function f = [&]() { - return remove_entry(ctx, key, params, objv_tracker); + return remove_entry(ctx, key, params, objv_tracker, y); }; return mutate(ctx, key, params.mtime, objv_tracker, - MDLOG_STATUS_REMOVE, sync_mode, + MDLOG_STATUS_REMOVE, f, - false); + false, + y); } diff --git a/src/rgw/services/svc_meta_be.h b/src/rgw/services/svc_meta_be.h index 0232b396eae..b20f8227e0b 100644 --- a/src/rgw/services/svc_meta_be.h +++ b/src/rgw/services/svc_meta_be.h @@ -44,25 +44,27 @@ protected: const std::string& key, const ceph::real_time& mtime, RGWObjVersionTracker *objv_tracker, - RGWMDLogSyncType sync_mode); + optional_yield y); virtual int mutate(Context *ctx, const std::string& key, const ceph::real_time& mtime, RGWObjVersionTracker *objv_tracker, RGWMDLogStatus op_type, - RGWMDLogSyncType sync_mode, std::function f, - bool generic_prepare); + bool generic_prepare, + optional_yield y); virtual int pre_modify(Context *ctx, const std::string& key, RGWMetadataLogData& log_data, RGWObjVersionTracker *objv_tracker, - RGWMDLogStatus op_type); + RGWMDLogStatus op_type, + optional_yield y); virtual int post_modify(Context *ctx, const std::string& key, RGWMetadataLogData& log_data, - RGWObjVersionTracker *objv_tracker, int ret); + RGWObjVersionTracker *objv_tracker, int ret, + optional_yield y); public: class Module { /* @@ -70,14 +72,6 @@ public: */ public: virtual ~Module() = 0; - - /* - * return key used for hashing specific section and key. Needed for determining where - * to store mdlog entries, e.g., bucket.index entries will be stored without using - * the bucket id, to ensure that bucket and bucket.instance of the same Bucket go to the - * same place. - */ - virtual std::string get_hash_key(const std::string& section, const std::string& key) = 0; }; using ModuleRef = std::shared_ptr; @@ -166,16 +160,13 @@ public: const std::string& key, PutParams& params, RGWObjVersionTracker *objv_tracker, - optional_yield y, - RGWMDLogSyncType sync_mode); + optional_yield y); virtual int remove(Context *ctx, const std::string& key, RemoveParams& params, RGWObjVersionTracker *objv_tracker, - optional_yield y, - RGWMDLogSyncType sync_mode); - + optional_yield y); }; class RGWSI_MetaBackend_Handler { @@ -204,16 +195,14 @@ public: int put(const std::string& key, RGWSI_MetaBackend::PutParams& params, - RGWObjVersionTracker *objv_tracker, - RGWMDLogSyncType sync_mode) { - return be->put(be_ctx, key, params, objv_tracker, sync_mode); + RGWObjVersionTracker *objv_tracker) { + return be->put(be_ctx, key, params, objv_tracker); } int remove(const std::string& key, RGWSI_MetaBackend::RemoveParams& params, - RGWObjVersionTracker *objv_tracker, - RGWMDLogSyncType sync_mode) { - return be->remove(be_ctx, key, params, objv_tracker, sync_mode); + RGWObjVersionTracker *objv_tracker) { + return be->remove(be_ctx, key, params, objv_tracker); } int list_init(const string& marker) { diff --git a/src/rgw/services/svc_meta_be_otp.cc b/src/rgw/services/svc_meta_be_otp.cc index 1bcce05186d..9e565394b14 100644 --- a/src/rgw/services/svc_meta_be_otp.cc +++ b/src/rgw/services/svc_meta_be_otp.cc @@ -37,12 +37,13 @@ RGWSI_MetaBackend::GetParams *RGWSI_MetaBackend_OTP::alloc_default_get_params(ce int RGWSI_MetaBackend_SObj::get_entry(RGWSI_MetaBackend::Context *_ctx, RGWSI_MetaBackend::GetParams& _params, - RGWObjVersionTracker *objv_tracker) + RGWObjVersionTracker *objv_tracker, + optional_yield y) { RGWSI_MetaBackend_SObj::Context_OTP *ctx = static_cast(_ctx); RGWSI_MBOTP_GetParams& params = static_cast(_params); - int r = svc.cls->mfa.list_mfa(ctx->key, params.pdevices, objv_tracker, params.pmtime, null_yield); + int r = svc.cls->mfa.list_mfa(ctx->key, params.pdevices, objv_tracker, params.pmtime, y); if (r < 0) { return r; } @@ -52,11 +53,12 @@ int RGWSI_MetaBackend_SObj::get_entry(RGWSI_MetaBackend::Context *_ctx, int RGWSI_MetaBackend_SObj::put_entry(RGWSI_MetaBackend::Context *_ctx, RGWSI_MetaBackend::PutParams& _params, - RGWObjVersionTracker *objv_tracker) + RGWObjVersionTracker *objv_tracker, + optional_yield y) { RGWSI_MetaBackend_OTP::Context_OTP *ctx = static_cast(_ctx); RGWSI_MBOTP_PutParams& params = static_cast(_params); - return svc.cls->mfa.set_mfa(ctx->key, params.devices, true, &objv_tracker, mtime, null_yield); + return svc.cls->mfa.set_mfa(ctx->key, params.devices, true, &objv_tracker, mtime, y); } diff --git a/src/rgw/services/svc_meta_be_otp.h b/src/rgw/services/svc_meta_be_otp.h index 54508f70990..137bf90f093 100644 --- a/src/rgw/services/svc_meta_be_otp.h +++ b/src/rgw/services/svc_meta_be_otp.h @@ -64,16 +64,18 @@ public: cls_svc = _cls_svc; } - void init_ctx(RGWSI_MetaBackend_Handle handle, RGWSI_MetaBackend::Context *ctx) override; - RGWSI_MetaBackend::GetParams *alloc_default_get_params(ceph::real_time *pmtime) override; int get_entry(RGWSI_MetaBackend::Context *ctx, + const string& key, RGWSI_MetaBackend::GetParams& _params, - RGWObjVersionTracker *objv_tracker); + RGWObjVersionTracker *objv_tracker, + optional_yield y); int put_entry(RGWSI_MetaBackend::Context *ctx, + const string& key, RGWSI_MetaBackend::PutParams& _params, - RGWObjVersionTracker *objv_tracker); + RGWObjVersionTracker *objv_tracker, + optional_yield y); }; diff --git a/src/rgw/services/svc_meta_be_sobj.cc b/src/rgw/services/svc_meta_be_sobj.cc index df4e37711c9..191564d8691 100644 --- a/src/rgw/services/svc_meta_be_sobj.cc +++ b/src/rgw/services/svc_meta_be_sobj.cc @@ -1,5 +1,6 @@ #include "svc_meta_be_sobj.h" +#include "svc_mdlog.h" #include "rgw/rgw_tools.h" #include "rgw/rgw_metadata.h" @@ -21,7 +22,67 @@ RGWSI_MetaBackend_Handler *RGWSI_MetaBackend_SObj::alloc_be_handler() RGWSI_MetaBackend::Context *RGWSI_MetaBackend_SObj::alloc_ctx() { - return new ctx(sysobj_svc); + return new Context_SObj(sysobj_svc); +} + +int RGWSI_MetaBackend_SObj::pre_modify(RGWSI_MetaBackend::Context *_ctx, + const string& key, + RGWMetadataLogData& log_data, + RGWObjVersionTracker *objv_tracker, + RGWMDLogStatus op_type, + optional_yield y) +{ + auto ctx = static_cast(_ctx); + int ret = RGWSI_MetaBackend::pre_modify(ctx, key, log_data, + objv_tracker, op_type, + y); + if (ret < 0) { + return ret; + } + + /* if write version has not been set, and there's a read version, set it so that we can + * log it + */ + if (objv_tracker) { + log_data.read_version = objv_tracker->read_version; + log_data.write_version = objv_tracker->write_version; + } + + log_data.status = op_type; + + bufferlist logbl; + encode(log_data, logbl); + + ret = mdlog_svc->add_entry(ctx->module->get_hash_key(key), ctx->module->get_section(), key, logbl); + if (ret < 0) + return ret; + + return 0; +} + +int RGWSI_MetaBackend_SObj::post_modify(RGWSI_MetaBackend::Context *_ctx, + const string& key, + RGWMetadataLogData& log_data, + RGWObjVersionTracker *objv_tracker, int ret, + optional_yield y) +{ + auto ctx = static_cast(_ctx); + if (ret >= 0) + log_data.status = MDLOG_STATUS_COMPLETE; + else + log_data.status = MDLOG_STATUS_ABORT; + + bufferlist logbl; + encode(log_data, logbl); + + int r = mdlog_svc->add_entry(ctx->module->get_hash_key(key), ctx->module->get_section(), key, logbl); + if (ret < 0) + return ret; + + if (r < 0) + return r; + + return RGWSI_MetaBackend::post_modify(ctx, key, log_data, objv_tracker, ret, y); } int RGWSI_MetaBackend_SObj::call(std::function f) @@ -49,7 +110,8 @@ RGWSI_MetaBackend::GetParams *RGWSI_MetaBackend_SObj::alloc_default_get_params(c int RGWSI_MetaBackend_SObj::get_entry(RGWSI_MetaBackend::Context *_ctx, const string& key, GetParams& _params, - RGWObjVersionTracker *objv_tracker) + RGWObjVersionTracker *objv_tracker, + optional_yield y) { RGWSI_MetaBackend_SObj::Context_SObj *ctx = static_cast(_ctx); RGWSI_MBSObj_GetParams& params = static_cast(_params); @@ -60,7 +122,7 @@ int RGWSI_MetaBackend_SObj::get_entry(RGWSI_MetaBackend::Context *_ctx, return rgw_get_system_obj(*ctx->obj_ctx, pool, oid, *params.pbl, objv_tracker, params.pmtime, - params.y, + y, params.pattrs, params.cache_info, params.refresh_version); } @@ -68,7 +130,8 @@ int RGWSI_MetaBackend_SObj::get_entry(RGWSI_MetaBackend::Context *_ctx, int RGWSI_MetaBackend_SObj::put_entry(RGWSI_MetaBackend::Context *_ctx, const string& key, PutParams& _params, - RGWObjVersionTracker *objv_tracker) + RGWObjVersionTracker *objv_tracker, + optional_yield y) { RGWSI_MetaBackend_SObj::Context_SObj *ctx = static_cast(_ctx); RGWSI_MBSObj_PutParams& params = static_cast(_params); @@ -78,13 +141,14 @@ int RGWSI_MetaBackend_SObj::put_entry(RGWSI_MetaBackend::Context *_ctx, ctx->module->get_pool_and_oid(key, &pool, &oid); return rgw_put_system_obj(*ctx->obj_ctx, pool, oid, params.bl, params.exclusive, - objv_tracker, params.mtime, params.y, params.pattrs); + objv_tracker, params.mtime, y, params.pattrs); } int RGWSI_MetaBackend_SObj::remove_entry(RGWSI_MetaBackend::Context *_ctx, const string& key, RemoveParams& params, - RGWObjVersionTracker *objv_tracker) + RGWObjVersionTracker *objv_tracker, + optional_yield y) { RGWSI_MetaBackend_SObj::Context_SObj *ctx = static_cast(_ctx); @@ -96,7 +160,7 @@ int RGWSI_MetaBackend_SObj::remove_entry(RGWSI_MetaBackend::Context *_ctx, auto sysobj = ctx->obj_ctx->get_obj(k); return sysobj.wop() .set_objv_tracker(objv_tracker) - .remove(params.y); + .remove(y); } int RGWSI_MetaBackend_SObj::list_init(RGWSI_MetaBackend::Context *_ctx, @@ -112,7 +176,7 @@ int RGWSI_MetaBackend_SObj::list_init(RGWSI_MetaBackend::Context *_ctx, ctx->list.pool = sysobj_svc->get_pool(pool); ctx->list.op.emplace(ctx->list.pool->op()); - string prefix = ctx->module->get_prefix(); + string prefix = ctx->module->get_oid_prefix(); ctx->list.op->init(marker, prefix); return 0; diff --git a/src/rgw/services/svc_meta_be_sobj.h b/src/rgw/services/svc_meta_be_sobj.h index 70a2b2b6ffe..fda798aeedd 100644 --- a/src/rgw/services/svc_meta_be_sobj.h +++ b/src/rgw/services/svc_meta_be_sobj.h @@ -25,15 +25,22 @@ class RGWSI_MBSObj_Handler_Module : public RGWSI_MetaBackend::Module { +protected: + string section; public: + RGWSI_MBSObj_Handler_Module(const string& _section) : section(_section) {} virtual void get_pool_and_oid(const std::string& key, rgw_pool *pool, std::string *oid) = 0; virtual const std::string& get_oid_prefix() = 0; virtual std::string key_to_oid(const std::string& key) = 0; virtual bool is_valid_oid(const std::string& oid) = 0; virtual std::string oid_to_key(const std::string& oid) = 0; + const std::string& get_section() { + return section; + } + /* key to use for hashing entries for log shard placement */ - virtual std::string get_hash_key(const std::string& section, const std::string& key) { + virtual std::string get_hash_key(const std::string& key) { return section + ":" + key; } }; @@ -123,18 +130,33 @@ public: RGWSI_MetaBackend::GetParams *alloc_default_get_params(ceph::real_time *pmtime) override; + int pre_modify(RGWSI_MetaBackend::Context *ctx, + const string& key, + RGWMetadataLogData& log_data, + RGWObjVersionTracker *objv_tracker, + RGWMDLogStatus op_type, + optional_yield y); + int post_modify(RGWSI_MetaBackend::Context *ctx, + const string& key, + RGWMetadataLogData& log_data, + RGWObjVersionTracker *objv_tracker, int ret, + optional_yield y); + int get_entry(RGWSI_MetaBackend::Context *ctx, const string& key, RGWSI_MetaBackend::GetParams& params, - RGWObjVersionTracker *objv_tracker) override; + RGWObjVersionTracker *objv_tracker, + optional_yield y) override; int put_entry(RGWSI_MetaBackend::Context *ctx, const string& key, RGWSI_MetaBackend::PutParams& params, - RGWObjVersionTracker *objv_tracker) override; + RGWObjVersionTracker *objv_tracker, + optional_yield y) override; int remove_entry(RGWSI_MetaBackend::Context *ctx, const string& key, RGWSI_MetaBackend::RemoveParams& params, - RGWObjVersionTracker *objv_tracker) override; + RGWObjVersionTracker *objv_tracker, + optional_yield y) override; int list_init(RGWSI_MetaBackend::Context *_ctx, const string& marker) override; int list_next(RGWSI_MetaBackend::Context *_ctx, diff --git a/src/rgw/services/svc_user_rados.cc b/src/rgw/services/svc_user_rados.cc index 861983c7d1e..77b1895344c 100644 --- a/src/rgw/services/svc_user_rados.cc +++ b/src/rgw/services/svc_user_rados.cc @@ -26,7 +26,8 @@ class RGWSI_User_Module : public RGWSI_MBSObj_Handler_Module { const string prefix; public: - RGWSI_User_Module(RGWSI_User_RADOS::Svc& _svc) : svc(_svc) {} + RGWSI_User_Module(RGWSI_User_RADOS::Svc& _svc) : RGWSI_MBSObj_Handler_Module("user"), + svc(_svc) {} void get_pool_and_oid(const string& key, rgw_pool *pool, string *oid) override { if (pool) { -- 2.39.5