]> git-server-git.apps.pok.os.sepia.ceph.com Git - ceph.git/commitdiff
rgw: add period id to metadata log oids
authorCasey Bodley <cbodley@redhat.com>
Fri, 29 Jan 2016 15:46:04 +0000 (10:46 -0500)
committerYehuda Sadeh <yehuda@redhat.com>
Thu, 18 Feb 2016 22:04:19 +0000 (14:04 -0800)
Signed-off-by: Casey Bodley <cbodley@redhat.com>
src/rgw/rgw_metadata.cc
src/rgw/rgw_metadata.h
src/rgw/rgw_rados.cc

index 11e83771e2513957e682c91ec8d46de4df5ac4c7..3340ea49b2bb94bc5be48fe5c3ba063e900f6fdf 100644 (file)
@@ -354,9 +354,9 @@ public:
 
 static RGWMetadataTopHandler md_top_handler;
 
-RGWMetadataManager::RGWMetadataManager(CephContext *_cct, RGWRados *_store) : cct(_cct), store(_store)
+RGWMetadataManager::RGWMetadataManager(CephContext *_cct, RGWRados *_store)
+  : cct(_cct), store(_store), md_log(nullptr)
 {
-  md_log = new RGWMetadataLog(_cct, _store);
 }
 
 RGWMetadataManager::~RGWMetadataManager()
@@ -371,6 +371,12 @@ RGWMetadataManager::~RGWMetadataManager()
   delete md_log;
 }
 
+int RGWMetadataManager::init(const std::string& current_period)
+{
+  md_log = new RGWMetadataLog(cct, store, current_period);
+  return 0;
+}
+
 int RGWMetadataManager::store_md_log_entries(list<cls_log_entry>& entries, int shard_id, librados::AioCompletion *completion)
 {
   return md_log->store_entries_in_shard(entries, shard_id, completion);
index 16c26f476ced463e8ad5e23cd3cf2f1c0156482e..89cd9e9097a2825c6ed8a6c2ebd55a4e8d6295f0 100644 (file)
@@ -141,7 +141,13 @@ class RGWCompletionManager;
 class RGWMetadataLog {
   CephContext *cct;
   RGWRados *store;
-  string prefix;
+  const string prefix;
+
+  static std::string make_prefix(const std::string& period) {
+    if (period.empty())
+      return META_LOG_OBJ_PREFIX;
+    return META_LOG_OBJ_PREFIX + period + ".";
+  }
 
   void get_shard_oid(int id, string& oid) {
     char buf[16];
@@ -154,7 +160,10 @@ class RGWMetadataLog {
 
   void mark_modified(int shard_id);
 public:
-  RGWMetadataLog(CephContext *_cct, RGWRados *_store) : cct(_cct), store(_store), prefix(META_LOG_OBJ_PREFIX), lock("RGWMetaLog::lock") {}
+  RGWMetadataLog(CephContext *_cct, RGWRados *_store, const std::string& period)
+    : cct(_cct), store(_store),
+      prefix(make_prefix(period)),
+      lock("RGWMetaLog::lock") {}
 
   int add_entry(RGWMetadataHandler *handler, const string& section, const string& key, bufferlist& bl);
   int get_log_shard_id(RGWMetadataHandler *handler, const string& section, const string& key);
@@ -237,6 +246,8 @@ public:
   RGWMetadataManager(CephContext *_cct, RGWRados *_store);
   ~RGWMetadataManager();
 
+  int init(const std::string& current_period);
+
   int register_handler(RGWMetadataHandler *handler);
 
   RGWMetadataHandler *get_handler(const string& type);
index 7f55352a02e9e372eeb0b745b0d653d7b04c4165..ada249a0783072c2468bb146fcd0c26f23c2e659 100644 (file)
@@ -3615,6 +3615,13 @@ int RGWRados::init_complete()
   period_history.reset(new RGWPeriodHistory(cct, period_puller.get(),
                                             current_period));
 
+  ret = meta_mgr->init(current_period.get_id());
+  if (ret < 0) {
+    lderr(cct) << "ERROR: failed to initialize metadata log: "
+        << cpp_strerror(-ret) << dendl;
+    return ret;
+  }
+
   if (need_watch_notify()) {
     ret = init_watch();
     if (ret < 0) {