cerr << "Error initing realm " << cpp_strerror(-ret) << std::endl;
return ret;
}
- ret = realm.set_current_period(period_id);
+ /* read latest sync data */
+ RGWMetaSyncStatusManager sync(store);
+
+ ret = sync.init();
+ if (ret < 0) {
+ cerr << "ERROR: sync.init() returned ret=" << ret << std::endl;
+ return -ret;
+ }
+
+ ret = sync.read_sync_status();
+ if (ret < 0) {
+ cerr << "ERROR: sync.read_sync_status() returned ret=" << ret << std::endl;
+ return -ret;
+ }
+
+ ret = realm.set_current_period(period_id, &sync.get_sync_status());
if (ret < 0 ) {
cerr << "Error setting current period " << period_id << ":" << cpp_strerror(-ret) << std::endl;
return ret;
return realm_info_oid_prefix;
}
-int RGWRealm::set_current_period(const string& period_id) {
+int RGWRealm::set_current_period(const string& period_id, const rgw_meta_sync_status* sync_status) {
/* check to see period id is valid */
RGWPeriod new_current(period_id);
int ret = new_current.init(cct, store, id, name);
return ret;
}
new_current.set_predecessor(current_period);
+ if (sync_status) {
+ new_current.set_sync_status(*sync_status);
+ }
+
ret = new_current.store_info(false);
if (ret < 0) {
return ret;
#include "cls/timeindex/cls_timeindex_types.h"
#include "rgw_log.h"
#include "rgw_metadata.h"
+#include "rgw_meta_sync_status.h"
class RGWWatcher;
class SafeTimer;
const string& get_current_period() const {
return current_period;
}
- int set_current_period(const string& period_id);
+ int set_current_period(const string& period_id, const rgw_meta_sync_status* sync_status = NULL);
};
WRITE_CLASS_ENCODER(RGWRealm)
string id;
epoch_t epoch;
string predecessor_uuid;
- map<int, version_t> versions;
+ rgw_meta_sync_status sync_status;
RGWPeriodMap period_map;
string master_zone;
const string& get_master_zone() { return master_zone;}
const string& get_realm() { return realm_id;}
const RGWPeriodMap& get_map() { return period_map;}
+ const rgw_meta_sync_status& get_sync_status() { return sync_status;}
const string& get_pool_name(CephContext *cct);
const string& get_latest_epoch_oid();
const string& get_info_oid_prefix();
void set_realm_id(const string& _realm_id) {
realm_id = _realm_id;
}
+
+ void set_sync_status(const rgw_meta_sync_status& _sync_status) {
+ sync_status = _sync_status;
+ }
+
int get_latest_epoch(epoch_t& epoch);
int init(CephContext *_cct, RGWRados *_store, const string &period_realm_id, const string &period_realm_name = "",
bool setup_obj = true);
::encode(id, bl);
::encode(epoch, bl);
::encode(predecessor_uuid, bl);
- ::encode(versions, bl);
+ ::encode(sync_status, bl);
::encode(period_map, bl);
::encode(master_zone, bl);
ENCODE_FINISH(bl);
::decode(id, bl);
::decode(epoch, bl);
::decode(predecessor_uuid, bl);
- ::decode(versions, bl);
+ ::decode(sync_status, bl);
::decode(period_map, bl);
::decode(master_zone, bl);
DECODE_FINISH(bl);