]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
rgw: role: define md handler for roles
authorAbhishek Lekshmanan <abhishek@suse.com>
Tue, 6 Oct 2020 16:15:04 +0000 (18:15 +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/rgw_role.cc
src/rgw/rgw_role.h

index b4de07d771738afa30bc6a6ad497fdefcc3396c2..18760ea37bc2fd5e5476972b74e4c2f0deee8933 100644 (file)
@@ -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<RGWRoleMetadataObject*>(obj);
+  }
+
+  int put_checked(const DoutPrefixProvider *dpp) override {
+    auto& rci = mdo->get_rci();
+    auto mtime = mdo->get_mtime();
+    map<std::string, bufferlist> *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);
+}
index 134c6600e5cf7aa416a2e2296bae38a555410680..80c0b2a912c7efa28bf6875d04d49e9602db6e3f 100644 (file)
@@ -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 {