From: Abhishek Lekshmanan Date: Tue, 6 Oct 2020 16:15:04 +0000 (+0200) Subject: rgw: role: define md handler for roles X-Git-Tag: v18.0.0~710^2~35 X-Git-Url: http://git.apps.os.sepia.ceph.com/?a=commitdiff_plain;h=d1fd01c46f2980af10ddb2941900e9013ad35279;p=ceph.git rgw: role: define md handler for roles Signed-off-by: Abhishek Lekshmanan --- diff --git a/src/rgw/rgw_role.cc b/src/rgw/rgw_role.cc index b4de07d771738..18760ea37bc2f 100644 --- a/src/rgw/rgw_role.cc +++ b/src/rgw/rgw_role.cc @@ -587,3 +587,91 @@ void RGWRoleCompleteInfo::decode_json(JSONObj *obj) decode_json_obj(info, obj); has_attrs = JSONDecoder::decode_json("attrs", attrs, obj); } + +int RGWRoleMetadataHandler::do_get(RGWSI_MetaBackend_Handler::Op *op, + std::string& entry, + RGWMetadataObject **obj, + optional_yield y, + const DoutPrefixProvider *dpp) +{ + RGWRoleCompleteInfo rci; + RGWObjVersionTracker objv_tracker; + real_time mtime; + + int ret = svc.role->read_info(op->ctx(), + entry, + &rci.info, + &objv_tracker, + &mtime, + &rci.attrs, + y, + dpp); + + if (ret < 0) { + return ret; + } + + RGWRoleMetadataObject *rdo = new RGWRoleMetadataObject(rci, objv_tracker.read_version, + mtime); + *obj = rdo; + + return 0; +} + +int RGWRoleMetadataHandler::do_remove(RGWSI_MetaBackend_Handler::Op *op, + std::string& entry, + RGWObjVersionTracker& objv_tracker, + optional_yield y, + const DoutPrefixProvider *dpp) +{ + return svc.role->delete_info(op->ctx(), entry, &objv_tracker, y, dpp); +} + +class RGWMetadataHandlerPut_Role : public RGWMetadataHandlerPut_SObj +{ + RGWRoleMetadataHandler *rhandler; + RGWRoleMetadataObject *mdo; +public: + RGWMetadataHandlerPut_Role(RGWRoleMetadataHandler *handler, + RGWSI_MetaBackend_Handler::Op *op, + std::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), + rhandler(handler) { + mdo = static_cast(obj); + } + + int put_checked(const DoutPrefixProvider *dpp) override { + auto& rci = mdo->get_rci(); + auto mtime = mdo->get_mtime(); + map *pattrs = rci.has_attrs ? &rci.attrs : nullptr; + + int ret = rhandler->svc.role->store_info(op->ctx(), + rci.info, + &objv_tracker, + mtime, + false, + pattrs, + y, + dpp); + + return ret < 0 ? ret : STATUS_APPLIED; + } +}; + +int RGWRoleMetadataHandler::do_put(RGWSI_MetaBackend_Handler::Op *op, + std::string& entry, + RGWMetadataObject *obj, + RGWObjVersionTracker& objv_tracker, + optional_yield y, + const DoutPrefixProvider *dpp, + RGWMDLogSyncType type, + bool from_remote_zone) +{ + RGWMetadataHandlerPut_Role put_op(this, op , entry, obj, objv_tracker, y, type, from_remote_zone); + return do_put_operate(&put_op, dpp); +} diff --git a/src/rgw/rgw_role.h b/src/rgw/rgw_role.h index 134c6600e5cf7..80c0b2a912c7e 100644 --- a/src/rgw/rgw_role.h +++ b/src/rgw/rgw_role.h @@ -80,6 +80,8 @@ public: RGWRole(std::string id) : id(std::move(id)) {} + RGWRole() = default; + virtual ~RGWRole() = default; void encode(bufferlist& bl) const { @@ -176,30 +178,34 @@ public: class RGWRoleMetadataHandler: public RGWMetadataHandler_GenericMetaBE { + +public: struct Svc { RGWSI_Role *role{nullptr}; } svc; -public: - RGWRoleMetadataHandler(RGWSI_Role *role_svc); int do_get(RGWSI_MetaBackend_Handler::Op *op, std::string& entry, RGWMetadataObject **obj, optional_yield y, - const DoutPrefixProvider *dpp) final - { - return 0; // TODO - } + const DoutPrefixProvider *dpp) final; int do_remove(RGWSI_MetaBackend_Handler::Op *op, std::string& entry, RGWObjVersionTracker& objv_tracker, optional_yield y, - const DoutPrefixProvider *dpp) final { - return 0; // TODO - } + const DoutPrefixProvider *dpp) final; + + int do_put(RGWSI_MetaBackend_Handler::Op *op, + std::string& entr, + RGWMetadataObject *obj, + RGWObjVersionTracker& objv_tracker, + optional_yield y, + const DoutPrefixProvider *dpp, + RGWMDLogSyncType type, + bool from_remote_zone) override; }; class RGWRoleCtl {