]> git.apps.os.sepia.ceph.com Git - ceph-ci.git/commitdiff
rgw: move mdlog related functionality to the be_sobj impl
authorYehuda Sadeh <yehuda@redhat.com>
Fri, 31 May 2019 21:49:01 +0000 (14:49 -0700)
committerCasey Bodley <cbodley@redhat.com>
Mon, 29 Jul 2019 19:20:48 +0000 (15:20 -0400)
Signed-off-by: Yehuda Sadeh <yehuda@redhat.com>
src/rgw/rgw_metadata.cc
src/rgw/services/svc_bucket.cc
src/rgw/services/svc_mdlog.cc
src/rgw/services/svc_mdlog.h
src/rgw/services/svc_meta_be.cc
src/rgw/services/svc_meta_be.h
src/rgw/services/svc_meta_be_otp.cc
src/rgw/services/svc_meta_be_otp.h
src/rgw/services/svc_meta_be_sobj.cc
src/rgw/services/svc_meta_be_sobj.h
src/rgw/services/svc_user_rados.cc

index 464a6678472a6590740fcb4c133a1dc274f3043a..1c0277a78a8f9f796630a4e01bec0e8c79c29bc5 100644 (file)
@@ -448,7 +448,7 @@ int RGWMetadataHandlerPut_SObj::put_checked()
 
   encode_obj(&params.bl);
 
-  int ret = op->put(entry, params, &objv_tracker, y, apply_type);
+  int ret = op->put(entry, params, &objv_tracker, y);
   if (ret < 0) {
     return ret;
   }
