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()
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);
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];
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);
RGWMetadataManager(CephContext *_cct, RGWRados *_store);
~RGWMetadataManager();
+ int init(const std::string& current_period);
+
int register_handler(RGWMetadataHandler *handler);
RGWMetadataHandler *get_handler(const string& type);
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) {