From 00dbe323d153cd80125ef0f149599b04435f9b05 Mon Sep 17 00:00:00 2001 From: Abhishek Lekshmanan Date: Tue, 1 Sep 2020 17:10:50 +0200 Subject: [PATCH] svc: role: implement read/write role path & name Signed-off-by: Abhishek Lekshmanan --- src/rgw/services/svc_role.h | 12 +++-- src/rgw/services/svc_role_rados.cc | 72 ++++++++++++++++++++++++++++++ src/rgw/services/svc_role_rados.h | 14 ++++-- 3 files changed, 91 insertions(+), 7 deletions(-) diff --git a/src/rgw/services/svc_role.h b/src/rgw/services/svc_role.h index 74470b7f6fd..91dc89011e7 100644 --- a/src/rgw/services/svc_role.h +++ b/src/rgw/services/svc_role.h @@ -42,17 +42,21 @@ class RGWSI_Role: public RGWServiceInstance const DoutPrefixProvider *dpp) = 0; virtual int store_name(RGWSI_MetaBackend::Context *ctx, + const std::string& role_id, const std::string& name, + const std::string& tenant, RGWObjVersionTracker * const objv_tracker, - real_time * const pmtime, + const real_time& mtime, bool exclusive, optional_yield y, const DoutPrefixProvider *dpp) = 0; virtual int store_path(RGWSI_MetaBackend::Context *ctx, + const std::string& role_id, const std::string& path, + const std::string& tenant, RGWObjVersionTracker * const objv_tracker, - real_time * const pmtime, + const real_time &mtime, bool exclusive, optional_yield y, const DoutPrefixProvider *dpp) = 0; @@ -67,7 +71,9 @@ class RGWSI_Role: public RGWServiceInstance const DoutPrefixProvider *dpp) = 0; virtual int read_name(RGWSI_MetaBackend::Context *ctx, - std::string& name, + const std::string& name, + const std::string& tenant, + std::string& role_id, RGWObjVersionTracker * const objv_tracker, real_time * const pmtime, optional_yield y, diff --git a/src/rgw/services/svc_role_rados.cc b/src/rgw/services/svc_role_rados.cc index 2fd92902fda..bc0802d5239 100644 --- a/src/rgw/services/svc_role_rados.cc +++ b/src/rgw/services/svc_role_rados.cc @@ -1,6 +1,7 @@ #include "svc_role_rados.h" #include "svc_meta_be_sobj.h" #include "rgw_role.h" +#include "rgw_zone.h" #define dout_subsys ceph_subsys_rgw @@ -36,6 +37,46 @@ int RGWSI_Role_RADOS::store_info(RGWSI_MetaBackend::Context *ctx, return svc.meta_be->put(ctx, get_role_meta_key(role.get_id()), params, objv_tracker, y, dpp); } +int RGWSI_Role_RADOS::store_name(RGWSI_MetaBackend::Context *ctx, + const std::string& role_id, + const std::string& name, + const std::string& tenant, + RGWObjVersionTracker * const objv_tracker, + const real_time& mtime, + bool exclusive, + optional_yield y, + const DoutPrefixProvider *dpp) +{ + RGWNameToId nameToId; + nameToId.obj_id = role_id; + + bufferlist data_bl; + encode(nameToId, data_bl); + RGWSI_MBSObj_PutParams params(data_bl, nullptr, mtime, exclusive); + + return svc.meta_be->put(ctx, get_role_name_meta_key(name, tenant), + params, objv_tracker, y, dpp); +} + + +int RGWSI_Role_RADOS::store_path(RGWSI_MetaBackend::Context *ctx, + const std::string& role_id, + const std::string& path, + const std::string& tenant, + RGWObjVersionTracker * const objv_tracker, + const real_time& mtime, + bool exclusive, + optional_yield y, + const DoutPrefixProvider *dpp) +{ + bufferlist data_bl; + RGWSI_MBSObj_PutParams params(data_bl, nullptr, mtime, exclusive); + return svc.meta_be->put(ctx, get_role_path_meta_key(path, role_id, tenant), + params, objv_tracker, y, dpp); + +} + + int RGWSI_Role_RADOS::read_info(RGWSI_MetaBackend::Context *ctx, const std::string& role_id, rgw::sal::RGWRole *role, @@ -63,6 +104,37 @@ int RGWSI_Role_RADOS::read_info(RGWSI_MetaBackend::Context *ctx, return 0; } +int RGWSI_Role_RADOS::read_name(RGWSI_MetaBackend::Context *ctx, + const std::string& name, + const std::string& tenant, + std::string& role_id, + RGWObjVersionTracker * const objv_tracker, + real_time * const pmtime, + optional_yield y, + const DoutPrefixProvider *dpp) +{ + bufferlist data_bl; + RGWSI_MBSObj_GetParams params(&data_bl, nullptr, pmtime); + + int r = svc.meta_be->get_entry(ctx, get_role_name_meta_key(name, tenant), + params, objv_tracker, y, dpp); + if (r < 0) + return r; + + auto bl_iter = data_bl.cbegin(); + RGWNameToId nameToId; + try { + decode(nameToId, bl_iter); + } catch (buffer::error& err) { + ldout(svc.meta_be->ctx(),0) << "ERROR: failed to decode RGWRole name, caught buffer::err " << dendl; + return -EIO; + } + + role_id = nameToId.obj_id; + return 0; +} + + int RGWSI_Role_RADOS::delete_info(RGWSI_MetaBackend::Context *ctx, const std::string& role_id, RGWObjVersionTracker * const objv_tracker, diff --git a/src/rgw/services/svc_role_rados.h b/src/rgw/services/svc_role_rados.h index eda800842f2..14b0a479555 100644 --- a/src/rgw/services/svc_role_rados.h +++ b/src/rgw/services/svc_role_rados.h @@ -48,17 +48,21 @@ class RGWSI_Role_RADOS: public RGWSI_Role const DoutPrefixProvider *dpp) override; int store_name(RGWSI_MetaBackend::Context *ctx, + const std::string& role_id, const std::string& name, + const std::string& tenant, RGWObjVersionTracker * const objv_tracker, - real_time * const pmtime, + const real_time& mtime, bool exclusive, optional_yield y, const DoutPrefixProvider *dpp) override; int store_path(RGWSI_MetaBackend::Context *ctx, - const std::string& path, + const std::string& role_id, + const std::string& path, + const std::string& tenant, RGWObjVersionTracker * const objv_tracker, - real_time * const pmtime, + const real_time& mtime, bool exclusive, optional_yield y, const DoutPrefixProvider *dpp) override; @@ -73,7 +77,9 @@ class RGWSI_Role_RADOS: public RGWSI_Role const DoutPrefixProvider *dpp) override; int read_name(RGWSI_MetaBackend::Context *ctx, - std::string& name, + const std::string& name, + const std::string& tenant, + std::string& role_id, RGWObjVersionTracker * const objv_tracker, real_time * const pmtime, optional_yield y, -- 2.39.5