From: Abhishek Lekshmanan Date: Wed, 21 Oct 2020 11:45:23 +0000 (+0200) Subject: svc: role: improve delete functions & introduce delete_role X-Git-Tag: v18.0.0~710^2~24 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=0a74355a674f90eec154820fc6cc298e0f0cd291;p=ceph.git svc: role: improve delete functions & introduce delete_role This deletes all the role related objects Signed-off-by: Abhishek Lekshmanan --- diff --git a/src/rgw/rgw_role.cc b/src/rgw/rgw_role.cc index 8efad78b893a..db85adb78d74 100644 --- a/src/rgw/rgw_role.cc +++ b/src/rgw/rgw_role.cc @@ -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); }); diff --git a/src/rgw/services/svc_role.h b/src/rgw/services/svc_role.h index eb07ef4f455c..32e2666dfb40 100644 --- a/src/rgw/services/svc_role.h +++ b/src/rgw/services/svc_role.h @@ -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, diff --git a/src/rgw/services/svc_role_rados.cc b/src/rgw/services/svc_role_rados.cc index b7e4929d7e1d..0b0880073c6f 100644 --- a/src/rgw/services/svc_role_rados.cc +++ b/src/rgw/services/svc_role_rados.cc @@ -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; diff --git a/src/rgw/services/svc_role_rados.h b/src/rgw/services/svc_role_rados.h index 51fbeaad9b92..0d608d7d26a5 100644 --- a/src/rgw/services/svc_role_rados.h +++ b/src/rgw/services/svc_role_rados.h @@ -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,