index 3a45633d56093c5574063091d474994a63480b50..5670845c150be94d45e0a73a800ea7e40ce809c4 100644 (file)
@@ -22,7 +22,8 @@ class RGWSI_Bucket_Module : public RGWSI_MBSObj_Handler_Module {
 
   const string prefix;
 public:
-  RGWSI_Bucket_Module(RGWSI_Bucket::Svc& _svc) : svc(_svc) {}
+  RGWSI_Bucket_Module(RGWSI_Bucket::Svc& _svc) : RGWSI_MBSObj_Handler_Module("bucket"),
+                                                 svc(_svc) {}
 
   void get_pool_and_oid(const string& key, rgw_pool *pool, string *oid) override {
     if (pool) {
@@ -57,7 +58,8 @@ class RGWSI_BucketInstance_Module : public RGWSI_MBSObj_Handler_Module {
 
   const string prefix;
 public:
-  RGWSI_BucketInstance_Module(RGWSI_Bucket::Svc& _svc) : svc(_svc), prefix(RGW_BUCKET_INSTANCE_MD_PREFIX) {}
+  RGWSI_BucketInstance_Module(RGWSI_Bucket::Svc& _svc) : RGWSI_MBSObj_Handler_Module("bucket.instance"),
+                                                         svc(_svc), prefix(RGW_BUCKET_INSTANCE_MD_PREFIX) {}
 
   void get_pool_and_oid(const string& key, rgw_pool *pool, string *oid) override {
     if (pool) {
@@ -120,7 +122,7 @@ public:
    * point, so that the log entries end up at the same log shard, so that we process them
    * in order
    */
-  string get_hash_key(const string& section, const string& key) override {
+  string get_hash_key(const string& key) override {
     string k = "bucket:";
     int pos = key.find(':');
     if (pos < 0)
index 4dc0fcd9962d92e28b4fb69153ad71635efc1f3a..b23685477115126212678421da2fded2e89f3c87 100644 (file)
@@ -353,8 +353,8 @@ RGWMetadataLog* RGWSI_MDLog::get_log(const std::string& period)
   return &insert.first->second;
 }
 
-int RGWSI_MDLog::add_entry(RGWSI_MetaBackend::Module *module, const string& section, const string& key, bufferlist& bl)
+int RGWSI_MDLog::add_entry(const string& hash_key, const string& section, const string& key, bufferlist& bl)
 {
   ceph_assert(current_log); // must have called init()
-  return current_log->add_entry(module->get_hash_key(secrion, key), section, key, bl);
+  return current_log->add_entry(hash_key, section, key, bl);
 }
index 7072f81e73d36637394908757627aa455f0c220b..41b65caec14c1ba07d11c7f574900a35e37a36ba 100644 (file)
@@ -97,7 +97,7 @@ public:
                     RGWObjVersionTracker *objv_tracker,
                     bool exclusive = false);
 
-  int add_entry(RGWSI_MetaBackend::Module *module, const string& section, const string& key, bufferlist& bl);
+  int add_entry(const string& hash_key, const string& section, const string& key, bufferlist& bl);
 
   RGWPeriodHistory *get_period_history() {
     return period_history.get();
index 3bbf9477667d33c5462d850a193d554e78941edc..dfb0b17984b5fee60c75b0e169b991a0f076eaa0 100644 (file)
@@ -1,7 +1,6 @@
 
 
 #include "svc_meta_be.h"
-#include "svc_mdlog.h"
 
 #include "rgw/rgw_mdlog.h"
 
@@ -18,73 +17,43 @@ int RGWSI_MetaBackend::pre_modify(RGWSI_MetaBackend::Context *ctx,
                                   const string& key,
                                   RGWMetadataLogData& log_data,
                                   RGWObjVersionTracker *objv_tracker,
-                                  RGWMDLogStatus op_type)
+                                  RGWMDLogStatus op_type,
+                                  optional_yield y)
 {
   /* if write version has not been set, and there's a read version, set it so that we can
    * log it
    */
-  if (objv_tracker) {
-    if (objv_tracker->read_version.ver && !objv_tracker->write_version.ver) {
-      objv_tracker->write_version = objv_tracker->read_version;
-      objv_tracker->write_version.ver++;
-    }
-    log_data.read_version = objv_tracker->read_version;
-    log_data.write_version = objv_tracker->write_version;
+  if (objv_tracker &&
+      objv_tracker->read_version.ver && !objv_tracker->write_version.ver) {
+    objv_tracker->write_version = objv_tracker->read_version;
+    objv_tracker->write_version.ver++;
   }
 
-  log_data.status = op_type;
-
-  bufferlist logbl;
-  encode(log_data, logbl);
-
-  int ret = mdlog_svc->add_entry(ctx->module, ctx->section, key, logbl);
-  if (ret < 0)
-    return ret;
-
   return 0;
 }
 
 int RGWSI_MetaBackend::post_modify(RGWSI_MetaBackend::Context *ctx,
                                    const string& key,
                                    RGWMetadataLogData& log_data,
-                                   RGWObjVersionTracker *objv_tracker, int ret)
+                                   RGWObjVersionTracker *objv_tracker, int ret,
+                                   optional_yield y)
 {
-  if (ret >= 0)
-    log_data.status = MDLOG_STATUS_COMPLETE;
-  else 
-    log_data.status = MDLOG_STATUS_ABORT;
-
-  bufferlist logbl;
-  encode(log_data, logbl);
-
-  int r = mdlog_svc->add_entry(ctx->module, ctx->section, key, logbl);
-  if (ret < 0)
-    return ret;
-
-  if (r < 0)
-    return r;
-
-  return 0;
+  return ret;
 }
 
 int RGWSI_MetaBackend::prepare_mutate(RGWSI_MetaBackend::Context *ctx,
                                       const string& key,
                                       const real_time& mtime,
                                       RGWObjVersionTracker *objv_tracker,
-                                      RGWMDLogSyncType sync_mode)
+                                      optional_yield y)
 {
   real_time orig_mtime;
   unique_ptr<GetParams> params(alloc_default_get_params(&orig_mtime));
 
-  int ret = get_entry(ctx, key, *params, objv_tracker);
+  int ret = get_entry(ctx, key, *params, objv_tracker, y);
   if (ret < 0 && ret != -ENOENT) {
     return ret;
   }
-  bool exists = (ret != -ENOENT);
-  if (!RGWMetadataHandler::check_versions(exists, objv_tracker->read_version, orig_mtime,
-                                          objv_tracker->write_version, mtime, sync_mode)) {
-    return STATUS_NO_APPLY;
-  }
 
   if (objv_tracker->write_version.tag.empty()) {
     if (objv_tracker->read_version.tag.empty()) {
@@ -102,14 +71,14 @@ int RGWSI_MetaBackend::mutate(RGWSI_MetaBackend::Context *ctx,
                               const ceph::real_time& mtime,
                               RGWObjVersionTracker *objv_tracker,
                               RGWMDLogStatus op_type,
-                              RGWMDLogSyncType sync_mode,
                               std::function<int()> f,
-                              bool generic_prepare)
+                              bool generic_prepare,
+                              optional_yield y)
 {
   int ret;
 
   if (generic_prepare) {
-    ret = prepare_mutate(ctx, key, mtime, objv_tracker, sync_mode);
+    ret = prepare_mutate(ctx, key, mtime, objv_tracker, y);
     if (ret < 0 ||
         ret == STATUS_NO_APPLY) {
       return ret;
@@ -117,7 +86,7 @@ int RGWSI_MetaBackend::mutate(RGWSI_MetaBackend::Context *ctx,
   }
 
   RGWMetadataLogData log_data;
-  ret = pre_modify(ctx, key, log_data, objv_tracker, op_type);
+  ret = pre_modify(ctx, key, log_data, objv_tracker, op_type, y);
   if (ret < 0) {
     return ret;
   }
@@ -126,7 +95,7 @@ int RGWSI_MetaBackend::mutate(RGWSI_MetaBackend::Context *ctx,
 
   /* cascading ret into post_modify() */
 
-  ret = post_modify(ctx, key, log_data, objv_tracker, ret);
+  ret = post_modify(ctx, key, log_data, objv_tracker, ret, y);
   if (ret < 0)
     return ret;
 
@@ -136,41 +105,44 @@ int RGWSI_MetaBackend::mutate(RGWSI_MetaBackend::Context *ctx,
 int RGWSI_MetaBackend::get(Context *ctx,
                            const string& key,
                            GetParams& params,
-                           RGWObjVersionTracker *objv_tracker)
+                           RGWObjVersionTracker *objv_tracker,
+                           optional_yield y)
 {
-  return get_entry(ctx, key, params, objv_tracker);
+  return get_entry(ctx, key, params, objv_tracker, y);
 }
 
 int RGWSI_MetaBackend::put(Context *ctx,
                            const string& key,
                            PutParams& params,
                            RGWObjVersionTracker *objv_tracker,
-                           RGWMDLogSyncType sync_mode)
+                           optional_yield y)
 {
   std::function<int()> f = [&]() {
-    return put_entry(ctx, key, params, objv_tracker);
+    return put_entry(ctx, key, params, objv_tracker, y);
   };
 
   return mutate(ctx, key, params.mtime, objv_tracker,
-                MDLOG_STATUS_WRITE, sync_mode,
+                MDLOG_STATUS_WRITE,
                 f,
-                false);
+                false,
+                y);
 }
 
 int RGWSI_MetaBackend::remove(Context *ctx,
                               const string& key,
                               RemoveParams& params,
                               RGWObjVersionTracker *objv_tracker,
-                              RGWMDLogSyncType sync_mode)
+                              optional_yield y)
 {
   std::function<int()> f = [&]() {
-    return remove_entry(ctx, key, params, objv_tracker);
+    return remove_entry(ctx, key, params, objv_tracker, y);
   };
 
   return mutate(ctx, key, params.mtime, objv_tracker,
-                MDLOG_STATUS_REMOVE, sync_mode,
+                MDLOG_STATUS_REMOVE,
                 f,
-                false);
+                false,
+                y);
 }
 
 
index 0232b396eae87b129281a8845a11536f2699d6a6..b20f8227e0ba15aa19b947cfa84741ca2416c3e8 100644 (file)
@@ -44,25 +44,27 @@ protected:
                      const std::string& key,
                      const ceph::real_time& mtime,
                      RGWObjVersionTracker *objv_tracker,
-                     RGWMDLogSyncType sync_mode);
+                     optional_yield y);
 
   virtual int mutate(Context *ctx,
                      const std::string& key,
                      const ceph::real_time& mtime, RGWObjVersionTracker *objv_tracker,
                      RGWMDLogStatus op_type,
-                     RGWMDLogSyncType sync_mode,
                      std::function<int()> f,
-                     bool generic_prepare);
+                     bool generic_prepare,
+                     optional_yield y);
 
   virtual int pre_modify(Context *ctx,
                          const std::string& key,
                          RGWMetadataLogData& log_data,
                          RGWObjVersionTracker *objv_tracker,
-                         RGWMDLogStatus op_type);
+                         RGWMDLogStatus op_type,
+                         optional_yield y);
   virtual int post_modify(Context *ctx,
                           const std::string& key,
                           RGWMetadataLogData& log_data,
-                          RGWObjVersionTracker *objv_tracker, int ret);
+                          RGWObjVersionTracker *objv_tracker, int ret,
+                          optional_yield y);
 public:
   class Module {
     /*
@@ -70,14 +72,6 @@ public:
      */
   public:
     virtual ~Module() = 0;
-
-    /*
-     * return key used for hashing specific section and key. Needed for determining where
-     * to store mdlog entries, e.g., bucket.index entries will be stored without using
-     * the bucket id, to ensure that bucket and bucket.instance of the same Bucket go to the
-     * same place.
-     */
-    virtual std::string get_hash_key(const std::string& section, const std::string& key) = 0;
   };
 
   using ModuleRef = std::shared_ptr<Module>;
@@ -166,16 +160,13 @@ public:
                   const std::string& key,
                   PutParams& params,
                   RGWObjVersionTracker *objv_tracker,
-                  optional_yield y,
-                  RGWMDLogSyncType sync_mode);
+                  optional_yield y);
 
   virtual int remove(Context *ctx,
                      const std::string& key,
                      RemoveParams& params,
                      RGWObjVersionTracker *objv_tracker,
-                     optional_yield y,
-                     RGWMDLogSyncType sync_mode);
-
+                     optional_yield y);
 };
 
 class RGWSI_MetaBackend_Handler {
@@ -204,16 +195,14 @@ public:
 
     int put(const std::string& key,
             RGWSI_MetaBackend::PutParams& params,
-            RGWObjVersionTracker *objv_tracker,
-            RGWMDLogSyncType sync_mode) {
-      return be->put(be_ctx, key, params, objv_tracker, sync_mode);
+            RGWObjVersionTracker *objv_tracker) {
+      return be->put(be_ctx, key, params, objv_tracker);
     }
 
     int remove(const std::string& key,
                RGWSI_MetaBackend::RemoveParams& params,
-               RGWObjVersionTracker *objv_tracker,
-               RGWMDLogSyncType sync_mode) {
-      return be->remove(be_ctx, key, params, objv_tracker, sync_mode);
+               RGWObjVersionTracker *objv_tracker) {
+      return be->remove(be_ctx, key, params, objv_tracker);
     }
 
     int list_init(const string& marker) {
index 1bcce05186d57f863c114249d990872a5a391160..9e565394b14ddaa469f51a0d0d29db9378c5e73f 100644 (file)
@@ -37,12 +37,13 @@ RGWSI_MetaBackend::GetParams *RGWSI_MetaBackend_OTP::alloc_default_get_params(ce
 
 int RGWSI_MetaBackend_SObj::get_entry(RGWSI_MetaBackend::Context *_ctx,
                                       RGWSI_MetaBackend::GetParams& _params,
-                                      RGWObjVersionTracker *objv_tracker)
+                                      RGWObjVersionTracker *objv_tracker,
+                                      optional_yield y)
 {
   RGWSI_MetaBackend_SObj::Context_OTP *ctx = static_cast<RGWSI_MetaBackend_SObj::Context_OTP *>(_ctx);
   RGWSI_MBOTP_GetParams& params = static_cast<RGWSI_MBOTP_GetParams&>(_params);
 
-  int r = svc.cls->mfa.list_mfa(ctx->key, params.pdevices, objv_tracker, params.pmtime, null_yield);
+  int r = svc.cls->mfa.list_mfa(ctx->key, params.pdevices, objv_tracker, params.pmtime, y);
   if (r < 0) {
     return r;
   }
@@ -52,11 +53,12 @@ int RGWSI_MetaBackend_SObj::get_entry(RGWSI_MetaBackend::Context *_ctx,
 
 int RGWSI_MetaBackend_SObj::put_entry(RGWSI_MetaBackend::Context *_ctx,
                                       RGWSI_MetaBackend::PutParams& _params,
-                                      RGWObjVersionTracker *objv_tracker)
+                                      RGWObjVersionTracker *objv_tracker,
+                                      optional_yield y)
 {
   RGWSI_MetaBackend_OTP::Context_OTP *ctx = static_cast<RGWSI_MetaBackend_OTP::Context_OTP *>(_ctx);
   RGWSI_MBOTP_PutParams& params = static_cast<RGWSI_MBOTP_PutParams&>(_params);
 
-  return svc.cls->mfa.set_mfa(ctx->key, params.devices, true, &objv_tracker, mtime, null_yield);
+  return svc.cls->mfa.set_mfa(ctx->key, params.devices, true, &objv_tracker, mtime, y);
 }
 
index 54508f709904bd625d96ab723c6e0a8e52d309af..137bf90f09351fd31875a70621c91c73bcbe4dd2 100644 (file)
@@ -64,16 +64,18 @@ public:
     cls_svc = _cls_svc;
   }
 
-  void init_ctx(RGWSI_MetaBackend_Handle handle, RGWSI_MetaBackend::Context *ctx) override;
-
   RGWSI_MetaBackend::GetParams *alloc_default_get_params(ceph::real_time *pmtime) override;
 
   int get_entry(RGWSI_MetaBackend::Context *ctx,
+                const string& key,
                 RGWSI_MetaBackend::GetParams& _params,
-                RGWObjVersionTracker *objv_tracker);
+                RGWObjVersionTracker *objv_tracker,
+                optional_yield y);
   int put_entry(RGWSI_MetaBackend::Context *ctx,
+                const string& key,
                 RGWSI_MetaBackend::PutParams& _params,
-                RGWObjVersionTracker *objv_tracker);
+                RGWObjVersionTracker *objv_tracker,
+                optional_yield y);
 };
 
 
