]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
svc: role: implement read/write role path & name
authorAbhishek Lekshmanan <abhishek@suse.com>
Tue, 1 Sep 2020 15:10:50 +0000 (17:10 +0200)
committerPritha Srivastava <prsrivas@redhat.com>
Mon, 6 Jun 2022 10:49:42 +0000 (16:19 +0530)
Signed-off-by: Abhishek Lekshmanan <abhishek@suse.com>
src/rgw/services/svc_role.h
src/rgw/services/svc_role_rados.cc
src/rgw/services/svc_role_rados.h

index 74470b7f6fdeec48cf6095815b3fffc39b10077a..91dc89011e74b962f737adebeef9c1429aa86292 100644 (file)
@@ -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,
index 2fd92902fdac4e254e2ef153217026f321476622..bc0802d523979bc13dfa495300f8fee6364963e0 100644 (file)
@@ -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,
index eda800842f2c1dc97c7c0937d34593d447872952..14b0a479555e8e806c578d6d58d95e89c40e3523 100644 (file)
@@ -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,