From a2b37a10f80ca13d33f05b469b503a44993fdcec Mon Sep 17 00:00:00 2001 From: Casey Bodley Date: Sun, 3 Dec 2023 19:12:13 -0500 Subject: [PATCH] rgw/metadata: use raw RGWMetadataHandler for user metadata Signed-off-by: Casey Bodley --- src/rgw/driver/rados/rgw_service.cc | 8 +- src/rgw/driver/rados/rgw_user.cc | 237 ++++++++++++++++++---------- src/rgw/driver/rados/rgw_user.h | 54 +------ src/rgw/services/svc_user.h | 10 +- src/rgw/services/svc_user_rados.cc | 112 ++++++------- src/rgw/services/svc_user_rados.h | 26 ++- 6 files changed, 231 insertions(+), 216 deletions(-) diff --git a/src/rgw/driver/rados/rgw_service.cc b/src/rgw/driver/rados/rgw_service.cc index b6239ac3ea4..5b9d7119560 100644 --- a/src/rgw/driver/rados/rgw_service.cc +++ b/src/rgw/driver/rados/rgw_service.cc @@ -119,8 +119,8 @@ int RGWServices_Def::init(CephContext *cct, } else { sysobj->init(driver->getRados()->get_rados_handle(), sysobj_core.get()); } - user_rados->init(driver->getRados()->get_rados_handle(), zone.get(), sysobj.get(), sysobj_cache.get(), - meta.get(), meta_be_sobj.get(), sync_modules.get()); + user_rados->init(driver->getRados()->get_rados_handle(), zone.get(), mdlog.get(), + sysobj.get(), sysobj_cache.get(), meta.get()); role_rados->init(zone.get(), meta.get(), meta_be_sobj.get(), sysobj.get()); can_shutdown = true; @@ -365,7 +365,7 @@ int RGWCtlDef::init(RGWServices& svc, rgw::sal::Driver* driver, { meta.mgr.reset(new RGWMetadataManager(svc.meta)); - meta.user.reset(RGWUserMetaHandlerAllocator::alloc(svc.user)); + meta.user = create_user_metadata_handler(svc.user); bucket.reset(new RGWBucketCtl(svc.zone, svc.bucket, @@ -391,7 +391,7 @@ int RGWCtlDef::init(RGWServices& svc, rgw::sal::Driver* driver, meta.group = rgwrados::group::create_metadata_handler( *svc.sysobj, rados, svc.zone->get_zone_params()); - user.reset(new RGWUserCtl(svc.zone, svc.user, (RGWUserMetadataHandler *)meta.user.get())); + user = std::make_unique(svc.zone, svc.user); meta.topic_cache = std::make_unique>(); meta.topic_cache->init(svc.cache); diff --git a/src/rgw/driver/rados/rgw_user.cc b/src/rgw/driver/rados/rgw_user.cc index 4dbc7de7484..d26495d9b0f 100644 --- a/src/rgw/driver/rados/rgw_user.cc +++ b/src/rgw/driver/rados/rgw_user.cc @@ -1,12 +1,14 @@ // -*- mode:C++; tab-width:8; c-basic-offset:2; indent-tabs-mode:t -*- // vim: ts=8 sw=2 smarttab ft=cpp +#include "rgw_user.h" #include "common/errno.h" -#include "rgw_user.h" #include "rgw_account.h" #include "rgw_bucket.h" +#include "rgw_metadata.h" +#include "rgw_metadata_lister.h" #include "rgw_quota.h" #include "rgw_rest_iam.h" // validate_iam_user_name() @@ -2701,42 +2703,48 @@ int RGWUserAdminOp_Caps::remove(const DoutPrefixProvider *dpp, return 0; } -class RGWUserMetadataHandler : public RGWMetadataHandler_GenericMetaBE { -public: - struct Svc { - RGWSI_User *user{nullptr}; - } svc; +struct RGWUserCompleteInfo { + RGWUserInfo info; + std::map attrs; + bool has_attrs{false}; - RGWUserMetadataHandler(RGWSI_User *user_svc) { - base_init(user_svc->ctx(), user_svc->get_be_handler()); - svc.user = user_svc; + void dump(Formatter * const f) const { + info.dump(f); + encode_json("attrs", attrs, f); } - ~RGWUserMetadataHandler() {} - - string get_type() override { return "user"; } + void decode_json(JSONObj *obj) { + decode_json_obj(info, obj); + has_attrs = JSONDecoder::decode_json("attrs", attrs, obj); + } +}; - int do_get(RGWSI_MetaBackend_Handler::Op *op, string& entry, RGWMetadataObject **obj, optional_yield y, const DoutPrefixProvider *dpp) override { - RGWUserCompleteInfo uci; - RGWObjVersionTracker objv_tracker; - real_time mtime; +class RGWUserMetadataObject : public RGWMetadataObject { + RGWUserCompleteInfo uci; +public: + RGWUserMetadataObject(const RGWUserCompleteInfo& uci, + const obj_version& v, ceph::real_time m) + : RGWMetadataObject(v, m), uci(uci) {} - rgw_user user = RGWSI_User::user_from_meta_key(entry); + void dump(Formatter *f) const override { + uci.dump(f); + } - int ret = svc.user->read_user_info(user, &uci.info, &objv_tracker, - &mtime, nullptr, &uci.attrs, - y, dpp); - if (ret < 0) { - return ret; - } + RGWUserCompleteInfo& get_uci() { + return uci; + } +}; - RGWUserMetadataObject *mdo = new RGWUserMetadataObject(uci, objv_tracker.read_version, mtime); - *obj = mdo; +class RGWUserMetadataHandler : public RGWMetadataHandler { + RGWSI_User *svc_user{nullptr}; + public: + explicit RGWUserMetadataHandler(RGWSI_User* svc_user) + : svc_user(svc_user) {} - return 0; - } + string get_type() override { return "user"; } - RGWMetadataObject *get_meta_obj(JSONObj *jo, const obj_version& objv, const ceph::real_time& mtime) override { + RGWMetadataObject *get_meta_obj(JSONObj *jo, const obj_version& objv, + const ceph::real_time& mtime) override { RGWUserCompleteInfo uci; try { @@ -2748,87 +2756,144 @@ public: return new RGWUserMetadataObject(uci, objv, mtime); } - int do_put(RGWSI_MetaBackend_Handler::Op *op, string& entry, - RGWMetadataObject *obj, - RGWObjVersionTracker& objv_tracker, - optional_yield y, const DoutPrefixProvider *dpp, - RGWMDLogSyncType type, bool from_remote_zone) override; - - int do_remove(RGWSI_MetaBackend_Handler::Op *op, string& entry, RGWObjVersionTracker& objv_tracker, - optional_yield y, const DoutPrefixProvider *dpp) override { - RGWUserInfo info; + int get(std::string& entry, RGWMetadataObject** obj, optional_yield y, + const DoutPrefixProvider *dpp) override; + int put(std::string& entry, RGWMetadataObject* obj, + RGWObjVersionTracker& objv_tracker, + optional_yield y, const DoutPrefixProvider* dpp, + RGWMDLogSyncType type, bool from_remote_zone) override; + int remove(std::string& entry, RGWObjVersionTracker& objv_tracker, + optional_yield y, const DoutPrefixProvider *dpp) override; + + int mutate(const std::string& entry, const ceph::real_time& mtime, + RGWObjVersionTracker* objv_tracker, optional_yield y, + const DoutPrefixProvider* dpp, RGWMDLogStatus op_type, + std::function f) override; + + int list_keys_init(const DoutPrefixProvider* dpp, const std::string& marker, + void** phandle) override; + int list_keys_next(const DoutPrefixProvider* dpp, void* handle, int max, + std::list& keys, bool* truncated) override; + void list_keys_complete(void *handle) override; + std::string get_marker(void *handle) override; +}; - rgw_user user = RGWSI_User::user_from_meta_key(entry); +int RGWUserMetadataHandler::get(std::string& entry, RGWMetadataObject **obj, + optional_yield y, const DoutPrefixProvider *dpp) +{ + RGWUserCompleteInfo uci; + RGWObjVersionTracker objv_tracker; + real_time mtime; - int ret = svc.user->read_user_info(user, &info, nullptr, - nullptr, nullptr, nullptr, - y, dpp); - if (ret < 0) { - return ret; - } + rgw_user user = RGWSI_User::user_from_meta_key(entry); - return svc.user->remove_user_info(info, &objv_tracker, y, dpp); + int ret = svc_user->read_user_info(user, &uci.info, &objv_tracker, + &mtime, nullptr, &uci.attrs, + y, dpp); + if (ret < 0) { + return ret; } -}; -class RGWMetadataHandlerPut_User : public RGWMetadataHandlerPut_SObj + *obj = new RGWUserMetadataObject(uci, objv_tracker.read_version, mtime); + return 0; +} + +int RGWUserMetadataHandler::put(std::string& entry, RGWMetadataObject *obj, + RGWObjVersionTracker& objv_tracker, + optional_yield y, const DoutPrefixProvider *dpp, + RGWMDLogSyncType type, bool from_remote_zone) { - RGWUserMetadataHandler *uhandler; - RGWUserMetadataObject *uobj; -public: - RGWMetadataHandlerPut_User(RGWUserMetadataHandler *_handler, - RGWSI_MetaBackend_Handler::Op *op, string& entry, - RGWMetadataObject *obj, RGWObjVersionTracker& objv_tracker, - optional_yield y, - RGWMDLogSyncType type, bool from_remote_zone) : RGWMetadataHandlerPut_SObj(_handler, op, entry, obj, objv_tracker, y, type, from_remote_zone), - uhandler(_handler) { - uobj = static_cast(obj); + const rgw_user user = RGWSI_User::user_from_meta_key(entry); + + // read existing user info + std::optional old = RGWUserCompleteInfo{}; + int ret = svc_user->read_user_info(user, &old->info, &objv_tracker, + nullptr, nullptr, &old->attrs, y, dpp); + if (ret == -ENOENT) { + old = std::nullopt; + } else if (ret < 0) { + return ret; } + RGWUserInfo* pold_info = (old ? &old->info : nullptr); - int put_checked(const DoutPrefixProvider *dpp) override; -}; + // store the updated user info + auto newobj = static_cast(obj); + RGWUserCompleteInfo& uci = newobj->get_uci(); + auto pattrs = (uci.has_attrs ? &uci.attrs : nullptr); + auto mtime = obj->get_mtime(); -int RGWUserMetadataHandler::do_put(RGWSI_MetaBackend_Handler::Op *op, string& entry, - RGWMetadataObject *obj, - RGWObjVersionTracker& objv_tracker, - optional_yield y, const DoutPrefixProvider *dpp, - RGWMDLogSyncType type, bool from_remote_zone) -{ - RGWMetadataHandlerPut_User put_op(this, op, entry, obj, objv_tracker, y, type, from_remote_zone); - return do_put_operate(&put_op, dpp); + ret = svc_user->store_user_info(uci.info, pold_info, &objv_tracker, + mtime, false, pattrs, y, dpp); + if (ret < 0) { + return ret; + } + + return STATUS_APPLIED; } -int RGWMetadataHandlerPut_User::put_checked(const DoutPrefixProvider *dpp) +int RGWUserMetadataHandler::remove(std::string& entry, RGWObjVersionTracker& objv_tracker, + optional_yield y, const DoutPrefixProvider *dpp) { - RGWUserMetadataObject *orig_obj = static_cast(old_obj); - RGWUserCompleteInfo& uci = uobj->get_uci(); + RGWUserInfo info; - map *pattrs{nullptr}; - if (uci.has_attrs) { - pattrs = &uci.attrs; + rgw_user user = RGWSI_User::user_from_meta_key(entry); + + int ret = svc_user->read_user_info(user, &info, nullptr, + nullptr, nullptr, nullptr, + y, dpp); + if (ret < 0) { + return ret; } - RGWUserInfo *pold_info = (orig_obj ? &orig_obj->get_uci().info : nullptr); + return svc_user->remove_user_info(info, &objv_tracker, y, dpp); +}; - auto mtime = obj->get_mtime(); +int RGWUserMetadataHandler::mutate(const std::string& entry, const ceph::real_time& mtime, + RGWObjVersionTracker* objv_tracker, optional_yield y, + const DoutPrefixProvider* dpp, RGWMDLogStatus op_type, + std::function f) +{ + return -ENOTSUP; // unused +} - int ret = uhandler->svc.user->store_user_info(uci.info, pold_info, - &objv_tracker, mtime, - false, pattrs, y, dpp); +int RGWUserMetadataHandler::list_keys_init(const DoutPrefixProvider* dpp, + const std::string& marker, + void** phandle) +{ + std::unique_ptr lister; + int ret = svc_user->create_lister(dpp, marker, lister); if (ret < 0) { return ret; } + *phandle = lister.release(); // release ownership + return 0; +} - return STATUS_APPLIED; +int RGWUserMetadataHandler::list_keys_next(const DoutPrefixProvider* dpp, + void* handle, int max, + std::list& keys, + bool* truncated) +{ + auto lister = static_cast(handle); + return lister->get_next(dpp, max, keys, truncated); +} + +void RGWUserMetadataHandler::list_keys_complete(void *handle) +{ + delete static_cast(handle); +} + +std::string RGWUserMetadataHandler::get_marker(void *handle) +{ + auto lister = static_cast(handle); + return lister->get_marker(); } -RGWUserCtl::RGWUserCtl(RGWSI_Zone *zone_svc, - RGWSI_User *user_svc, - RGWUserMetadataHandler *_umhandler) : umhandler(_umhandler) { +RGWUserCtl::RGWUserCtl(RGWSI_Zone *zone_svc, RGWSI_User *user_svc) +{ svc.zone = zone_svc; svc.user = user_svc; - be_handler = umhandler->get_be_handler(); } template @@ -2953,8 +3018,10 @@ int RGWUserCtl::remove_info(const DoutPrefixProvider *dpp, return svc.user->remove_user_info(info, params.objv_tracker, y, dpp); } -RGWMetadataHandler *RGWUserMetaHandlerAllocator::alloc(RGWSI_User *user_svc) { - return new RGWUserMetadataHandler(user_svc); +auto create_user_metadata_handler(RGWSI_User *user_svc) + -> std::unique_ptr +{ + return std::make_unique(user_svc); } void rgw_user::dump(Formatter *f) const diff --git a/src/rgw/driver/rados/rgw_user.h b/src/rgw/driver/rados/rgw_user.h index d3303f96257..ab157f38e39 100644 --- a/src/rgw/driver/rados/rgw_user.h +++ b/src/rgw/driver/rados/rgw_user.h @@ -15,7 +15,6 @@ #include "common/Formatter.h" #include "rgw_formats.h" -#include "rgw_metadata.h" #include "rgw_sal_fwd.h" #define RGW_USER_ANON_ID "anonymous" @@ -29,6 +28,8 @@ class RGWUserCtl; class RGWBucketCtl; class RGWUserBuckets; +class RGWMetadataHandler; +class RGWSI_User; // generate a random secret access key of SECRET_KEY_LEN=40 void rgw_generate_secret_key(CephContext* cct, @@ -728,43 +729,6 @@ public: optional_yield y); }; -struct RGWUserCompleteInfo { - RGWUserInfo info; - std::map attrs; - bool has_attrs{false}; - - void dump(Formatter * const f) const { - info.dump(f); - encode_json("attrs", attrs, f); - } - - void decode_json(JSONObj *obj) { - decode_json_obj(info, obj); - has_attrs = JSONDecoder::decode_json("attrs", attrs, obj); - } -}; - -class RGWUserMetadataObject : public RGWMetadataObject { - RGWUserCompleteInfo uci; -public: - RGWUserMetadataObject() {} - RGWUserMetadataObject(const RGWUserCompleteInfo& _uci, const obj_version& v, real_time m) - : uci(_uci) { - objv = v; - mtime = m; - } - - void dump(Formatter *f) const override { - uci.dump(f); - } - - RGWUserCompleteInfo& get_uci() { - return uci; - } -}; - -class RGWUserMetadataHandler; - class RGWUserCtl { struct Svc { @@ -776,13 +740,8 @@ class RGWUserCtl RGWBucketCtl *bucket{nullptr}; } ctl; - RGWUserMetadataHandler *umhandler; - RGWSI_MetaBackend_Handler *be_handler{nullptr}; - public: - RGWUserCtl(RGWSI_Zone *zone_svc, - RGWSI_User *user_svc, - RGWUserMetadataHandler *_umhandler); + RGWUserCtl(RGWSI_Zone *zone_svc, RGWSI_User *user_svc); void init(RGWBucketCtl *bucket_ctl) { ctl.bucket = bucket_ctl; @@ -894,7 +853,6 @@ public: const RemoveParams& params = {}); }; -class RGWUserMetaHandlerAllocator { -public: - static RGWMetadataHandler *alloc(RGWSI_User *user_svc); -}; +// user metadata handler factory +auto create_user_metadata_handler(RGWSI_User *user_svc) + -> std::unique_ptr; diff --git a/src/rgw/services/svc_user.h b/src/rgw/services/svc_user.h index 88724ca2bc4..64c0259956f 100644 --- a/src/rgw/services/svc_user.h +++ b/src/rgw/services/svc_user.h @@ -17,11 +17,11 @@ #pragma once -#include "svc_meta_be.h" - +#include #include "rgw_service.h" #include "rgw_sal_fwd.h" +class RGWMetadataLister; struct RGWUID; class RGWSI_User : public RGWServiceInstance @@ -38,12 +38,14 @@ public: return rgw_user(key); } - virtual RGWSI_MetaBackend_Handler *get_be_handler() = 0; - /* base svc_user interfaces */ virtual rgw_raw_obj get_buckets_obj(const rgw_user& user_id) const = 0; + virtual int create_lister(const DoutPrefixProvider* dpp, + const std::string& marker, + std::unique_ptr& lister) = 0; + virtual int read_user_info(const rgw_user& user, RGWUserInfo *info, RGWObjVersionTracker * const objv_tracker, diff --git a/src/rgw/services/svc_user_rados.cc b/src/rgw/services/svc_user_rados.cc index 47c88123984..1e0533d2e8d 100644 --- a/src/rgw/services/svc_user_rados.cc +++ b/src/rgw/services/svc_user_rados.cc @@ -5,16 +5,16 @@ #include "svc_user.h" #include "svc_user_rados.h" +#include "svc_mdlog.h" #include "svc_zone.h" #include "svc_sys_obj.h" #include "svc_sys_obj_cache.h" #include "svc_meta.h" -#include "svc_meta_be_sobj.h" -#include "svc_sync_modules.h" #include "rgw_user.h" #include "rgw_account.h" #include "rgw_bucket.h" +#include "rgw_metadata_lister.h" #include "rgw_tools.h" #include "rgw_zone.h" #include "rgw_rados.h" @@ -30,41 +30,6 @@ using namespace std; -class RGWSI_User_Module : public RGWSI_MBSObj_Handler_Module { - RGWSI_User_RADOS::Svc& svc; - - const string prefix; -public: - 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) { - *pool = svc.zone->get_zone_params().user_uid_pool; - } - if (oid) { - *oid = key; - } - } - - const string& get_oid_prefix() override { - return prefix; - } - - bool is_valid_oid(const string& oid) override { - // filter out the user.buckets objects - return !boost::algorithm::ends_with(oid, RGW_BUCKETS_OBJ_SUFFIX); - } - - string key_to_oid(const string& key) override { - return key; - } - - string oid_to_key(const string& oid) override { - return oid; - } -}; - RGWSI_User_RADOS::RGWSI_User_RADOS(CephContext *cct): RGWSI_User(cct) { } @@ -72,37 +37,25 @@ RGWSI_User_RADOS::~RGWSI_User_RADOS() { } void RGWSI_User_RADOS::init(librados::Rados* rados_, - RGWSI_Zone *_zone_svc, RGWSI_SysObj *_sysobj_svc, - RGWSI_SysObj_Cache *_cache_svc, RGWSI_Meta *_meta_svc, - RGWSI_MetaBackend *_meta_be_svc, - RGWSI_SyncModules *_sync_modules_svc) + RGWSI_Zone *_zone_svc, + RGWSI_MDLog *mdlog_svc, + RGWSI_SysObj *_sysobj_svc, + RGWSI_SysObj_Cache *_cache_svc, + RGWSI_Meta *_meta_svc) { svc.user = this; rados = rados_; svc.zone = _zone_svc; + svc.mdlog = mdlog_svc; svc.sysobj = _sysobj_svc; svc.cache = _cache_svc; svc.meta = _meta_svc; - svc.meta_be = _meta_be_svc; - svc.sync_modules = _sync_modules_svc; } int RGWSI_User_RADOS::do_start(optional_yield, const DoutPrefixProvider *dpp) { uinfo_cache.reset(new RGWChainedCacheImpl); uinfo_cache->init(svc.cache); - - int r = svc.meta->create_be_handler(RGWSI_MetaBackend::Type::MDBE_SOBJ, &be_handler); - if (r < 0) { - ldpp_dout(dpp, 0) << "ERROR: failed to create be handler: r=" << r << dendl; - return r; - } - - RGWSI_MetaBackend_Handler_SObj *bh = static_cast(be_handler); - - auto module = new RGWSI_User_Module(svc); - be_module.reset(module); - bh->set_module(module); return 0; } @@ -112,6 +65,38 @@ rgw_raw_obj RGWSI_User_RADOS::get_buckets_obj(const rgw_user& user) const return rgw_raw_obj(svc.zone->get_zone_params().user_uid_pool, oid); } +class UserLister : public RGWMetadataLister { + public: + using RGWMetadataLister::RGWMetadataLister; + + void filter_transform(std::vector& oids, + std::list& keys) override + { + // filter out the user.buckets objects + constexpr auto filter = [] (const std::string& oid) { + return oid.ends_with(RGW_BUCKETS_OBJ_SUFFIX); + }; + // 'oids' is mutable so we can move its elements instead of copying + std::remove_copy_if(std::make_move_iterator(oids.begin()), + std::make_move_iterator(oids.end()), + std::back_inserter(keys), filter); + } +}; + +int RGWSI_User_RADOS::create_lister(const DoutPrefixProvider* dpp, + const std::string& marker, + std::unique_ptr& lister) +{ + const rgw_pool& pool = svc.zone->get_zone_params().user_uid_pool; + auto p = std::make_unique(svc.sysobj->get_pool(pool)); + int r = p->init(dpp, marker, ""); // empty prefix + if (r < 0) { + return r; + } + lister = std::move(p); + return 0; +} + int RGWSI_User_RADOS::read_user_info(const rgw_user& user, RGWUserInfo *info, RGWObjVersionTracker * const objv_tracker, @@ -230,7 +215,7 @@ public: if (ot.write_version.tag.empty()) { if (ot.read_version.tag.empty()) { - ot.generate_new_write_ver(svc.meta_be->ctx()); + ot.generate_new_write_ver(dpp->get_cct()); } else { ot.write_version = ot.read_version; ot.write_version.ver++; @@ -296,8 +281,12 @@ public: const rgw_pool& pool = svc.zone->get_zone_params().user_uid_pool; const std::string key = RGWSI_User::get_meta_key(info.user_id); - return rgw_put_system_obj(dpp, svc.sysobj, pool, key, data_bl, - exclusive, &ot, mtime, y, pattrs); + int r = rgw_put_system_obj(dpp, svc.sysobj, pool, key, data_bl, + exclusive, &ot, mtime, y, pattrs); + if (r < 0) { + return r; + } + return svc.mdlog->complete_entry(dpp, y, "user", key, &ot); } int complete(const DoutPrefixProvider *dpp) { @@ -625,13 +614,16 @@ int RGWSI_User_RADOS::remove_uid_index(const RGWUserInfo& user_info, RGWObjVersi const rgw_pool& pool = svc.zone->get_zone_params().user_uid_pool; const std::string key = get_meta_key(user_info.user_id); int ret = rgw_delete_system_obj(dpp, svc.sysobj, pool, key, objv_tracker, y); - if (ret < 0 && ret != -ENOENT && ret != -ECANCELED) { + if (ret == -ENOENT || ret == -ECANCELED) { + return 0; // success but no mdlog entry + } + if (ret < 0) { ldpp_dout(dpp, 0) << "ERROR: could not remove " << user_info.user_id << ": " << cpp_strerror(ret) << dendl; return ret; } - return 0; + return svc.mdlog->complete_entry(dpp, y, "user", key, objv_tracker); } static int read_index(const DoutPrefixProvider* dpp, optional_yield y, diff --git a/src/rgw/services/svc_user_rados.h b/src/rgw/services/svc_user_rados.h index 7e2929756b6..24c2368062f 100644 --- a/src/rgw/services/svc_user_rados.h +++ b/src/rgw/services/svc_user_rados.h @@ -18,17 +18,16 @@ #include "rgw_service.h" -#include "svc_meta_be.h" #include "svc_user.h" #include "driver/rados/rgw_bucket.h" // FIXME: subclass dependency +class RGWSI_MDLog; class RGWSI_Zone; class RGWSI_SysObj; class RGWSI_SysObj_Cache; class RGWSI_Meta; class RGWSI_SyncModules; -class RGWSI_MetaBackend_Handler; struct rgw_cache_entry_info; @@ -41,9 +40,6 @@ class RGWSI_User_RADOS : public RGWSI_User { friend class PutOperation; - std::unique_ptr be_module; - RGWSI_MetaBackend_Handler *be_handler; - struct user_info_cache_entry { RGWUserInfo info; RGWObjVersionTracker objv_tracker; @@ -79,25 +75,25 @@ public: struct Svc { RGWSI_User_RADOS *user{nullptr}; RGWSI_Zone *zone{nullptr}; + RGWSI_MDLog *mdlog{nullptr}; RGWSI_SysObj *sysobj{nullptr}; RGWSI_SysObj_Cache *cache{nullptr}; RGWSI_Meta *meta{nullptr}; - RGWSI_MetaBackend *meta_be{nullptr}; - RGWSI_SyncModules *sync_modules{nullptr}; } svc; RGWSI_User_RADOS(CephContext *cct); ~RGWSI_User_RADOS(); void init(librados::Rados* rados_, - RGWSI_Zone *_zone_svc, RGWSI_SysObj *_sysobj_svc, - RGWSI_SysObj_Cache *_cache_svc, RGWSI_Meta *_meta_svc, - RGWSI_MetaBackend *_meta_be_svc, - RGWSI_SyncModules *_sync_modules); - - RGWSI_MetaBackend_Handler *get_be_handler() override { - return be_handler; - } + RGWSI_Zone *_zone_svc, + RGWSI_MDLog *mdlog_svc, + RGWSI_SysObj *_sysobj_svc, + RGWSI_SysObj_Cache *_cache_svc, + RGWSI_Meta *_meta_svc); + + int create_lister(const DoutPrefixProvider* dpp, + const std::string& marker, + std::unique_ptr& lister) override; int read_user_info(const rgw_user& user, RGWUserInfo *info, -- 2.39.5