index df4e37711c934e5b9ee7f69e9840ec1898f3e704..191564d86911eeb22b6b927ea1a99a235c19f09b 100644 (file)
@@ -1,5 +1,6 @@
 
 #include "svc_meta_be_sobj.h"
+#include "svc_mdlog.h"
 
 #include "rgw/rgw_tools.h"
 #include "rgw/rgw_metadata.h"
@@ -21,7 +22,67 @@ RGWSI_MetaBackend_Handler *RGWSI_MetaBackend_SObj::alloc_be_handler()
 
 RGWSI_MetaBackend::Context *RGWSI_MetaBackend_SObj::alloc_ctx()
 {
-  return new ctx(sysobj_svc);
+  return new Context_SObj(sysobj_svc);
+}
+
+int RGWSI_MetaBackend_SObj::pre_modify(RGWSI_MetaBackend::Context *_ctx,
+                                       const string& key,
+                                       RGWMetadataLogData& log_data,
+                                       RGWObjVersionTracker *objv_tracker,
+                                       RGWMDLogStatus op_type,
+                                       optional_yield y)
+{
+  auto ctx = static_cast<Context_SObj *>(_ctx);
+  int ret = RGWSI_MetaBackend::pre_modify(ctx, key, log_data,
+                                          objv_tracker, op_type,
+                                          y);
+  if (ret < 0) {
+    return ret;
+  }
+
+  /* if write version has not been set, and there's a read version, set it so that we can
+   * log it
+   */
+  if (objv_tracker) {
+    log_data.read_version = objv_tracker->read_version;
+    log_data.write_version = objv_tracker->write_version;
+  }
+
+  log_data.status = op_type;
+
+  bufferlist logbl;
+  encode(log_data, logbl);
+
+  ret = mdlog_svc->add_entry(ctx->module->get_hash_key(key), ctx->module->get_section(), key, logbl);
+  if (ret < 0)
+    return ret;
+
+  return 0;
+}
+
+int RGWSI_MetaBackend_SObj::post_modify(RGWSI_MetaBackend::Context *_ctx,
+                                        const string& key,
+                                        RGWMetadataLogData& log_data,
+                                        RGWObjVersionTracker *objv_tracker, int ret,
+                                        optional_yield y)
+{
+  auto ctx = static_cast<Context_SObj *>(_ctx);
+  if (ret >= 0)
+    log_data.status = MDLOG_STATUS_COMPLETE;
+  else 
+    log_data.status = MDLOG_STATUS_ABORT;
+
+  bufferlist logbl;
+  encode(log_data, logbl);
+
+  int r = mdlog_svc->add_entry(ctx->module->get_hash_key(key), ctx->module->get_section(), key, logbl);
+  if (ret < 0)
+    return ret;
+
+  if (r < 0)
+    return r;
+
+  return RGWSI_MetaBackend::post_modify(ctx, key, log_data, objv_tracker, ret, y);
 }
 
 int RGWSI_MetaBackend_SObj::call(std::function<int(RGWSI_MetaBackend::Context *)> f)
