From: Casey Bodley Date: Fri, 29 Jan 2016 15:46:04 +0000 (-0500) Subject: rgw: add period id to metadata log oids X-Git-Tag: v10.1.0~354^2~20 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=5b12ec0b7d0ecce4b8fee1a471d762dfc81c43f6;p=ceph.git rgw: add period id to metadata log oids Signed-off-by: Casey Bodley --- diff --git a/src/rgw/rgw_metadata.cc b/src/rgw/rgw_metadata.cc index 11e83771e25..3340ea49b2b 100644 --- a/src/rgw/rgw_metadata.cc +++ b/src/rgw/rgw_metadata.cc @@ -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& entries, int shard_id, librados::AioCompletion *completion) { return md_log->store_entries_in_shard(entries, shard_id, completion); diff --git a/src/rgw/rgw_metadata.h b/src/rgw/rgw_metadata.h index 16c26f476ce..89cd9e9097a 100644 --- a/src/rgw/rgw_metadata.h +++ b/src/rgw/rgw_metadata.h @@ -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); diff --git a/src/rgw/rgw_rados.cc b/src/rgw/rgw_rados.cc index 7f55352a02e..ada249a0783 100644 --- a/src/rgw/rgw_rados.cc +++ b/src/rgw/rgw_rados.cc @@ -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) {