From cd69cfc5534685454228d3d4fcff962def20f266 Mon Sep 17 00:00:00 2001 From: Abhishek Lekshmanan Date: Tue, 1 Sep 2020 17:19:10 +0200 Subject: [PATCH] rgw: implement delete oids Signed-off-by: Abhishek Lekshmanan --- src/rgw/services/svc_role.h | 18 ++++++++++- src/rgw/services/svc_role_rados.cc | 51 +++++++++++++++++++++++++----- src/rgw/services/svc_role_rados.h | 15 +++++++++ 3 files changed, 75 insertions(+), 9 deletions(-) diff --git a/src/rgw/services/svc_role.h b/src/rgw/services/svc_role.h index 91dc89011e7..013c0ebb983 100644 --- a/src/rgw/services/svc_role.h +++ b/src/rgw/services/svc_role.h @@ -90,5 +90,21 @@ class RGWSI_Role: public RGWServiceInstance const std::string& name, RGWObjVersionTracker * const objv_tracker, optional_yield y, - const DoutPrefixProvider *dpp) = 0; + const DoutPrefixProvider *dpp) = 0; + + virtual int delete_name(RGWSI_MetaBackend::Context *ctx, + const std::string& name, + const std::string& tenant, + RGWObjVersionTracker * const objv_tracker, + optional_yield y, + const DoutPrefixProvider *dpp) = 0; + + virtual int delete_path(RGWSI_MetaBackend::Context *ctx, + const std::string& role_id, + const std::string& path, + const std::string& tenant, + RGWObjVersionTracker * const objv_tracker, + optional_yield y, + const DoutPrefixProvider *dpp) = 0; + }; diff --git a/src/rgw/services/svc_role_rados.cc b/src/rgw/services/svc_role_rados.cc index bc0802d5239..4974de5d36a 100644 --- a/src/rgw/services/svc_role_rados.cc +++ b/src/rgw/services/svc_role_rados.cc @@ -134,6 +134,22 @@ int RGWSI_Role_RADOS::read_name(RGWSI_MetaBackend::Context *ctx, return 0; } +static int delete_oid(RGWSI_MetaBackend::Context *ctx, + RGWSI_MetaBackend* meta_be, + const std::string& oid, + RGWObjVersionTracker * const objv_tracker, + optional_yield y, + const DoutPrefixProvider *dpp) +{ + RGWSI_MBSObj_RemoveParams params; + int r = meta_be->remove(ctx, oid, params, objv_tracker, y, dpp); + if (r < 0 && r != -ENOENT && r != -ECANCELED) { + ldout(meta_be->ctx(),0) << "ERROR: RGWSI_Role: could not remove oid = " + << oid << " r = "<< r << dendl; + return r; + } + return 0; +} int RGWSI_Role_RADOS::delete_info(RGWSI_MetaBackend::Context *ctx, const std::string& role_id, @@ -141,13 +157,32 @@ int RGWSI_Role_RADOS::delete_info(RGWSI_MetaBackend::Context *ctx, optional_yield y, const DoutPrefixProvider *dpp) { - RGWSI_MBSObj_RemoveParams params; - int r = svc.meta_be->remove(ctx, get_role_meta_key(role_id), params, objv_tracker, y, dpp); - if (r < 0 && r != -ENOENT && r != -ECANCELED) { - ldout(svc.meta_be->ctx(),0) << "ERROR: could not remove RGWRole, id = " - << role_id << " r = "<< r << dendl; - return r; - } - return 0; + return delete_oid(ctx, svc.meta_be, get_role_meta_key(role_id), + objv_tracker, y, dpp); +} + +int RGWSI_Role_RADOS::delete_name(RGWSI_MetaBackend::Context *ctx, + const std::string& name, + const std::string& tenant, + RGWObjVersionTracker * const objv_tracker, + optional_yield y, + const DoutPrefixProvider *dpp) +{ + return delete_oid(ctx, svc.meta_be, get_role_name_meta_key(name, tenant), + objv_tracker, y, dpp); + +} + +int RGWSI_Role_RADOS::delete_path(RGWSI_MetaBackend::Context *ctx, + const std::string& role_id, + const std::string& path, + const std::string& tenant, + RGWObjVersionTracker * const objv_tracker, + optional_yield y, + const DoutPrefixProvider *dpp) +{ + return delete_oid(ctx, svc.meta_be, get_role_path_meta_key(path, role_id, tenant), + objv_tracker, y, dpp); + } diff --git a/src/rgw/services/svc_role_rados.h b/src/rgw/services/svc_role_rados.h index 14b0a479555..973922cbad8 100644 --- a/src/rgw/services/svc_role_rados.h +++ b/src/rgw/services/svc_role_rados.h @@ -98,6 +98,21 @@ class RGWSI_Role_RADOS: public RGWSI_Role optional_yield y, const DoutPrefixProvider *dpp) override; + int delete_name(RGWSI_MetaBackend::Context *ctx, + const std::string& name, + const std::string& tenant, + RGWObjVersionTracker * const objv_tracker, + optional_yield y, + const DoutPrefixProvider *dpp) override; + + int delete_path(RGWSI_MetaBackend::Context *ctx, + const std::string& role_id, + const std::string& path, + const std::string& tenant, + RGWObjVersionTracker * const objv_tracker, + optional_yield y, + const DoutPrefixProvider *dpp) override; + private: RGWSI_MetaBackend_Handler *be_handler; -- 2.47.3