From d6506058f49387c9b8ffafe8f0f1c10543fb4f55 Mon Sep 17 00:00:00 2001 From: Yehuda Sadeh Date: Wed, 20 Mar 2019 07:28:48 -0700 Subject: [PATCH] rgw: meta_be_sobj interface changes and adapt otp, bucket meta handlers Signed-off-by: Yehuda Sadeh --- src/rgw/rgw_bucket.cc | 29 +++++++++------ src/rgw/rgw_metadata.cc | 4 +- src/rgw/rgw_otp.cc | 34 ++++++++--------- src/rgw/services/svc_bucket.cc | 2 +- src/rgw/services/svc_meta_be.cc | 42 ++++++++------------- src/rgw/services/svc_meta_be.h | 55 ++++++++++++++++------------ src/rgw/services/svc_meta_be_sobj.cc | 39 ++++++++++++-------- src/rgw/services/svc_meta_be_sobj.h | 40 ++++++++++++++------ 8 files changed, 137 insertions(+), 108 deletions(-) diff --git a/src/rgw/rgw_bucket.cc b/src/rgw/rgw_bucket.cc index d8a251dcdc8..1be60342165 100644 --- a/src/rgw/rgw_bucket.cc +++ b/src/rgw/rgw_bucket.cc @@ -2563,10 +2563,13 @@ public: RGWObjVersionTracker *objv_tracker, ceph::real_time *pmtime, map *pattrs) { + RGWSI_MBSObj_GetParams params = { + .pmtime = pmtime, + .pattrs = pattrs, + }; bufferlist bl; - int ret = meta_be->get_entry(ctx, &bl, - objv_tracker, pmtime, pattrs, - nullptr, nullopt); + int ret = meta_be->get_entry(ctx, params, + objv_tracker); if (ret < 0) { return ret; } @@ -2586,10 +2589,13 @@ public: RGWObjVersionTracker *objv_tracker, const ceph::real_time& mtime, map *pattrs) { - bufferlist bl; - ceph::encode(be, bl); - int ret = meta_be->put(ctx, bl, - false, objv_tracker, mtime, pattrs, + RGWSI_MBSObj_PutParams params = { + .mtime = mtime, + .pattrs = pattrs, + }; + ceph::encode(be, params.bl); + int ret = meta_be->put(ctx, params, + objv_tracker, APPLY_ALWAYS); if (ret < 0) { return ret; @@ -2602,10 +2608,11 @@ public: string& entry, RGWObjVersionTracker *objv_tracker, const ceph::real_time& mtime) { - bufferlist bl; - ceph::encode(be, bl); - int ret = meta_be->remove(ctx, bl, - objv_tracker, mtime, + RGWSI_MBSObj_RemoveParams params = { + .mtime = mtime, + }; + int ret = meta_be->remove(ctx, params, + objv_tracker, APPLY_ALWAYS); if (ret < 0) { return ret; diff --git a/src/rgw/rgw_metadata.cc b/src/rgw/rgw_metadata.cc index 0175b9b4152..3ed1d9942fa 100644 --- a/src/rgw/rgw_metadata.cc +++ b/src/rgw/rgw_metadata.cc @@ -304,8 +304,8 @@ public: string get_type() override { return string(); } - RGWSI_MetaBackend::Type required_be_type() { - return MDBE_SOBJ; /* handled doesn't really using the backend */ + RGWSI_MetaBackend::Type required_be_type() override { + return RGWSI_MetaBackend::Type::MDBE_SOBJ; /* handled doesn't really using the backend */ } int init_module() override { diff --git a/src/rgw/rgw_otp.cc b/src/rgw/rgw_otp.cc index 4a0a2586ebf..ef1b66f92a4 100644 --- a/src/rgw/rgw_otp.cc +++ b/src/rgw/rgw_otp.cc @@ -21,6 +21,7 @@ #include "services/svc_zone.h" #include "services/svc_cls.h" #include "services/svc_meta_be.h" +#include "services/svc_meta_be_sobj.h" #define dout_subsys ceph_subsys_rgw @@ -56,36 +57,34 @@ public: class RGW_MB_Handler_Module_OTP : public RGWSI_MBSObj_Handler_Module { RGWSI_Zone *zone_svc; public: - RGW_MB_Handler_Module_OTP(RGWSI_Zone *_zone_svc) : zone_svc {} + RGW_MB_Handler_Module_OTP(RGWSI_Zone *_zone_svc) : zone_svc(_zone_svc) {} - void get_pool_and_oid(RGWRados *store, const string& key, rgw_pool& pool, string& oid) override { + void get_pool_and_oid(const string& key, rgw_pool& pool, string& oid) override { oid = key; - pool = store->svc.zone->get_zone_params().otp_pool; + pool = zone_svc->get_zone_params().otp_pool; } }; class RGWOTPMetadataHandler : public RGWMetadataHandler { int init_module() override { - be_module.reset(new RGW_MB_Handler_Module_OTP(store->svc.zone)); + be_module.reset(new RGW_MB_Handler_Module_OTP(zone_svc)); return 0; } RGWSI_MetaBackend::Type required_be_type() override { - return MDBE_OTP; + return RGWSI_MetaBackend::Type::MDBE_OTP; } int do_get(RGWSI_MetaBackend::Context *ctx, string& entry, RGWMetadataObject **obj) override { RGWObjVersionTracker objv_tracker; - real_time mtime; RGWOTPMetadataObject *mdo = new RGWOTPMetadataObject; - ctx->obj = mdo; + + RGWSI_MBOTP_GetParams params; + params.pdevices = &(mdo->get_devs()); - int ret = meta_be->get_entry(ctx, nullptr, - objv_tracker, &mdo->mtime, - nullptr, - nullptr, nullopt); + int ret = meta_be->get_entry(ctx, params, &objv_tracker); if (ret < 0) { return ret; } @@ -102,13 +101,11 @@ class RGWOTPMetadataHandler : public RGWMetadataHandler { RGWMDLogSyncType type) override { RGWOTPMetadataObject *obj = static_cast(_obj); - ctx->obj = obj; + RGWSI_MBOTP_PutParams params; + params.mtime = obj->mtime; + params.devices = obj->devices; - bufferlist bl; - int ret = meta_be->put(ctx, bl, - false, objv_tracker, - obj->mtime, pattrs, - APPLY_ALWAYS); + int ret = meta_be->put_entry(ctx, params, &objv_tracker); if (ret < 0) { return ret; } @@ -117,7 +114,8 @@ class RGWOTPMetadataHandler : public RGWMetadataHandler { } int do_remove(RGWSI_MetaBackend::Context *ctx, string& entry, RGWObjVersionTracker& objv_tracker) override { - return svc.meta_be->remove_entry(this, entry, &objv_tracker); + RGWSI_MBOTP_RemoveParams params; + return svc.meta_be->remove_entry(ctx, params, &objv_tracker); } public: diff --git a/src/rgw/services/svc_bucket.cc b/src/rgw/services/svc_bucket.cc index 0477efe2586..04dc0a3d865 100644 --- a/src/rgw/services/svc_bucket.cc +++ b/src/rgw/services/svc_bucket.cc @@ -39,7 +39,7 @@ void RGWSI_Bucket::init(RGWSI_Zone *_zone_svc, RGWSI_SysObj *_sysobj_svc, svc.sysobj = _sysobj_svc; svc.cache = _cache_svc; svc.meta = _meta_svc; - svc.sync_modules = _meta_svc; + svc.sync_modules = _sync_modules_svc; } int RGWSI_Bucket::do_start() diff --git a/src/rgw/services/svc_meta_be.cc b/src/rgw/services/svc_meta_be.cc index 7e7672c0c83..be4990f3b67 100644 --- a/src/rgw/services/svc_meta_be.cc +++ b/src/rgw/services/svc_meta_be.cc @@ -9,7 +9,10 @@ RGWSI_MetaBackend::Context::~Context() {} // needed, even though destructor is pure virtual -RGWSI_MetaBackend::Module::~Module() {} // needed, even though destructor is pure virtual +RGWSI_MetaBackend::Module::~Module() {} // ditto +RGWSI_MetaBackend::PutParams::~PutParams() {} // ... +RGWSI_MetaBackend::GetParams::~GetParams() {} // ... +RGWSI_MetaBackend::RemoveParams::~RemoveParams() {} // ... int RGWSI_MetaBackend::pre_modify(RGWSI_MetaBackend::Context *ctx, RGWMetadataLogData& log_data, @@ -67,10 +70,10 @@ int RGWSI_MetaBackend::prepare_mutate(RGWSI_MetaBackend::Context *ctx, RGWObjVersionTracker *objv_tracker, RGWMDLogSyncType sync_mode) { - bufferlist bl; real_time orig_mtime; - int ret = get_entry(ctx, &bl, objv_tracker, &orig_mtime, - nullptr, nullptr, boost::none); + unique_ptr params(alloc_default_get_params(&orig_mtime)); + + int ret = get_entry(ctx, *params, objv_tracker); if (ret < 0 && ret != -ENOENT) { return ret; } @@ -127,50 +130,37 @@ int RGWSI_MetaBackend::mutate(RGWSI_MetaBackend::Context *ctx, } int RGWSI_MetaBackend::get(Context *ctx, - bufferlist *pbl, - RGWObjVersionTracker *objv_tracker, - real_time *pmtime, - map *pattrs, - rgw_cache_entry_info *cache_info, - boost::optional refresh_version) + GetParams& params, + RGWObjVersionTracker *objv_tracker) { - return get_entry(ctx, pbl, - objv_tracker, pmtime, - pattrs, - cache_info, - refresh_version); + return get_entry(ctx, params, objv_tracker); } int RGWSI_MetaBackend::put(Context *ctx, - bufferlist& bl, - bool exclusive, + PutParams& params, RGWObjVersionTracker *objv_tracker, - const ceph::real_time& mtime, - map *pattrs, RGWMDLogSyncType sync_mode) { std::function f = [&]() { - return put_entry(ctx, bl, - exclusive, objv_tracker, - mtime, pattrs); + return put_entry(ctx, params, objv_tracker); }; - return mutate(ctx, mtime, objv_tracker, + return mutate(ctx, params.mtime, objv_tracker, MDLOG_STATUS_WRITE, sync_mode, f, false); } int RGWSI_MetaBackend::remove(Context *ctx, + RemoveParams& params, RGWObjVersionTracker *objv_tracker, - const ceph::real_time& mtime, RGWMDLogSyncType sync_mode) { std::function f = [&]() { - return remove_entry(ctx, objv_tracker); + return remove_entry(ctx, params, objv_tracker); }; - return mutate(ctx, mtime, objv_tracker, + return mutate(ctx, params.mtime, objv_tracker, MDLOG_STATUS_REMOVE, sync_mode, f, false); diff --git a/src/rgw/services/svc_meta_be.h b/src/rgw/services/svc_meta_be.h index 8cddeb0f77c..c624bffdceb 100644 --- a/src/rgw/services/svc_meta_be.h +++ b/src/rgw/services/svc_meta_be.h @@ -22,6 +22,7 @@ class RGWMetadataHandler; class RGWMetadataLogData; +class RGWMetadataObject; class RGWSI_MDLog; class RGWSI_Meta; @@ -94,6 +95,24 @@ public: std::string key; }; + struct PutParams { + virtual ~PutParams() = 0; + + ceph::real_time mtime; + }; + + struct GetParams { + virtual ~GetParams(); + + ceph::real_time *pmtime{nullptr}; + }; + + struct RemoveParams { + virtual ~RemoveParams() = 0; + + ceph::real_time mtime; + }; + enum Type { MDBE_SOBJ = 0, MDBE_OTP = 1, @@ -106,42 +125,32 @@ public: virtual void init_ctx(RGWSI_MetaBackend_Handle handle, const string& key, RGWMetadataObject *obj, Context *ctx) = 0; + virtual GetParams *alloc_default_get_params(ceph::real_time *pmtime) = 0; + /* these should be implemented by backends */ - virtual int get_entry(Context *ctx, - bufferlist *pbl, - RGWObjVersionTracker *objv_tracker, - real_time *pmtime, - map *pattrs = nullptr, - rgw_cache_entry_info *cache_info = nullptr, - boost::optional refresh_version = boost::none) = 0; - virtual int put_entry(Context *ctx, - bufferlist& bl, - bool exclusive, - RGWObjVersionTracker *objv_tracker, - real_time mtime, map *pattrs = nullptr) = 0; + virtual int get_entry(RGWSI_MetaBackend::Context *ctx, + RGWSI_MetaBackend::GetParams& params, + RGWObjVersionTracker *objv_tracker) = 0; + virtual int put_entry(RGWSI_MetaBackend::Context *ctx, + RGWSI_MetaBackend::PutParams& params, + RGWObjVersionTracker *objv_tracker) = 0; virtual int remove_entry(Context *ctx, + RGWSI_MetaBackend::RemoveParams& params, RGWObjVersionTracker *objv_tracker) = 0; /* these should be called by handlers */ virtual int get(Context *ctx, - bufferlist *pbl, - RGWObjVersionTracker *objv_tracker, - real_time *pmtime, - map *pattrs = nullptr, - rgw_cache_entry_info *cache_info = nullptr, - boost::optional refresh_version = boost::none); + GetParams ¶ms, + RGWObjVersionTracker *objv_tracker); virtual int put(Context *ctx, - bufferlist& bl, - bool exclusive, + PutParams& params, RGWObjVersionTracker *objv_tracker, - const ceph::real_time& mtime, - map *pattrs, RGWMDLogSyncType sync_mode); virtual int remove(Context *ctx, + RemoveParams& params, RGWObjVersionTracker *objv_tracker, - const ceph::real_time& mtime, RGWMDLogSyncType sync_mode); }; diff --git a/src/rgw/services/svc_meta_be_sobj.cc b/src/rgw/services/svc_meta_be_sobj.cc index 466cd765ef1..5a1bb0ed137 100644 --- a/src/rgw/services/svc_meta_be_sobj.cc +++ b/src/rgw/services/svc_meta_be_sobj.cc @@ -42,35 +42,42 @@ void RGWSI_MetaBackend_SObj::init_ctx(RGWSI_MetaBackend_Handle handle, const str static_cast(ctx->module)->get_pool_and_oid(key, ctx->pool, ctx->oid); } +RGWSI_MetaBackend::GetParams *RGWSI_MetaBackend_SObj::alloc_default_get_params(ceph::real_time *pmtime) +{ + auto params = new RGWSI_MBSObj_GetParams; + params->pmtime = pmtime; + params->_bl = bufferlist(); + params->pbl = &(*params->_bl); + return params; +} + int RGWSI_MetaBackend_SObj::get_entry(RGWSI_MetaBackend::Context *_ctx, - bufferlist *pbl, - RGWObjVersionTracker *objv_tracker, - real_time *pmtime, - map *pattrs, - rgw_cache_entry_info *cache_info, - boost::optional refresh_version) + GetParams& _params, + RGWObjVersionTracker *objv_tracker) { RGWSI_MetaBackend_SObj::Context_SObj *ctx = static_cast(_ctx); + RGWSI_MBSObj_GetParams& params = static_cast(_params); - return rgw_get_system_obj(*ctx->obj_ctx, ctx->pool, ctx->oid, *pbl, - objv_tracker, pmtime, - null_yield, - pattrs, cache_info, - refresh_version); + return rgw_get_system_obj(*ctx->obj_ctx, ctx->pool, ctx->oid, *params.pbl, + objv_tracker, params.pmtime, + params.y, + params.pattrs, params.cache_info, + params.refresh_version); } int RGWSI_MetaBackend_SObj::put_entry(RGWSI_MetaBackend::Context *_ctx, - bufferlist& bl, bool exclusive, - RGWObjVersionTracker *objv_tracker, - real_time mtime, map *pattrs) + PutParams& _params, + RGWObjVersionTracker *objv_tracker) { RGWSI_MetaBackend_SObj::Context_SObj *ctx = static_cast(_ctx); + RGWSI_MBSObj_PutParams& params = static_cast(_params); - return rgw_put_system_obj(*ctx->obj_ctx, ctx->pool, ctx->oid, bl, exclusive, - objv_tracker, mtime, pattrs); + return rgw_put_system_obj(*ctx->obj_ctx, ctx->pool, ctx->oid, params.bl, params.exclusive, + objv_tracker, params.mtime, params.pattrs); } int RGWSI_MetaBackend_SObj::remove_entry(RGWSI_MetaBackend::Context *_ctx, + RemoveParams& params, RGWObjVersionTracker *objv_tracker) { RGWSI_MetaBackend_SObj::Context_SObj *ctx = static_cast(_ctx); diff --git a/src/rgw/services/svc_meta_be_sobj.h b/src/rgw/services/svc_meta_be_sobj.h index 6fdb9cd12c3..49c53c7a0dc 100644 --- a/src/rgw/services/svc_meta_be_sobj.h +++ b/src/rgw/services/svc_meta_be_sobj.h @@ -40,6 +40,24 @@ public: virtual void oid_to_key(string& oid) {} }; +struct RGWSI_MBSObj_GetParams : public RGWSI_MetaBackend::GetParams { + std::optional _bl; + bufferlist *pbl{nullptr}; + map *pattrs{nullptr}; + rgw_cache_entry_info *cache_info{nullptr}; + boost::optional refresh_version; + optional_yield y{null_yield}; +}; + +struct RGWSI_MBSObj_PutParams : public RGWSI_MetaBackend::PutParams { + bufferlist bl; + map *pattrs{nullptr}; + bool exclusive{false}; +}; + +struct RGWSI_MBSObj_RemoveParams : public RGWSI_MetaBackend::RemoveParams { + // nothing in here +}; class RGWSI_MetaBackend_SObj : public RGWSI_MetaBackend { @@ -73,17 +91,17 @@ public: void init_ctx(RGWSI_MetaBackend_Handle handle, const string& key, RGWMetadataObject *obj, RGWSI_MetaBackend::Context *ctx) override; - virtual int get_entry(RGWSI_MetaBackend::Context *ctx, - bufferlist *pbl, - RGWObjVersionTracker *objv_tracker, - real_time *pmtime, - map *pattrs = nullptr, - rgw_cache_entry_info *cache_info = nullptr, - boost::optional refresh_version = boost::none) override; - virtual int put_entry(RGWSI_MetaBackend::Context *ctx, bufferlist& bl, bool exclusive, - RGWObjVersionTracker *objv_tracker, real_time mtime, map *pattrs = nullptr) override; - virtual int remove_entry(RGWSI_MetaBackend::Context *ctx, - RGWObjVersionTracker *objv_tracker) override; + RGWSI_MetaBackend::GetParams *alloc_default_get_params(ceph::real_time *pmtime) override; + + int get_entry(RGWSI_MetaBackend::Context *ctx, + RGWSI_MetaBackend::GetParams& params, + RGWObjVersionTracker *objv_tracker) override; + int put_entry(RGWSI_MetaBackend::Context *ctx, + RGWSI_MetaBackend::PutParams& params, + RGWObjVersionTracker *objv_tracker) override; + int remove_entry(RGWSI_MetaBackend::Context *ctx, + RGWSI_MetaBackend::RemoveParams& params, + RGWObjVersionTracker *objv_tracker) override; }; -- 2.39.5