1717#include " rgw_string.h"
1818
1919#include " rgw_common.h"
20+ #include " rgw_metadata.h"
2021#include " rgw_tools.h"
2122#include " rgw_role.h"
2223
3031
3132using namespace std ;
3233
33- namespace rgw { namespace sal {
34-
35- const string RGWRole::role_name_oid_prefix = " role_names." ;
36- const string RGWRole::role_oid_prefix = " roles." ;
37- const string RGWRole::role_path_oid_prefix = " role_paths." ;
38- const string RGWRole::role_arn_prefix = " arn:aws:iam::" ;
39-
4034void RGWRoleInfo::dump (Formatter *f) const
4135{
4236 encode_json (" RoleId" , id , f);
@@ -134,6 +128,13 @@ void RGWRoleInfo::decode_json(JSONObj *obj)
134128 }
135129}
136130
131+ namespace rgw ::sal {
132+
133+ const string RGWRole::role_name_oid_prefix = " role_names." ;
134+ const string RGWRole::role_oid_prefix = " roles." ;
135+ const string RGWRole::role_path_oid_prefix = " role_paths." ;
136+ const string RGWRole::role_arn_prefix = " arn:aws:iam::" ;
137+
137138RGWRole::RGWRole (std::string name,
138139 std::string tenant,
139140 rgw_account_id account_id,
@@ -347,10 +348,64 @@ const string& RGWRole::get_path_oid_prefix()
347348 return role_path_oid_prefix;
348349}
349350
350- RGWRoleMetadataHandler::RGWRoleMetadataHandler (Driver* driver,
351- RGWSI_Role_RADOS *role_svc)
351+ } // namespace rgw::sal
352+
353+
354+ class RGWRoleMetadataObject : public RGWMetadataObject {
355+ RGWRoleInfo info;
356+ public:
357+ RGWRoleMetadataObject (const RGWRoleInfo& info, const obj_version& v, real_time m)
358+ : RGWMetadataObject(v, m), info(info) {}
359+
360+ void dump (Formatter *f) const override {
361+ info.dump (f);
362+ }
363+
364+ RGWRoleInfo& get_role_info () {
365+ return info;
366+ }
367+ };
368+
369+ class RGWRoleMetadataHandler : public RGWMetadataHandler_GenericMetaBE
370+ {
371+ public:
372+ RGWRoleMetadataHandler (rgw::sal::Driver* driver, RGWSI_Role_RADOS *role_svc);
373+
374+ std::string get_type () final { return " roles" ; }
375+
376+ RGWMetadataObject *get_meta_obj (JSONObj *jo,
377+ const obj_version& objv,
378+ const ceph::real_time& mtime);
379+
380+ int do_get (RGWSI_MetaBackend_Handler::Op *op,
381+ std::string& entry,
382+ RGWMetadataObject **obj,
383+ optional_yield y,
384+ const DoutPrefixProvider *dpp) final ;
385+
386+ int do_remove (RGWSI_MetaBackend_Handler::Op *op,
387+ std::string& entry,
388+ RGWObjVersionTracker& objv_tracker,
389+ optional_yield y,
390+ const DoutPrefixProvider *dpp) final ;
391+
392+ int do_put (RGWSI_MetaBackend_Handler::Op *op,
393+ std::string& entr,
394+ RGWMetadataObject *obj,
395+ RGWObjVersionTracker& objv_tracker,
396+ optional_yield y,
397+ const DoutPrefixProvider *dpp,
398+ RGWMDLogSyncType type,
399+ bool from_remote_zone) override ;
400+
401+ private:
402+ rgw::sal::Driver* driver;
403+ };
404+
405+ RGWRoleMetadataHandler::RGWRoleMetadataHandler (rgw::sal::Driver* driver,
406+ RGWSI_Role_RADOS *role_svc)
407+ : driver(driver)
352408{
353- this ->driver = driver;
354409 base_init (role_svc->ctx (), role_svc->get_be_handler ());
355410}
356411
@@ -366,7 +421,7 @@ RGWMetadataObject *RGWRoleMetadataHandler::get_meta_obj(JSONObj *jo,
366421 return nullptr ;
367422 }
368423
369- return new RGWRoleMetadataObject (info, objv, mtime, driver );
424+ return new RGWRoleMetadataObject (info, objv, mtime);
370425}
371426
372427int RGWRoleMetadataHandler::do_get (RGWSI_MetaBackend_Handler::Op *op,
@@ -381,13 +436,11 @@ int RGWRoleMetadataHandler::do_get(RGWSI_MetaBackend_Handler::Op *op,
381436 return ret;
382437 }
383438
439+ const RGWRoleInfo& info = role->get_info ();
384440 RGWObjVersionTracker objv_tracker = role->get_objv_tracker ();
385441 real_time mtime = role->get_mtime ();
386442
387- RGWRoleInfo info = role->get_info ();
388- RGWRoleMetadataObject *rdo = new RGWRoleMetadataObject (info, objv_tracker.read_version ,
389- mtime, driver);
390- *obj = rdo;
443+ *obj = new RGWRoleMetadataObject (info, objv_tracker.read_version , mtime);
391444
392445 return 0 ;
393446}
@@ -409,10 +462,12 @@ int RGWRoleMetadataHandler::do_remove(RGWSI_MetaBackend_Handler::Op *op,
409462
410463class RGWMetadataHandlerPut_Role : public RGWMetadataHandlerPut_SObj
411464{
465+ rgw::sal::Driver* driver;
412466 RGWRoleMetadataHandler *rhandler;
413467 RGWRoleMetadataObject *mdo;
414468public:
415- RGWMetadataHandlerPut_Role (RGWRoleMetadataHandler *handler,
469+ RGWMetadataHandlerPut_Role (rgw::sal::Driver* driver,
470+ RGWRoleMetadataHandler *handler,
416471 RGWSI_MetaBackend_Handler::Op *op,
417472 std::string& entry,
418473 RGWMetadataObject *obj,
@@ -421,14 +476,13 @@ class RGWMetadataHandlerPut_Role : public RGWMetadataHandlerPut_SObj
421476 RGWMDLogSyncType type,
422477 bool from_remote_zone) :
423478 RGWMetadataHandlerPut_SObj (handler, op, entry, obj, objv_tracker, y, type, from_remote_zone),
424- rhandler (handler) {
479+ driver (driver), rhandler(handler) {
425480 mdo = static_cast <RGWRoleMetadataObject*>(obj);
426481 }
427482
428483 int put_checked (const DoutPrefixProvider *dpp) override {
429484 auto & info = mdo->get_role_info ();
430485 auto mtime = mdo->get_mtime ();
431- auto * driver = mdo->get_driver ();
432486 info.mtime = mtime;
433487 std::unique_ptr<rgw::sal::RGWRole> role = driver->get_role (info);
434488 constexpr bool exclusive = false ;
@@ -450,8 +504,13 @@ int RGWRoleMetadataHandler::do_put(RGWSI_MetaBackend_Handler::Op *op,
450504 RGWMDLogSyncType type,
451505 bool from_remote_zone)
452506{
453- RGWMetadataHandlerPut_Role put_op (this , op , entry, obj, objv_tracker, y, type, from_remote_zone);
507+ RGWMetadataHandlerPut_Role put_op (driver, this , op , entry, obj, objv_tracker, y, type, from_remote_zone);
454508 return do_put_operate (&put_op, dpp);
455509}
456510
457- } } // namespace rgw::sal
511+ auto create_role_metadata_handler (rgw::sal::Driver* driver,
512+ RGWSI_Role_RADOS *role_svc)
513+ -> std::unique_ptr<RGWMetadataHandler>
514+ {
515+ return std::make_unique<RGWRoleMetadataHandler>(driver, role_svc);
516+ }
0 commit comments