]> git.apps.os.sepia.ceph.com Git - ceph-ci.git/commitdiff
rgw: metadata handlers init fixes
authorYehuda Sadeh <yehuda@redhat.com>
Wed, 19 Jun 2019 22:32:07 +0000 (15:32 -0700)
committerCasey Bodley <cbodley@redhat.com>
Mon, 29 Jul 2019 19:20:49 +0000 (15:20 -0400)
Signed-off-by: Yehuda Sadeh <yehuda@redhat.com>
src/rgw/rgw_otp.cc
src/rgw/rgw_otp.h
src/rgw/rgw_service.cc
src/rgw/rgw_user.h
src/rgw/services/svc_meta_be.cc
src/rgw/services/svc_meta_be.h
src/rgw/services/svc_otp.cc
src/rgw/services/svc_user.h
src/rgw/services/svc_user_rados.h

index a88bc518c3ef13582f310dbb7b580535c75a9564..1478ae170501ae0f6cea6ec5ec1fdb25b404075a 100644 (file)
@@ -54,7 +54,7 @@ public:
 };
 
 
-class RGWOTPMetadataHandler : public RGWMetadataHandler_GenericMetaBE {
+class RGWOTPMetadataHandler : public RGWOTPMetadataHandlerBase {
   friend class RGWOTPCtl;
 
   struct Svc {
@@ -66,6 +66,7 @@ class RGWOTPMetadataHandler : public RGWMetadataHandler_GenericMetaBE {
   int init(RGWSI_Zone *zone,
            RGWSI_MetaBackend *_meta_be,
            RGWSI_OTP *_otp) {
+    base_init(zone->ctx(), _otp->get_be_handler().get());
     svc.zone = zone;
     svc.meta_be = _meta_be;
     svc.otp = _otp;
index 1c858fb3e8b73f03c18d2ced3ab9397be12c4850..6f2e9d8f7c008b508e86158c7fcf1aae93bfae16 100644 (file)
@@ -10,6 +10,7 @@
 #include "services/svc_meta_be_otp.h"
 
 #include "rgw_basic_types.h"
+#include "rgw_metadata.h"
 
 
 class RGWObjVersionTracker;
@@ -19,6 +20,14 @@ class RGWSI_Zone;
 class RGWSI_OTP;
 class RGWSI_MetaBackend;
 
+class RGWOTPMetadataHandlerBase : public RGWMetadataHandler_GenericMetaBE {
+public:
+  virtual ~RGWOTPMetadataHandlerBase() {}
+  virtual int init(RGWSI_Zone *zone,
+                  RGWSI_MetaBackend *_meta_be,
+                  RGWSI_OTP *_otp) = 0;
+};
+
 class RGWOTPMetaHandlerAllocator {
 public:
   static RGWMetadataHandler *alloc();
index d6d35e5be189b6240528278ca722347da4f5ba09..34a7271d024eb79af596912038173f2d4aef2c36 100644 (file)
@@ -343,6 +343,9 @@ int RGWCtlDef::init(RGWServices& svc)
   bucket_meta_handler->init(svc.bucket, bucket.get());
   bi_meta_handler->init(svc.zone, svc.bucket, svc.bi);
 
+  RGWOTPMetadataHandlerBase *otp_handler = static_cast<RGWOTPMetadataHandlerBase *>(meta.otp.get());
+  otp_handler->init(svc.zone, svc.meta_be_otp, svc.otp);
+
   user->init(bucket.get());
   bucket->init(user.get(),
                (RGWBucketMetadataHandler *)bucket_meta_handler,
index 58de7e77c14e62452e207f4f6730c3a2078892ff..d83583b1bd239ea3a024c4cbb3ab2bf600e707dc 100644 (file)
@@ -806,7 +806,7 @@ class RGWUserCtl
   } ctl;
 
   RGWUserMetadataHandler *umhandler;
-  RGWSI_MetaBackend_Handler *be_handler;
+  RGWSI_MetaBackend_Handler *be_handler{nullptr};
   
 public:
   RGWUserCtl(RGWSI_Zone *zone_svc,
index 77bfef900ca9b4b6639b75976c5b5d5e1f27e9c8..6cb925169e2f2c920f2aff86cd2dd21a94490d6a 100644 (file)
@@ -169,11 +169,13 @@ int RGWSI_MetaBackend_Handler::call(std::function<int(Op *)> f)
 
 RGWSI_MetaBackend_Handler::Op *RGWSI_MetaBackend_Handler::alloc_op()
 {
-  return new Op_ManagedCtx(be);
+  return new Op_ManagedCtx(this);
 }
 
-RGWSI_MetaBackend_Handler::Op_ManagedCtx::Op_ManagedCtx(RGWSI_MetaBackend *_be) : Op(_be, _be->alloc_ctx())
+RGWSI_MetaBackend_Handler::Op_ManagedCtx::Op_ManagedCtx(RGWSI_MetaBackend_Handler *handler) : Op(handler->be, handler->be->alloc_ctx())
 {
-  pctx.reset(ctx());
+  auto c = ctx();
+  c->init(handler);
+  pctx.reset(c);
 }
 
index 469fb00c23abeae804b45e24d1d36865bb97bac0..2faa70462eff2cb588656e2b9220bcfd24ff8c58 100644 (file)
@@ -251,7 +251,7 @@ public:
   class Op_ManagedCtx : public Op {
     std::unique_ptr<RGWSI_MetaBackend::Context> pctx;
   public:
-    Op_ManagedCtx(RGWSI_MetaBackend *_be);
+    Op_ManagedCtx(RGWSI_MetaBackend_Handler *handler);
   };
 
   RGWSI_MetaBackend_Handler(RGWSI_MetaBackend *_be) : be(_be) {}
index 9dee2550bdf82bf4e8b2f425b84603109c369948..750d4a57a644d78dfda5ee4b2b594c84b85f5e91 100644 (file)
@@ -15,8 +15,13 @@ public:
                                                      zone_svc(_zone_svc) {}
 
   void get_pool_and_oid(const string& key, rgw_pool *pool, string *oid) override {
-    *pool = zone_svc->get_zone_params().otp_pool;
-    *oid = key;
+    if (pool) {
+      *pool = zone_svc->get_zone_params().otp_pool;
+    }
+
+    if (oid) {
+      *oid = key;
+    }
   }
 
   const string& get_oid_prefix() override {
index 1407989f16b99dc50c8f8aecae034184513e94af..8172a2d49c248f095accb4ae67538ff3c253a4f8 100644 (file)
@@ -26,9 +26,6 @@ class RGWGetUserStats_CB;
 
 class RGWSI_User : public RGWServiceInstance
 {
-protected:
-  RGWSI_MetaBackend_Handler *be_handler{nullptr};
-
 public:
   RGWSI_User(CephContext *cct);
   virtual ~RGWSI_User();
@@ -41,9 +38,7 @@ public:
     return rgw_user(key);
   }
 
-  RGWSI_MetaBackend_Handler *get_be_handler() {
-    return be_handler;
-  }
+  virtual RGWSI_MetaBackend_Handler *get_be_handler() = 0;
 
   /* base svc_user interfaces */
 
index 393d287daabe671750ade251add31ac3446f131f..cbe7b4be0885f55e565506e771914c96092e8c99 100644 (file)
@@ -115,6 +115,10 @@ public:
             RGWSI_MetaBackend *_meta_be_svc,
            RGWSI_SyncModules *_sync_modules);
 
+  RGWSI_MetaBackend_Handler *get_be_handler() override {
+    return be_handler;
+  }
+
   int read_user_info(RGWSI_MetaBackend::Context *ctx,
                      const rgw_user& user,
                      RGWUserInfo *info,