@@ -49,7 +110,8 @@ RGWSI_MetaBackend::GetParams *RGWSI_MetaBackend_SObj::alloc_default_get_params(c
 int RGWSI_MetaBackend_SObj::get_entry(RGWSI_MetaBackend::Context *_ctx,
                                       const string& key,
                                       GetParams& _params,
-                                      RGWObjVersionTracker *objv_tracker)
+                                      RGWObjVersionTracker *objv_tracker,
+                                      optional_yield y)
 {
   RGWSI_MetaBackend_SObj::Context_SObj *ctx = static_cast<RGWSI_MetaBackend_SObj::Context_SObj *>(_ctx);
   RGWSI_MBSObj_GetParams& params = static_cast<RGWSI_MBSObj_GetParams&>(_params);
@@ -60,7 +122,7 @@ int RGWSI_MetaBackend_SObj::get_entry(RGWSI_MetaBackend::Context *_ctx,
 
   return rgw_get_system_obj(*ctx->obj_ctx, pool, oid, *params.pbl,
                             objv_tracker, params.pmtime,
-                            params.y,
+                            y,
                             params.pattrs, params.cache_info,
                             params.refresh_version);
 }
@@ -68,7 +130,8 @@ int RGWSI_MetaBackend_SObj::get_entry(RGWSI_MetaBackend::Context *_ctx,
 int RGWSI_MetaBackend_SObj::put_entry(RGWSI_MetaBackend::Context *_ctx,
                                       const string& key,
                                       PutParams& _params,
-                                      RGWObjVersionTracker *objv_tracker)
+                                      RGWObjVersionTracker *objv_tracker,
+                                      optional_yield y)
 {
   RGWSI_MetaBackend_SObj::Context_SObj *ctx = static_cast<RGWSI_MetaBackend_SObj::Context_SObj *>(_ctx);
   RGWSI_MBSObj_PutParams& params = static_cast<RGWSI_MBSObj_PutParams&>(_params);
@@ -78,13 +141,14 @@ int RGWSI_MetaBackend_SObj::put_entry(RGWSI_MetaBackend::Context *_ctx,
   ctx->module->get_pool_and_oid(key, &pool, &oid);
 
   return rgw_put_system_obj(*ctx->obj_ctx, pool, oid, params.bl, params.exclusive,
-                            objv_tracker, params.mtime, params.y, params.pattrs);
+                            objv_tracker, params.mtime, y, params.pattrs);
 }
 
 int RGWSI_MetaBackend_SObj::remove_entry(RGWSI_MetaBackend::Context *_ctx,
                                          const string& key,
                                          RemoveParams& params,
-                                         RGWObjVersionTracker *objv_tracker)
+                                         RGWObjVersionTracker *objv_tracker,
+                                         optional_yield y)
 {
   RGWSI_MetaBackend_SObj::Context_SObj *ctx = static_cast<RGWSI_MetaBackend_SObj::Context_SObj *>(_ctx);
 
@@ -96,7 +160,7 @@ int RGWSI_MetaBackend_SObj::remove_entry(RGWSI_MetaBackend::Context *_ctx,
   auto sysobj = ctx->obj_ctx->get_obj(k);
   return sysobj.wop()
                .set_objv_tracker(objv_tracker)
-               .remove(params.y);
+               .remove(y);
 }
 
 int RGWSI_MetaBackend_SObj::list_init(RGWSI_MetaBackend::Context *_ctx,
@@ -112,7 +176,7 @@ int RGWSI_MetaBackend_SObj::list_init(RGWSI_MetaBackend::Context *_ctx,
   ctx->list.pool = sysobj_svc->get_pool(pool);
   ctx->list.op.emplace(ctx->list.pool->op());
 
-  string prefix = ctx->module->get_prefix();
+  string prefix = ctx->module->get_oid_prefix();
   ctx->list.op->init(marker, prefix);
 
   return 0;
index 70a2b2b6ffe9df03c59276d050a00c2acafc7e7e..fda798aeedde7ef3d150a4d5a9d65e47fc6ea7f0 100644 (file)
 
 
 class RGWSI_MBSObj_Handler_Module : public RGWSI_MetaBackend::Module {
+protected:
+  string section;
 public:
+  RGWSI_MBSObj_Handler_Module(const string& _section) : section(_section) {}
   virtual void get_pool_and_oid(const std::string& key, rgw_pool *pool, std::string *oid) = 0;
   virtual const std::string& get_oid_prefix() = 0;
   virtual std::string key_to_oid(const std::string& key) = 0;
   virtual bool is_valid_oid(const std::string& oid) = 0;
   virtual std::string oid_to_key(const std::string& oid) = 0;
 
+  const std::string& get_section() {
+    return section;
+  }
+
   /* key to use for hashing entries for log shard placement */
-  virtual std::string get_hash_key(const std::string& section, const std::string& key) {
+  virtual std::string get_hash_key(const std::string& key) {
     return section + ":" + key;
   }
 };
@@ -123,18 +130,33 @@ public:
 
   RGWSI_MetaBackend::GetParams *alloc_default_get_params(ceph::real_time *pmtime) override;
 
+  int pre_modify(RGWSI_MetaBackend::Context *ctx,
+                 const string& key,
+                 RGWMetadataLogData& log_data,
+                 RGWObjVersionTracker *objv_tracker,
+                 RGWMDLogStatus op_type,
+                 optional_yield y);
+  int post_modify(RGWSI_MetaBackend::Context *ctx,
+                  const string& key,
+                  RGWMetadataLogData& log_data,
+                  RGWObjVersionTracker *objv_tracker, int ret,
+                  optional_yield y);
+
   int get_entry(RGWSI_MetaBackend::Context *ctx,
                 const string& key,
                 RGWSI_MetaBackend::GetParams& params,
-                RGWObjVersionTracker *objv_tracker) override;
+                RGWObjVersionTracker *objv_tracker,
+                optional_yield y) override;
   int put_entry(RGWSI_MetaBackend::Context *ctx,
                 const string& key,
                 RGWSI_MetaBackend::PutParams& params,
-                RGWObjVersionTracker *objv_tracker) override;
+                RGWObjVersionTracker *objv_tracker,
+                optional_yield y) override;
   int remove_entry(RGWSI_MetaBackend::Context *ctx,
                    const string& key,
                    RGWSI_MetaBackend::RemoveParams& params,
-                   RGWObjVersionTracker *objv_tracker) override;
+                   RGWObjVersionTracker *objv_tracker,
+                   optional_yield y) override;
 
   int list_init(RGWSI_MetaBackend::Context *_ctx, const string& marker) override;
   int list_next(RGWSI_MetaBackend::Context *_ctx,
index 861983c7d1e7779e52a973fdc6ad1e0c63015361..77b1895344cde45299b3c14fba348d6ddfa33d97 100644 (file)
@@ -26,7 +26,8 @@ class RGWSI_User_Module : public RGWSI_MBSObj_Handler_Module {
 
   const string prefix;
 public:
-  RGWSI_User_Module(RGWSI_User_RADOS::Svc& _svc) : svc(_svc) {}
+  RGWSI_User_Module(RGWSI_User_RADOS::Svc& _svc) : RGWSI_MBSObj_Handler_Module("user"),
+                                                   svc(_svc) {}
 
   void get_pool_and_oid(const string& key, rgw_pool *pool, string *oid) override {
     if (pool) {