]> git.apps.os.sepia.ceph.com Git - ceph-ci.git/commitdiff
rgw: svc.datalog_rados: add new svc, move data_log out of RGWRados
authorYehuda Sadeh <yehuda@redhat.com>
Sat, 15 Jun 2019 03:21:20 +0000 (20:21 -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>
29 files changed:
src/rgw/CMakeLists.txt
src/rgw/rgw_admin.cc
src/rgw/rgw_bucket.cc
src/rgw/rgw_bucket.h
src/rgw/rgw_cr_rados.cc
src/rgw/rgw_data_sync.cc
src/rgw/rgw_op.cc
src/rgw/rgw_quota.cc
src/rgw/rgw_rados.cc
src/rgw/rgw_rados.h
src/rgw/rgw_reshard.cc
src/rgw/rgw_rest_log.cc
src/rgw/rgw_rest_log.h
src/rgw/rgw_rest_user_policy.cc
src/rgw/rgw_service.cc
src/rgw/rgw_service.h
src/rgw/rgw_trim_datalog.cc
src/rgw/rgw_user.cc
src/rgw/rgw_user.h
src/rgw/services/svc_bi_rados.cc
src/rgw/services/svc_bi_rados.h
src/rgw/services/svc_datalog_rados.cc [new file with mode: 0644]
src/rgw/services/svc_datalog_rados.h [new file with mode: 0644]
src/rgw/services/svc_mdlog.cc
src/rgw/services/svc_rados.cc
src/rgw/services/svc_user.h
src/rgw/services/svc_user_rados.cc
src/rgw/services/svc_user_rados.h
src/rgw/services/svc_zone.cc

index 88c50ca303069204845d79e8f2eef365b1de5eaa..e5f3b6f17126c01aff83f884834b2236f92dea55 100644 (file)
@@ -26,6 +26,7 @@ set(librgw_common_srcs
   services/svc_bucket.cc
   services/svc_bucket_sobj.cc
   services/svc_cls.cc
+  services/svc_datalog_rados.cc
   services/svc_mdlog.cc
   services/svc_meta.cc
   services/svc_meta_be.cc
index 8b7e3841a7fdcb6888d3e128b03c5cc28b84fe41..cad850032541eb834043efb5c3d9f2e063257b16 100644 (file)
@@ -1677,7 +1677,7 @@ int set_bucket_sync_enabled(RGWRados *store, int opt_cmd, const string& tenant_n
   }
 
   for (int i = 0; i < shards_num; ++i, ++shard_id) {
-    r = store->data_log->add_entry(bucket_info.bucket, shard_id);
+    r = store->svc.datalog_rados->add_entry(bucket_info.bucket, shard_id);
     if (r < 0) {
       lderr(store->ctx()) << "ERROR: failed writing data log" << dendl;
       return r;
@@ -7572,15 +7572,15 @@ next:
     if (ret < 0)
       return -ret;
 
-    RGWDataChangesLog *log = store->data_log;
+    auto datalog_svc = store->svc.datalog_rados;
     RGWDataChangesLog::LogMarker log_marker;
 
     do {
       list<rgw_data_change_log_entry> entries;
       if (specified_shard_id) {
-        ret = log->list_entries(shard_id, start_time.to_real_time(), end_time.to_real_time(), max_entries - count, entries, marker, NULL, &truncated);
+        ret = datalog_svc->list_entries(shard_id, start_time.to_real_time(), end_time.to_real_time(), max_entries - count, entries, marker, NULL, &truncated);
       } else {
-        ret = log->list_entries(start_time.to_real_time(), end_time.to_real_time(), max_entries - count, entries, log_marker, &truncated);
+        ret = datalog_svc->list_entries(start_time.to_real_time(), end_time.to_real_time(), max_entries - count, entries, log_marker, &truncated);
       }
       if (ret < 0) {
         cerr << "ERROR: list_bi_log_entries(): " << cpp_strerror(-ret) << std::endl;
@@ -7605,7 +7605,6 @@ next:
   }
 
   if (opt_cmd == OPT_DATALOG_STATUS) {
-    RGWDataChangesLog *log = store->data_log;
     int i = (specified_shard_id ? shard_id : 0);
 
     formatter->open_array_section("entries");
@@ -7613,7 +7612,7 @@ next:
       list<cls_log_entry> entries;
 
       RGWDataChangesLogInfo info;
-      log->get_info(i, &info);
+      store->svc.datalog_rados->get_info(i, &info);
 
       ::encode_json("info", info, formatter);
 
@@ -7654,8 +7653,7 @@ next:
     if (ret < 0)
       return -ret;
 
-    RGWDataChangesLog *log = store->data_log;
-    ret = log->trim_entries(start_time.to_real_time(), end_time.to_real_time(), start_marker, end_marker);
+    ret = store->svc.datalog_rados->trim_entries(start_time.to_real_time(), end_time.to_real_time(), start_marker, end_marker);
     if (ret < 0) {
       cerr << "ERROR: trim_entries(): " << cpp_strerror(-ret) << std::endl;
       return -ret;
index d969e18f1898586a2d40db52366368e5bd40c999..7054f7585147014c234138f1e6ef570838124a16 100644 (file)
@@ -1895,12 +1895,13 @@ void rgw_data_change_log_entry::decode_json(JSONObj *obj) {
 }
 
 
-RGWDataChangesLog::RGWDataChangesLog(CephContext *_cct, RGWRados *_store) : cct(_cct), store(_store),
+RGWDataChangesLog::RGWDataChangesLog(RGWSI_Zone *zone_svc,
+                                     RGWSI_Cls *cls_svc) : cct(zone_svc->ctx()),
   lock("RGWDataChangesLog::lock"), modified_lock("RGWDataChangesLog::modified_lock"),
   changes(cct->_conf->rgw_data_log_changes_size)
 {
-  svc.zone = store->svc.zone;
-  svc.cls = store->svc.cls;
+  svc.zone = zone_svc;
+  svc.cls = cls_svc;
 
   num_shards = cct->_conf->rgw_data_log_num_shards;
 
@@ -2025,7 +2026,7 @@ int RGWDataChangesLog::get_log_shard_id(rgw_bucket& bucket, int shard_id) {
   return choose_oid(bs);
 }
 
-int RGWDataChangesLog::add_entry(rgw_bucket& bucket, int shard_id) {
+int RGWDataChangesLog::add_entry(const rgw_bucket& bucket, int shard_id) {
   if (!svc.zone->need_to_log_data())
     return 0;
 
@@ -2236,6 +2237,9 @@ int RGWDataChangesLog::trim_entries(const real_time& start_time, const real_time
   return 0;
 }
 
+#warning clean me up
+#if 0
+
 int RGWDataChangesLog::lock_exclusive(int shard_id, timespan duration, string& zone_id, string& owner_id) {
   return store->lock_exclusive(store->svc.zone->get_zone_params().log_pool, oids[shard_id], duration, zone_id, owner_id);
 }
@@ -2243,6 +2247,7 @@ int RGWDataChangesLog::lock_exclusive(int shard_id, timespan duration, string& z
 int RGWDataChangesLog::unlock(int shard_id, string& zone_id, string& owner_id) {
   return store->unlock(store->svc.zone->get_zone_params().log_pool, oids[shard_id], zone_id, owner_id);
 }
+#endif
 
 bool RGWDataChangesLog::going_down()
 {
index 21fe57531bb91653363c440b78b716195aa917ba..867b65d426f451800b5299e4ead56a369c4a4594 100644 (file)
@@ -470,7 +470,6 @@ struct BucketChangeObserver;
 
 class RGWDataChangesLog {
   CephContext *cct;
-  RGWRados *store;
   rgw::BucketChangeObserver *observer = nullptr;
 
   struct Svc {
@@ -529,12 +528,12 @@ class RGWDataChangesLog {
 
 public:
 
-  RGWDataChangesLog(CephContext *_cct, RGWRados *_store);
+  RGWDataChangesLog(RGWSI_Zone *zone_svc, RGWSI_Cls *cls_svc);
   ~RGWDataChangesLog();
 
   int choose_oid(const rgw_bucket_shard& bs);
   const std::string& get_oid(int shard_id) const { return oids[shard_id]; }
-  int add_entry(rgw_bucket& bucket, int shard_id);
+  int add_entry(const rgw_bucket& bucket, int shard_id);
   int get_log_shard_id(rgw_bucket& bucket, int shard_id);
   int renew_entries();
   int list_entries(int shard, const real_time& start_time, const real_time& end_time, int max_entries,
@@ -547,8 +546,10 @@ public:
   int trim_entries(const real_time& start_time, const real_time& end_time,
                    const string& start_marker, const string& end_marker);
   int get_info(int shard_id, RGWDataChangesLogInfo *info);
+#if 0
   int lock_exclusive(int shard_id, timespan duration, string& zone_id, string& owner_id);
   int unlock(int shard_id, string& zone_id, string& owner_id);
+#endif
   struct LogMarker {
     int shard;
     string marker;
index 434347fca46b2f13ee7e10f73da307cf1003ce7f..11494b975b3333d0f66c7383251abc8a005194f9 100644 (file)
@@ -564,7 +564,7 @@ int RGWRadosBILogTrimCR::send_request()
   op.exec(RGW_CLASS, RGW_BI_LOG_TRIM, in);
 
   cn = stack->create_completion_notifier();
-  return bs.index_ctx.aio_operate(bs.bucket_obj, cn->completion(), &op);
+  return bs.bucket_obj.aio_operate(cn->completion(), &op);
 }
 
 int RGWRadosBILogTrimCR::request_complete()
index 0dbb851a89242a4f33984190e58fccd2ffa51266..b75451d8c8167f00299250a71901e73d44859d7f 100644 (file)
@@ -28,6 +28,7 @@
 
 #include "services/svc_zone.h"
 #include "services/svc_sync_modules.h"
+#include "services/svc_datalog_rados.h"
 
 #include "include/random.h"
 
@@ -828,10 +829,10 @@ public:
               char buf[16];
               snprintf(buf, sizeof(buf), ":%d", i);
               s = key + buf;
-              yield entries_index->append(s, store->data_log->get_log_shard_id(meta_info.data.get_bucket_info().bucket, i));
+              yield entries_index->append(s, store->svc.data_log_rados->get_log_shard_id(meta_info.data.get_bucket_info().bucket, i));
             }
           } else {
-            yield entries_index->append(key, store->data_log->get_log_shard_id(meta_info.data.get_bucket_info().bucket, -1));
+            yield entries_index->append(key, store->svc.data_log_rados->get_log_shard_id(meta_info.data.get_bucket_info().bucket, -1));
           }
         }
         truncated = result.truncated;
index 5238b88d390f8ec12a382fc6e488eb50d2ebdb77..b3b92581a213848aac52a41069ebfd5c38491e92 100644 (file)
@@ -254,7 +254,7 @@ static int get_obj_policy_from_attr(CephContext *cct,
     /* object exists, but policy is broken */
     ldout(cct, 0) << "WARNING: couldn't find acl header for object, generating default" << dendl;
     RGWUserInfo uinfo;
-    ret = rgw_get_user_info_by_uid(store, bucket_info.owner, uinfo);
+    ret = store->ctl.user->get_info_by_uid(bucket_info.owner, &uinfo);
     if (ret < 0)
       return ret;
 
@@ -288,7 +288,7 @@ int rgw_op_get_bucket_policy_from_attr(CephContext *cct,
                                        map<string, bufferlist>& bucket_attrs,
                                        RGWAccessControlPolicy *policy)
 {
-  return get_bucket_instance_policy_from_attr(cct, store, bucket_info, bucket_attrs, policy);
+  return get_bucket_instance_policy_from_attr(cct, user_ctl, bucket_info, bucket_attrs, policy);
 }
 
 static boost::optional<Policy> get_iam_policy_from_attr(CephContext* cct,
@@ -628,7 +628,7 @@ int rgw_build_bucket_policies(RGWRados* store, struct req_state* s)
     s->bucket = s->bucket_info.bucket;
 
     if (s->bucket_exists) {
-      ret = read_bucket_policy(store, s, s->bucket_info, s->bucket_attrs,
+      ret = read_bucket_policy(store->ctl.user, s, s->bucket_info, s->bucket_attrs,
                                s->bucket_acl.get(), s->bucket);
       acct_acl_user = {
         s->bucket_info.owner,
@@ -4384,7 +4384,7 @@ void RGWPutMetadataAccount::execute()
 {
   /* Params have been extracted earlier. See init_processing(). */
   RGWUserInfo new_uinfo;
-  op_ret = store->ctl.user->get_info_by_uid(s->user->user_id, new_uinfo,
+  op_ret = store->ctl.user->get_info_by_uid(s->user->user_id, &new_uinfo,
                                             RGWUserCtl::GetParams()
                                             .set_objv_tracker(&acct_op_tracker));
   if (op_ret < 0) {
@@ -4405,8 +4405,8 @@ void RGWPutMetadataAccount::execute()
 
   /* We are passing here the current (old) user info to allow the function
    * optimize-out some operations. */
-  op_ret = store->ctl.user->store_info(new_uinfo, RGWCtl::PutParams()
-                                                  .set_old_info(s->user),
+  op_ret = store->ctl.user->store_info(new_uinfo, RGWUserCtl::PutParams()
+                                                  .set_old_info(s->user)
                                                   .set_objv_tracker(&acct_op_tracker)
                                                   .set_attrs(&attrs));
 }
index f55b9bff23823356122198cc988e91ff487b21ec..496daf0564dbc2f3798eef3234539fe088635735 100644 (file)
@@ -616,7 +616,7 @@ public:
 
 int RGWUserStatsCache::fetch_stats_from_storage(const rgw_user& user, const rgw_bucket& bucket, RGWStorageStats& stats)
 {
-  int r = store->ctl.user->get_user_stats(user, stats);
+  int r = store->ctl.user->read_stats(user, &stats);
   if (r < 0) {
     ldout(store->ctx(), 0) << "could not get user stats for user=" << user << dendl;
     return r;
index 010eb237671a72e620fe62218efab9dda627223c..f3174d347da515b067478db21cfae878114bdf1f 100644 (file)
@@ -82,6 +82,7 @@ using namespace librados;
 #include "services/svc_sys_obj_cache.h"
 #include "services/svc_bucket.h"
 #include "services/svc_mdlog.h"
+#include "services/svc_datalog_rados.h"
 
 #include "compressor/Compressor.h"
 
@@ -444,13 +445,14 @@ public:
 
 int RGWDataNotifier::process()
 {
-  if (!store->data_log) {
+  auto data_log = store->svc.datalog_rados->get_log();
+  if (!data_log) {
     return 0;
   }
 
   map<int, set<string> > shards;
 
-  store->data_log->read_clear_modified(shards);
+  data_log->read_clear_modified(shards);
 
   if (shards.empty()) {
     return 0;
@@ -840,7 +842,7 @@ int RGWIndexCompletionThread::process()
       /* ignoring error, can't do anything about it */
       continue;
     }
-    r = store->data_log->add_entry(bs.bucket, bs.shard_id);
+    r = store->svc.datalog_rados->add_entry(bs.bucket, bs.shard_id);
     if (r < 0) {
       lderr(store->ctx()) << "ERROR: failed writing data log" << dendl;
     }
@@ -1045,7 +1047,6 @@ void RGWRados::finalize()
     data_notifier->stop();
     delete data_notifier;
   }
-  delete data_log;
   delete sync_tracer;
   
   delete lc;
@@ -1103,7 +1104,6 @@ int RGWRados::init_rados()
     return ret;
   }
 
-  data_log = new RGWDataChangesLog(cct, this);
   cr_registry = crs.release();
   return ret;
 }
@@ -1236,7 +1236,7 @@ int RGWRados::init_complete()
       ldout(cct, 0) << "ERROR: failed to start bucket trim manager" << dendl;
       return ret;
     }
-    data_log->set_observer(&*bucket_trim);
+    svc.datalog_rados->set_observer(&*bucket_trim);
 
     Mutex::Locker dl(data_sync_thread_lock);
     for (auto source_zone : svc.zone->get_data_sync_source_zones()) {
@@ -4714,7 +4714,7 @@ int RGWRados::Object::Delete::delete_obj(optional_yield y)
     }
 
     if (target->bucket_info.datasync_flag_enabled()) {
-      r = store->data_log->add_entry(bs->bucket, bs->shard_id);
+      r = store->svc.datalog_rados->add_entry(bs->bucket, bs->shard_id);
       if (r < 0) {
         lderr(store->ctx()) << "ERROR: failed writing data log" << dendl;
         return r;
@@ -5775,7 +5775,7 @@ int RGWRados::Bucket::UpdateIndex::complete(int64_t poolid, uint64_t epoch,
   ret = store->cls_obj_complete_add(*bs, obj, optag, poolid, epoch, ent, category, remove_objs, bilog_flags, zones_trace);
 
   if (target->bucket_info.datasync_flag_enabled()) {
-    int r = store->data_log->add_entry(bs->bucket, bs->shard_id);
+    int r = store->svc.datalog_rados->add_entry(bs->bucket, bs->shard_id);
     if (r < 0) {
       lderr(store->ctx()) << "ERROR: failed writing data log" << dendl;
     }
@@ -5803,7 +5803,7 @@ int RGWRados::Bucket::UpdateIndex::complete_del(int64_t poolid, uint64_t epoch,
   ret = store->cls_obj_complete_del(*bs, optag, poolid, epoch, obj, removed_mtime, remove_objs, bilog_flags, zones_trace);
 
   if (target->bucket_info.datasync_flag_enabled()) {
-    int r = store->data_log->add_entry(bs->bucket, bs->shard_id);
+    int r = store->svc.datalog_rados->add_entry(bs->bucket, bs->shard_id);
     if (r < 0) {
       lderr(store->ctx()) << "ERROR: failed writing data log" << dendl;
     }
@@ -5831,7 +5831,7 @@ int RGWRados::Bucket::UpdateIndex::cancel()
    * have no way to tell that they're all caught up
    */
   if (target->bucket_info.datasync_flag_enabled()) {
-    int r = store->data_log->add_entry(bs->bucket, bs->shard_id);
+    int r = store->svc.datalog_rados->add_entry(bs->bucket, bs->shard_id);
     if (r < 0) {
       lderr(store->ctx()) << "ERROR: failed writing data log" << dendl;
     }
@@ -6477,7 +6477,7 @@ int RGWRados::bucket_index_link_olh(const RGWBucketInfo& bucket_info, RGWObjStat
   }
 
   if (log_data_change && bucket_info.datasync_flag_enabled()) {
-    data_log->add_entry(bs.bucket, bs.shard_id);
+    svc.datalog_rados->add_entry(bs.bucket, bs.shard_id);
   }
 
   return 0;
index 261b559b145e5c17cc42dd971a1a5de8711e7edf..e90739819b8501ec907e33632adcf3d1dd73474c 100644 (file)
@@ -489,7 +489,7 @@ public:
                quota_handler(NULL),
                cr_registry(NULL),
                pctl(&ctl),
-               data_log(NULL), reshard(NULL) {}
+               reshard(NULL) {}
 
   RGWRados& set_use_cache(bool status) {
     use_cache = status;
@@ -547,8 +547,6 @@ public:
    */
   string host_id;
 
-  RGWDataChangesLog *data_log;
-
   RGWReshard *reshard;
   std::shared_ptr<RGWReshardWait> reshard_wait;
 
index 36614f74380b3bb62be9df3b1eb34029f907833b..6bdb9047e588c07425e4a72df4438adeb10e9971 100644 (file)
@@ -124,7 +124,7 @@ public:
     if (ret < 0) {
       return ret;
     }
-    ret = bs.index_ctx.aio_operate(bs.bucket_obj, c, &op);
+    ret = bs.bucket_obj.aio_operate(c, &op);
     if (ret < 0) {
       derr << "ERROR: failed to store entries in target bucket shard (bs=" << bs.bucket << "/" << bs.shard_id << ") error=" << cpp_strerror(-ret) << dendl;
       return ret;
index 74cde06d90e81a242d93b1b10bffded9d8b196b1..57d8c916bf4494db9bfcaa8d20f6d508ed2f5ab5 100644 (file)
@@ -27,6 +27,9 @@
 #include "rgw_mdlog.h"
 
 #include "services/svc_zone.h"
+#include "services/svc_mdlog.h"
+#include "services/svc_bilog_rados.h"
+#include "services/svc_datalog_rados.h"
 
 #include "common/errno.h"
 #include "include/ceph_assert.h"
@@ -138,7 +141,7 @@ void RGWOp_MDLog_List::send_response() {
 
 void RGWOp_MDLog_Info::execute() {
   num_objects = s->cct->_conf->rgw_md_log_max_shards;
-  period = store->ctl.meta.mgr->read_oldest_log_period();
+  period = store->svc.mdlog->read_oldest_log_period();
   http_ret = period.get_error();
 }
 
@@ -179,7 +182,7 @@ void RGWOp_MDLog_ShardInfo::execute() {
       return;
     }
   }
-  RGWMetadataLog meta_log{s->cct, store->svc.zone, store->svc.ctl, period};
+  RGWMetadataLog meta_log{s->cct, store->svc.zone, store->svc.cls, period};
 
   http_ret = meta_log.get_info(shard_id, &info);
 }
@@ -238,7 +241,7 @@ void RGWOp_MDLog_Delete::execute() {
       return;
     }
   }
-  RGWMetadataLog meta_log{s->cct, store->svc.zone, store->svc.ctl, period};
+  RGWMetadataLog meta_log{s->cct, store->svc.zone, store->svc.cls, period};
 
   http_ret = meta_log.trim(shard_id, ut_st, ut_et, start_marker, end_marker);
 }
@@ -278,7 +281,7 @@ void RGWOp_MDLog_Lock::execute() {
     return;
   }
 
-  RGWMetadataLog meta_log{s->cct, store->svc.zone, store->svc.ctl, period};
+  RGWMetadataLog meta_log{s->cct, store->svc.zone, store->svc.cls, period};
   unsigned dur;
   dur = (unsigned)strict_strtol(duration_str.c_str(), 10, &err);
   if (!err.empty() || dur <= 0) {
@@ -325,7 +328,7 @@ void RGWOp_MDLog_Unlock::execute() {
     return;
   }
 
-  RGWMetadataLog meta_log{s->cct, store->svc.zone, store->svc.ctl, period};
+  RGWMetadataLog meta_log{s->cct, store->svc.zone, store->svc.cls, period};
   http_ret = meta_log.unlock(shard_id, zone_id, locker_id);
 }
 
@@ -417,9 +420,9 @@ void RGWOp_BILog_List::execute() {
   send_response();
   do {
     list<rgw_bi_log_entry> entries;
-    int ret = store->svc.bilog->log_list(bucket_info, shard_id,
-                                         marker, max_entries - count, 
-                                         entries, &truncated);
+    int ret = store->svc.bilog_rados->log_list(bucket_info, shard_id,
+                                               marker, max_entries - count, 
+                                               entries, &truncated);
     if (ret < 0) {
       ldpp_dout(s, 5) << "ERROR: list_bi_log_entries()" << dendl;
       return;
@@ -558,7 +561,7 @@ void RGWOp_BILog_Delete::execute() {
       return;
     }
   }
-  http_ret = store->svc.bilog->log_trim(bucket_info, shard_id, start_marker, end_marker);
+  http_ret = store->svc.bilog_rados->log_trim(bucket_info, shard_id, start_marker, end_marker);
   if (http_ret < 0) {
     ldpp_dout(s, 5) << "ERROR: trim_bi_log_entries() " << dendl;
   }
@@ -610,9 +613,9 @@ void RGWOp_DATALog_List::execute() {
 
   // Note that last_marker is updated to be the marker of the last
   // entry listed
-  http_ret = store->data_log->list_entries(shard_id, ut_st, ut_et,
-                                           max_entries, entries, marker,
-                                           &last_marker, &truncated);
+  http_ret = store->svc.datalog_rados->list_entries(shard_id, ut_st, ut_et,
+                                                    max_entries, entries, marker,
+                                                    &last_marker, &truncated);
 }
 
 void RGWOp_DATALog_List::send_response() {
@@ -672,7 +675,7 @@ void RGWOp_DATALog_ShardInfo::execute() {
     return;
   }
 
-  http_ret = store->data_log->get_info(shard_id, &info);
+  http_ret = store->svc.datalog_rados->get_info(shard_id, &info);
 }
 
 void RGWOp_DATALog_ShardInfo::send_response() {
@@ -684,75 +687,6 @@ void RGWOp_DATALog_ShardInfo::send_response() {
   flusher.flush();
 }
 
-void RGWOp_DATALog_Lock::execute() {
-  string shard_id_str, duration_str, locker_id, zone_id;
-  unsigned shard_id;
-
-  http_ret = 0;
-
-  shard_id_str = s->info.args.get("id");
-  duration_str = s->info.args.get("length");
-  locker_id    = s->info.args.get("locker-id");
-  zone_id      = s->info.args.get("zone-id");
-
-  if (shard_id_str.empty() ||
-      (duration_str.empty()) ||
-      locker_id.empty() ||
-      zone_id.empty()) {
-    dout(5) << "Error invalid parameter list" << dendl;
-    http_ret = -EINVAL;
-    return;
-  }
-
-  string err;
-  shard_id = (unsigned)strict_strtol(shard_id_str.c_str(), 10, &err);
-  if (!err.empty()) {
-    dout(5) << "Error parsing shard_id param " << shard_id_str << dendl;
-    http_ret = -EINVAL;
-    return;
-  }
-
-  unsigned dur;
-  dur = (unsigned)strict_strtol(duration_str.c_str(), 10, &err);
-  if (!err.empty() || dur <= 0) {
-    dout(5) << "invalid length param " << duration_str << dendl;
-    http_ret = -EINVAL;
-    return;
-  }
-  http_ret = store->data_log->lock_exclusive(shard_id, make_timespan(dur), zone_id, locker_id);
-  if (http_ret == -EBUSY)
-    http_ret = -ERR_LOCKED;
-}
-
-void RGWOp_DATALog_Unlock::execute() {
-  string shard_id_str, locker_id, zone_id;
-  unsigned shard_id;
-
-  http_ret = 0;
-
-  shard_id_str = s->info.args.get("id");
-  locker_id    = s->info.args.get("locker-id");
-  zone_id      = s->info.args.get("zone-id");
-
-  if (shard_id_str.empty() ||
-      locker_id.empty() ||
-      zone_id.empty()) {
-    dout(5) << "Error invalid parameter list" << dendl;
-    http_ret = -EINVAL;
-    return;
-  }
-
-  string err;
-  shard_id = (unsigned)strict_strtol(shard_id_str.c_str(), 10, &err);
-  if (!err.empty()) {
-    dout(5) << "Error parsing shard_id param " << shard_id_str << dendl;
-    http_ret = -EINVAL;
-    return;
-  }
-
-  http_ret = store->data_log->unlock(shard_id, zone_id, locker_id);
-}
-
 void RGWOp_DATALog_Notify::execute() {
   string  source_zone = s->info.args.get("source-zone");
 #define LARGE_ENOUGH_BUF (128 * 1024)
@@ -834,7 +768,7 @@ void RGWOp_DATALog_Delete::execute() {
     return;
   }
 
-  http_ret = store->data_log->trim_entries(shard_id, ut_st, ut_et, start_marker, end_marker);
+  http_ret = store->svc.datalog_rados->trim_entries(shard_id, ut_st, ut_et, start_marker, end_marker);
 }
 
 // not in header to avoid pulling in rgw_sync.h
@@ -1049,11 +983,7 @@ RGWOp *RGWHandler_Log::op_post() {
     else if (s->info.args.exists("notify"))
       return new RGWOp_MDLog_Notify;       
   } else if (type.compare("data") == 0) {
-    if (s->info.args.exists("lock"))
-      return new RGWOp_DATALog_Lock;
-    else if (s->info.args.exists("unlock"))
-      return new RGWOp_DATALog_Unlock;
-    else if (s->info.args.exists("notify"))
+    if (s->info.args.exists("notify"))
       return new RGWOp_DATALog_Notify;     
   }
   return NULL;
index cd82f2e675e9c51c24759ded8fcac58f67981eff..f48ff1b0c52f23c49930f62704dbb13f499dcd5c 100644 (file)
@@ -252,34 +252,6 @@ public:
   }
 };
 
-class RGWOp_DATALog_Lock : public RGWRESTOp {
-public:
-  RGWOp_DATALog_Lock() {}
-  ~RGWOp_DATALog_Lock() override {}
-
-  int check_caps(RGWUserCaps& caps) override {
-    return caps.check_cap("datalog", RGW_CAP_WRITE);
-  }
-  void execute() override;
-  const char* name() const override {
-    return "lock_datalog_object";
-  }
-};
-
-class RGWOp_DATALog_Unlock : public RGWRESTOp {
-public:
-  RGWOp_DATALog_Unlock() {}
-  ~RGWOp_DATALog_Unlock() override {}
-
-  int check_caps(RGWUserCaps& caps) override {
-    return caps.check_cap("datalog", RGW_CAP_WRITE);
-  }
-  void execute() override;
-  const char* name() const override {
-    return "unlock_datalog_object";
-  }
-};
-
 class RGWOp_DATALog_Notify : public RGWRESTOp {
 public:
   RGWOp_DATALog_Notify() {}
index 0ece53de6caa9ca02a9682eb89990fc97b5d5869..6b64c8ca1c0efb688ec8e0b06556803ab8c960ab 100644 (file)
@@ -342,7 +342,7 @@ void RGWDeleteUserPolicy::execute()
 
       RGWObjVersionTracker objv_tracker;
       op_ret = store->ctl.user->store_info(info, RGWUserCtl::PutParams()
-                                                .set_old_info(&info),
+                                                .set_old_info(&info)
                                                 .set_objv_tracker(&objv_tracker)
                                                 .set_attrs(&uattrs));
       if (op_ret < 0) {
index 97fe0c632b75b6e34efee2d8ca4651cb6f80111e..2275f7c6b9d68ba71e737c2c279ed957fbe52208 100644 (file)
@@ -8,6 +8,7 @@
 #include "services/svc_bilog_rados.h"
 #include "services/svc_bucket_sobj.h"
 #include "services/svc_cls.h"
+#include "services/svc_datalog_rados.h"
 #include "services/svc_mdlog.h"
 #include "services/svc_meta.h"
 #include "services/svc_meta_be.h"
@@ -50,6 +51,7 @@ int RGWServices_Def::init(CephContext *cct,
   bi_rados = std::make_unique<RGWSI_BucketIndex_RADOS>(cct);
   bilog_rados = std::make_unique<RGWSI_BILog_RADOS>(cct);
   cls = std::make_unique<RGWSI_Cls>(cct);
+  datalog_rados = std::make_unique<RGWSI_DataLog_RADOS>(cct);
   mdlog = std::make_unique<RGWSI_MDLog>(cct);
   meta = std::make_unique<RGWSI_Meta>(cct);
   meta_be_sobj = std::make_unique<RGWSI_MetaBackend_SObj>(cct);
@@ -72,7 +74,7 @@ int RGWServices_Def::init(CephContext *cct,
   vector<RGWSI_MetaBackend *> meta_bes{meta_be_sobj.get(), meta_be_otp.get()};
 
   finisher->init();
-  bi_rados->init(zone.get(), rados.get(), bilog_rados.get());
+  bi_rados->init(zone.get(), rados.get(), bilog_rados.get(), datalog_rados.get());
   bilog_rados->init(bi_rados.get());
   bucket_sobj->init(zone.get(), sysobj.get(), sysobj_cache.get(),
                     bi_rados.get(), meta.get(), meta_be_sobj.get(),
@@ -173,6 +175,12 @@ int RGWServices_Def::init(CephContext *cct,
     return r;
   }
 
+  r = datalog_rados->start();
+  if (r < 0) {
+    ldout(cct, 0) << "ERROR: failed to start datalog_rados service (" << cpp_strerror(-r) << dendl;
+    return r;
+  }
+
   r = mdlog->start();
   if (r < 0) {
     ldout(cct, 0) << "ERROR: failed to start mdlog service (" << cpp_strerror(-r) << dendl;
@@ -224,6 +232,8 @@ void RGWServices_Def::shutdown()
     return;
   }
 
+  datalog_rados->shutdown();
+
   sysobj->shutdown();
   sysobj_core->shutdown();
   notify->shutdown();
@@ -256,6 +266,7 @@ int RGWServices::do_init(CephContext *_cct, bool have_cache, bool raw)
   bucket_sobj = _svc.bucket_sobj.get();
   bucket = bucket_sobj;
   cls = _svc.cls.get();
+  datalog_rados = _svc.datalog_rados.get();
   mdlog = _svc.mdlog.get();
   meta = _svc.meta.get();
   meta_be_sobj = _svc.meta_be_sobj.get();
index 20616dbb3e493d4538ef652c2db80b545065a857..e4269120223c6d5db2bb2e856c5ddd076349d7a2 100644 (file)
@@ -51,6 +51,7 @@ class RGWSI_BucketIndex;
 class RGWSI_BucketIndex_RADOS;
 class RGWSI_BILog_RADOS;
 class RGWSI_Cls;
+class RGWSI_DataLog_RADOS;
 class RGWSI_MDLog;
 class RGWSI_Meta;
 class RGWSI_MetaBackend;
@@ -79,6 +80,7 @@ struct RGWServices_Def
   std::unique_ptr<RGWSI_BucketIndex_RADOS> bi_rados;
   std::unique_ptr<RGWSI_BILog_RADOS> bilog_rados;
   std::unique_ptr<RGWSI_Cls> cls;
+  std::unique_ptr<RGWSI_DataLog_RADOS> datalog_rados;
   std::unique_ptr<RGWSI_MDLog> mdlog;
   std::unique_ptr<RGWSI_Meta> meta;
   std::unique_ptr<RGWSI_MetaBackend_SObj> meta_be_sobj;
@@ -116,6 +118,7 @@ struct RGWServices
   RGWSI_BucketIndex_RADOS *bi_rados{nullptr};
   RGWSI_BILog_RADOS *bilog_rados{nullptr};
   RGWSI_Cls *cls{nullptr};
+  RGWSI_DataLog_RADOS *datalog_rados{nullptr};
   RGWSI_MDLog *mdlog{nullptr};
   RGWSI_Meta *meta{nullptr};
   RGWSI_MetaBackend *meta_be_sobj{nullptr};
index db75fe887ba631f65bb2d0cd3521b31d96ae2f16..6cd2a164407ed61ccea8332e66977589216cc6d0 100644 (file)
@@ -125,7 +125,7 @@ int DataLogTrimCR::operate()
         ldout(cct, 10) << "trimming log shard " << i
             << " at marker=" << m
             << " last_trim=" << last_trim[i] << dendl;
-        spawn(new TrimCR(store, store->data_log->get_oid(i),
+        spawn(new TrimCR(store, store->svc.datalog_rados->get_oid(i),
                          m, &last_trim[i]),
               true);
       }
@@ -157,7 +157,7 @@ class DataLogTrimPollCR : public RGWCoroutine {
                     int num_shards, utime_t interval)
     : RGWCoroutine(store->ctx()), store(store), http(http),
       num_shards(num_shards), interval(interval),
-      lock_oid(store->data_log->get_oid(0)),
+      lock_oid(store->svc.datalog_rados->get_oid(0)),
       lock_cookie(RGWSimpleRadosLockCR::gen_random_cookie(cct)),
       last_trim(num_shards)
   {}
index 5f2754235303e8af4147bd8cca44fb623a97be4f..1602e5d591d23c133a0907270904b53e038674f3 100644 (file)
@@ -2096,7 +2096,7 @@ int RGWUserAdminOp_User::info(RGWRados *store, RGWUserAdminOpState& op_state,
   RGWStorageStats stats;
   RGWStorageStats *arg_stats = NULL;
   if (op_state.fetch_stats) {
-    int ret = store->ctl.user->get_stats(info.user_id, stats);
+    int ret = store->ctl.user->read_stats(info.user_id, &stats);
     if (ret < 0 && ret != -ENOENT) {
       return ret;
     }
@@ -2726,7 +2726,7 @@ int RGWUserCtl::reset_stats(const rgw_user& user)
 int RGWUserCtl::read_stats(const rgw_user& user, RGWStorageStats *stats)
 {
   return be_handler->call([&](RGWSI_MetaBackend_Handler::Op *op) {
-    return svc.user->reset_bucket_stats(op->ctx(), user, stats);
+    return svc.user->read_stats(op->ctx(), user, stats);
   });
 }
 
index 8bdae9020b7f16132f67bccf42e6b49d043f3ba9..20462b6e36581e218d0a4f76967cc012c7fc13fd 100644 (file)
@@ -934,6 +934,7 @@ public:
 
   int flush_bucket_stats(const rgw_user& user,
                          const RGWBucketEnt& ent);
+  int complete_flush_stats(const rgw_user& user);
   int reset_stats(const rgw_user& user);
   int read_stats(const rgw_user& user, RGWStorageStats *stats);
 };
index ec51d8a75a6905e7d5ffafb99268744147eec16d..8de7d58c36c57096e517d274be44334eb6489dfa 100644 (file)
@@ -1,6 +1,7 @@
 
 #include "svc_bi_rados.h"
 #include "svc_bilog_rados.h"
+#include "svc_datalog_rados.h"
 #include "svc_zone.h"
 
 #include "rgw/rgw_zone.h"
@@ -17,11 +18,13 @@ RGWSI_BucketIndex_RADOS::RGWSI_BucketIndex_RADOS(CephContext *cct) : RGWSI_Bucke
 
 void RGWSI_BucketIndex_RADOS::init(RGWSI_Zone *zone_svc,
                                    RGWSI_RADOS *rados_svc,
-                                   RGWSI_BILog_RADOS *bilog_svc)
+                                   RGWSI_BILog_RADOS *bilog_svc,
+                                   RGWSI_DataLog_RADOS *datalog_rados_svc)
 {
   svc.zone = zone_svc;
   svc.rados = rados_svc;
   svc.bilog = bilog_svc;
+  svc.datalog_rados = datalog_rados_svc;
 }
 
 int RGWSI_BucketIndex_RADOS::open_pool(const rgw_pool& pool,
@@ -256,8 +259,9 @@ int RGWSI_BucketIndex_RADOS::open_bucket_index_shard(const RGWBucketInfo& bucket
                                                      int shard_id,
                                                      RGWSI_RADOS::Obj *bucket_obj)
 {
+  RGWSI_RADOS::Pool index_pool;
   string bucket_oid_base;
-  int ret = open_bucket_index_base(bucket_info, index_pool, &bucket_oid_base);
+  int ret = open_bucket_index_base(bucket_info, &index_pool, &bucket_oid_base);
   if (ret < 0) {
     ldout(cct, 20) << __func__ << ": open_bucket_index_pool() returned "
                    << r << dendl;
@@ -269,7 +273,7 @@ int RGWSI_BucketIndex_RADOS::open_bucket_index_shard(const RGWBucketInfo& bucket
   get_bucket_index_object(bucket_oid_base, bucket_info.num_shards,
                           shard_id, &oid);
 
-  *bucket_obj = svc.rados->obj(pool, oid);
+  *bucket_obj = svc.rados->obj(index_pool, oid);
 
   return 0;
 }
@@ -419,7 +423,7 @@ int RGWSI_BucketIndex_RADOS::handle_overwrite(const RGWBucketInfo& info,
     }
 
     for (int i = 0; i < shards_num; ++i, ++shard_id) {
-      ret = store->data_log->add_entry(info.bucket, shard_id);
+      ret = svc.datalog_rados->add_entry(info.bucket, shard_id);
       if (ret < 0) {
         lderr(cct) << "ERROR: failed writing data log (info.bucket=" << info.bucket << ", shard_id=" << shard_id << ")" << dendl;
         return ret;
index 567f84f1c1b5cb1c982de43da72662f44cac3769..11b7bb1e765fe67befaa653cc660402da6eb8192 100644 (file)
@@ -26,6 +26,7 @@
 struct rgw_bucket_dir_header;
 
 class RGWSI_BILog_RADOS;
+class RGWSI_DataLog_RADOS;
 
 #define RGW_NO_SHARD -1
 
@@ -65,13 +66,15 @@ public:
     RGWSI_Zone *zone{nullptr};
     RGWSI_RADOS *rados{nullptr};
     RGWSI_BILog_RADOS *bilog{nullptr};
+    RGWSI_DataLog_RADOS *datalog_rados{nullptr};
   } svc;
 
   RGWSI_BucketIndex_RADOS(CephContext *cct);
 
   void init(RGWSI_Zone *zone_svc,
             RGWSI_RADOS *rados_svc,
-            RGWSI_BILog_RADOS *bilog_svc);
+            RGWSI_BILog_RADOS *bilog_svc,
+            RGWSI_DataLog_RADOS *datalog_rados_svc);
 
   static int shards_max() {
     return RGW_SHARDS_PRIME_1;
diff --git a/src/rgw/services/svc_datalog_rados.cc b/src/rgw/services/svc_datalog_rados.cc
new file mode 100644 (file)
index 0000000..4a94ea7
--- /dev/null
@@ -0,0 +1,82 @@
+#include "svc_datalog_rados.h"
+#include "svc_zone.h"
+#include "svc_cls.h"
+
+#include "rgw/rgw_bucket.h"
+
+
+#define dout_subsys ceph_subsys_rgw
+
+RGWSI_DataLog_RADOS::RGWSI_DataLog_RADOS(CephContext *cct) : RGWServiceInstance(cct) {
+}
+
+RGWSI_DataLog_RADOS::~RGWSI_DataLog_RADOS() {
+}
+
+int RGWSI_DataLog_RADOS::init(RGWSI_Zone *_zone_svc, RGWSI_Cls *_cls_svc)
+{
+  svc.zone = _zone_svc;
+  svc.cls = _cls_svc;
+
+  return 0;
+}
+
+int RGWSI_DataLog_RADOS::do_start()
+{
+  log.reset(new RGWDataChangesLog(svc.zone, svc.cls));
+  
+  return 0;
+}
+
+void RGWSI_DataLog_RADOS::shutdown()
+{
+  log.reset();
+}
+
+void RGWSI_DataLog_RADOS::set_observer(rgw::BucketChangeObserver *observer)
+{
+  log->set_observer(observer);
+}
+
+int RGWSI_DataLog_RADOS::get_log_shard_id(rgw_bucket& bucket, int shard_id)
+{
+  return log->get_log_shard_id(bucket, shard_id);
+}
+
+const std::string& RGWSI_DataLog_RADOS::get_oid(int shard_id) const
+{
+  return log->get_oid(shard_id);
+}
+
+int RGWSI_DataLog_RADOS::get_info(int shard_id, RGWDataChangesLogInfo *info)
+{
+  return log->get_info(shard_id, info);
+}
+
+int RGWSI_DataLog_RADOS::add_entry(const rgw_bucket& bucket, int shard_id)
+{
+  return log->add_entry(bucket, shard_id);
+}
+
+int RGWSI_DataLog_RADOS::list_entries(int shard, const real_time& start_time, const real_time& end_time, int max_entries,
+                 list<rgw_data_change_log_entry>& entries,
+                 const string& marker,
+                 string *out_marker,
+                 bool *truncated)
+{
+  return log->list_entries(shard, start_time, end_time, max_entries,
+                           entries, marker, out_marker, truncated);
+}
+
+int RGWSI_DataLog_RADOS::trim_entries(int shard_id, const real_time& start_time, const real_time& end_time,
+                                      const string& start_marker, const string& end_marker)
+{
+  return log->trim_entries(shard_id, start_time, end_time, start_marker, end_marker);
+}
+
+int RGWSI_DataLog_RADOS::trim_entries(const real_time& start_time, const real_time& end_time,
+                                      const string& start_marker, const string& end_marker)
+{
+  return log->trim_entries(start_time, end_time, start_marker, end_marker);
+}
+
diff --git a/src/rgw/services/svc_datalog_rados.h b/src/rgw/services/svc_datalog_rados.h
new file mode 100644 (file)
index 0000000..777dff1
--- /dev/null
@@ -0,0 +1,71 @@
+// -*- mode:C++; tab-width:8; c-basic-offset:2; indent-tabs-mode:t -*-
+// vim: ts=8 sw=2 smarttab
+
+/*
+ * Ceph - scalable distributed file system
+ *
+ * Copyright (C) 2019 Red Hat, Inc.
+ *
+ * This is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License version 2.1, as published by the Free Software
+ * Foundation. See file COPYING.
+ *
+ */
+
+
+#pragma once
+
+#include "rgw/rgw_service.h"
+
+
+class RGWDataChangesLog;
+class RGWDataChangesLogInfo;
+struct rgw_data_change_log_entry;
+
+namespace rgw {
+  class BucketChangeObserver;
+}
+
+class RGWSI_DataLog_RADOS : public RGWServiceInstance
+{
+  std::unique_ptr<RGWDataChangesLog> log;
+
+public:
+  RGWSI_DataLog_RADOS(CephContext *cct);
+  virtual ~RGWSI_DataLog_RADOS();
+
+  struct Svc {
+    RGWSI_Zone *zone{nullptr};
+    RGWSI_Cls *cls{nullptr};
+  } svc;
+
+  int init(RGWSI_Zone *_zone_svc,
+           RGWSI_Cls *_cls_svc);
+
+  int do_start() override;
+  void shutdown() override;
+
+  RGWDataChangesLog *get_log() {
+    return log.get();
+  }
+
+  void set_observer(rgw::BucketChangeObserver *observer);
+
+  int get_log_shard_id(rgw_bucket& bucket, int shard_id);
+  const std::string& get_oid(int shard_id) const;
+
+  int get_info(int shard_id, RGWDataChangesLogInfo *info);
+
+  int add_entry(const rgw_bucket& bucket, int shard_id);
+  int list_entries(int shard, const real_time& start_time, const real_time& end_time, int max_entries,
+                  list<rgw_data_change_log_entry>& entries,
+                  const string& marker,
+                  string *out_marker,
+                  bool *truncated);
+  int trim_entries(int shard_id, const real_time& start_time, const real_time& end_time,
+                   const string& start_marker, const string& end_marker);
+  int trim_entries(const real_time& start_time, const real_time& end_time,
+                   const string& start_marker, const string& end_marker);
+};
+
index 4080a1b2ef4fb4963c60b115d8af3666d8e52917..d44baf81fc63b16de87c28b2bcb6ff5ca855ac9b 100644 (file)
@@ -45,7 +45,7 @@ int RGWSI_MDLog::do_start()
   period_history.reset(new RGWPeriodHistory(cct, period_puller.get(),
                                             current_period.get_id()));
 
-  if (svc.zone->need_sync()) {
+  if (svc.zone->need_to_sync()) {
     // initialize the log period history
     svc.mdlog->init_oldest_log_period();
   }
index 5bfbf8a82cb10a97b76a3072132d9c97e8bdffd5..bc04484a924eba7dea63ccdd806a9873642faee4 100644 (file)
@@ -91,7 +91,7 @@ int RGWSI_RADOS::pool_iterate(librados::IoCtx& io_ctx,
 RGWSI_RADOS::Obj::Obj(Pool& pool, const string& oid) : rados_svc(pool.rados_svc), rados_handle(pool.rados_handle)
 {
   ref.pool = pool;
-  ref.obj = rgw_obj(pool.get_pool(), oid);
+  ref.obj = rgw_raw_obj(pool.get_pool(), oid);
 }
 
 void RGWSI_RADOS::Obj::init(const rgw_raw_obj& obj)
index 4146af67ea016ef150d851df1aa4c2a1e47ae601..fe7928a32de78df393811d4ddc6884be72cd2150 100644 (file)
@@ -109,6 +109,7 @@ public:
                                   const rgw_user& user) = 0;
   virtual int reset_bucket_stats(RGWSI_MetaBackend::Context *ctx,
                                 const rgw_user& user) = 0;
-  virtual int read_stats(const rgw_user& user, RGWStorageStats *stats) = 0;
+  virtual int read_stats(RGWSI_MetaBackend::Context *ctx,
+                        const rgw_user& user, RGWStorageStats *stats) = 0;
 };
 
index 3e647ca56826a910dea6d9eea15fd61e59f9d1dd..3c9cb0e7ca264193ba26a8004596ae80bb735428 100644 (file)
@@ -767,7 +767,7 @@ int RGWSI_User_RADOS::flush_bucket_stats(RGWSI_MetaBackend::Context *ctx,
 }
 
 int RGWSI_User_RADOS::reset_bucket_stats(RGWSI_MetaBackend::Context *ctx,
-                                         const rgw_user& user) override
+                                         const rgw_user& user)
 {
   return cls_user_reset_stats(user);
 }
@@ -782,7 +782,7 @@ int RGWSI_User_RADOS::cls_user_reset_stats(const rgw_user& user)
   }
   librados::ObjectWriteOperation op;
   ::cls_user_reset_stats(op);
-  return rados_obj->operate(&op, null_yield);
+  return rados_obj.operate(&op, null_yield);
 }
 
 int RGWSI_User_RADOS::complete_flush_stats(RGWSI_MetaBackend::Context *ctx,
@@ -796,7 +796,7 @@ int RGWSI_User_RADOS::complete_flush_stats(RGWSI_MetaBackend::Context *ctx,
   }
   librados::ObjectWriteOperation op;
   ::cls_user_complete_stats_sync(op);
-  return rados_obj->operate(&op, null_yield);
+  return rados_obj.operate(&op, null_yield);
 }
 
 int RGWSI_User_RADOS::cls_user_get_header(const rgw_user& user, cls_user_header *header)
@@ -811,10 +811,11 @@ int RGWSI_User_RADOS::cls_user_get_header(const rgw_user& user, cls_user_header
   bufferlist ibl;
   librados::ObjectReadOperation op;
   ::cls_user_get_header(op, header, &rc);
-  return rados_obj->operate(&op, &ibl, null_yield);
+  return rados_obj.operate(&op, &ibl, null_yield);
 }
 
-int RGWSI_User_RADOS::read_stats(const rgw_user& user, RGWStorageStats *stats)
+int RGWSI_User_RADOS::read_stats(RGWSI_MetaBackend::Context *ctx,
+                                 const rgw_user& user, RGWStorageStats *stats)
 {
   string user_str = user.to_str();
 
index fe4d0e76d8fc779d4f458818760f4c060a0d7e4d..70b8f7c784536326eb1db8576e691ea031ff0384 100644 (file)
@@ -179,6 +179,7 @@ public:
 
   int reset_bucket_stats(RGWSI_MetaBackend::Context *ctx,
                         const rgw_user& user) override;
-  int read_stats(const rgw_user& user, RGWStorageStats *stats) override;
+  int read_stats(RGWSI_MetaBackend::Context *ctx,
+                const rgw_user& user, RGWStorageStats *stats) override;
 };
 
index 54fecd9cae46527dd050464e5be38ab28a92879d..13833c85a0fae904959d9df64e5cf5367ad149d8 100644 (file)
@@ -889,9 +889,9 @@ bool RGWSI_Zone::find_zone_id_by_name(const string& name, string *id) {
 
 bool RGWSI_Zone::need_to_sync() const
 {
-  return !(zonegroup.master_zone.empty() ||
+  return !(zonegroup->master_zone.empty() ||
           !rest_master_conn ||
-          current_period.get_id().empty());
+          current_period->get_id().empty());
 }
 
 bool RGWSI_Zone::need_to_log_data() const