]> git-server-git.apps.pok.os.sepia.ceph.com Git - ceph.git/commitdiff
svc: role: improve delete functions & introduce delete_role
authorAbhishek Lekshmanan <abhishek@suse.com>
Wed, 21 Oct 2020 11:45:23 +0000 (13:45 +0200)
committerPritha Srivastava <prsrivas@redhat.com>
Mon, 6 Jun 2022 10:49:42 +0000 (16:19 +0530)
This deletes all the role related objects

Signed-off-by: Abhishek Lekshmanan <abhishek@suse.com>
src/rgw/rgw_role.cc
src/rgw/services/svc_role.h
src/rgw/services/svc_role_rados.cc
src/rgw/services/svc_role_rados.h

index 8efad78b893a9655712474880be7d5c4d46b5e44..db85adb78d74b50aa2fe52848c189802cac5a649 100644 (file)
@@ -516,7 +516,7 @@ int RGWRoleCtl::delete_info(const rgw::sal::RGWRole& info,
 {
   return be_handler->call([&](RGWSI_MetaBackend_Handler::Op *op) {
     return svc.role->delete_info(op->ctx(),
-                                info,
+                                info.get_id(),
                                 params.objv_tracker,
                                 y, dpp);
   });
index eb07ef4f455ce26f8b0d94150617bfbb17c854b4..32e2666dfb40956c174a1f8715700928a6e768c3 100644 (file)
@@ -94,6 +94,13 @@ class RGWSI_Role: public RGWServiceInstance
             const DoutPrefixProvider *dpp) = 0;
 
   virtual int delete_info(RGWSI_MetaBackend::Context *ctx,
+                          const std::string& id,
+                         RGWObjVersionTracker * const objv_tracker,
+                         optional_yield y,
+                         const DoutPrefixProvider *dpp) = 0;
+
+  // deletes a role from the system and the supporting objects
+  virtual int delete_role(RGWSI_MetaBackend::Context *ctx,
                          const rgw::sal::RGWRole& info,
                          RGWObjVersionTracker * const objv_tracker,
                          optional_yield y,
index b7e4929d7e1d6f78a851d7e308b920ce6921d919..0b0880073c6f3e2d1c8347a24da454848550d237 100644 (file)
@@ -149,7 +149,7 @@ public:
     }
 
     if (r < 0) {
-      svc_role->delete_info(ctx, info, objv_tracker, y, dpp);
+      svc_role->delete_info(ctx, info.get_id(), objv_tracker, y, dpp);
       svc_role->delete_name(ctx, info.get_name(), info.get_tenant(), objv_tracker, y, dpp);
     }
 
@@ -340,17 +340,38 @@ static int delete_oid(RGWSI_Role_RADOS::Svc svc,
   return 0;
 }
 
-int RGWSI_Role_RADOS::delete_info(RGWSI_MetaBackend::Context *ctx,
+int RGWSI_Role_RADOS::delete_role(RGWSI_MetaBackend::Context *ctx,
                                   const rgw::sal::RGWRole& info,
                                   RGWObjVersionTracker * const objv_tracker,
                                   optional_yield y,
                                   const DoutPrefixProvider *dpp)
+{
+  //deletes in the reverse order of creates, first delete the path, then the
+  //name and finally the info object
+  int r = delete_path(ctx, info.get_id(), info.get_path(), info.get_tenant(), objv_tracker, y, dpp);
+  if (r < 0) {
+    return r;
+  }
+
+  r = delete_name(ctx, info.get_name(), info.get_tenant(), objv_tracker, y, dpp);
+  if (r < 0) {
+    return r;
+  }
+
+  return delete_info(ctx, info.get_id(), objv_tracker, y, dpp);
+}
+
+int RGWSI_Role_RADOS::delete_info(RGWSI_MetaBackend::Context *ctx,
+                                  const std::string& role_id,
+                                  RGWObjVersionTracker * const objv_tracker,
+                                  optional_yield y,
+                                  const DoutPrefixProvider *dpp)
 {
   RGWSI_MBSObj_RemoveParams params;
-  int r = svc.meta_be->remove(ctx, info.get_id(), params, objv_tracker, y, dpp);
+  int r = svc.meta_be->remove(ctx, role_id, params, objv_tracker, y, dpp);
   if (r < 0 && r != -ENOENT && r != -ECANCELED) {
-    ldout(svc.meta_be->ctx(),0) << "ERROR: RGWSI_Role: could not remove oid = "
-                            << info.get_id() << " r = "<< r << dendl;
+    ldout(svc.meta_be->ctx(),0) << "ERROR: RGWSI_Role: could not remove role_id = "
+                                << role_id << " r = "<< r << dendl;
   }
 
   return r;
index 51fbeaad9b9285548629ea7126286fedb23391f2..0d608d7d26a525718025b844ddf62eb0b6e04640 100644 (file)
@@ -102,12 +102,18 @@ class RGWSI_Role_RADOS: public RGWSI_Role
                optional_yield y,
                const DoutPrefixProvider *dpp) override { return 0; } // TODO impl me
 
-  int delete_info(RGWSI_MetaBackend::Context *ctx,
+  int delete_role(RGWSI_MetaBackend::Context *ctx,
                  const rgw::sal::RGWRole& info,
                  RGWObjVersionTracker * const objv_tracker,
                  optional_yield y,
                  const DoutPrefixProvider *dpp) override;
 
+  int delete_info(RGWSI_MetaBackend::Context *ctx,
+                  const std::string& role_id,
+                  RGWObjVersionTracker * const objv_tracker,
+                  optional_yield y,
+                  const DoutPrefixProvider *dpp) override;
+
   int delete_name(RGWSI_MetaBackend::Context *ctx,
                  const std::string& name,
                  const std::string& tenant,