std::string master_url;
int is_master = false;
bool is_master_set = false;
+ int staging = false;
int key_type = KEY_TYPE_UNDEFINED;
rgw_bucket bucket;
uint32_t perm_mask = 0;
// do nothing
} else if (ceph_argparse_binary_flag(args, i, &system, NULL, "--system", (char*)NULL)) {
system_specified = true;
+ } else if (ceph_argparse_binary_flag(args, i, &staging, NULL, "--staging", (char*)NULL)) {
+ // do nothing
} else if (ceph_argparse_witharg(args, i, &tmp, errs, "-a", "--auth-uid", (char*)NULL)) {
if (!errs.str().empty()) {
cerr << errs.str() << std::endl;
if (!period_epoch.empty()) {
epoch = atoi(period_epoch.c_str());
}
+ if (staging) {
+ RGWRealm realm(realm_id, realm_name);
+ int ret = realm.init(g_ceph_context, store);
+ if (ret < 0 ) {
+ cerr << "Error initializing realm " << cpp_strerror(-ret) << std::endl;
+ return ret;
+ }
+ period_id = RGWPeriod::get_staging_id(realm.get_id());
+ epoch = 1;
+ }
RGWPeriod period(period_id, epoch);
int ret = period.init(g_ceph_context, store, realm_id, realm_name);
if (ret < 0) {
cerr << "period init failed: " << cpp_strerror(-ret) << std::endl;
return -ret;
}
- encode_json("realm", period.get_realm(), formatter);
encode_json("period", period, formatter);
formatter->flush(cout);
cout << std::endl;
cerr << "Error initializing realm " << cpp_strerror(-ret) << std::endl;
return ret;
}
- RGWPeriod period(realm.get_current_period(), 0);
- ret = period.init(g_ceph_context, store, realm.get_id(), realm.get_name());
+ epoch_t epoch = 0;
+ if (!period_epoch.empty()) {
+ epoch = atoi(period_epoch.c_str());
+ }
+ RGWPeriod period(period_id, epoch);
+ ret = period.init(g_ceph_context, store);
if (ret < 0) {
cerr << "period init failed: " << cpp_strerror(-ret) << std::endl;
return -ret;
void RGWPeriod::dump(Formatter *f) const
{
- encode_json("id", id , f);
+ encode_json("id", id, f);
encode_json("epoch", epoch , f);
encode_json("predecessor_uuid", predecessor_uuid, f);
encode_json("sync_status", sync_status, f);
encode_json("period_map", period_map, f);
+ encode_json("master_zonegroup", master_zonegroup, f);
encode_json("master_zone", master_zone, f);
+ encode_json("period_config", period_config, f);
+ encode_json("realm_id", realm_id, f);
+ encode_json("realm_name", realm_name, f);
}
void RGWPeriod::decode_json(JSONObj *obj)
JSONDecoder::decode_json("predecessor_uuid", predecessor_uuid, obj);
JSONDecoder::decode_json("sync_status", sync_status, obj);
JSONDecoder::decode_json("period_map", period_map, obj);
+ JSONDecoder::decode_json("master_zonegroup", master_zonegroup, obj);
JSONDecoder::decode_json("master_zone", master_zone, obj);
+ JSONDecoder::decode_json("period_config", period_config, obj);
+ JSONDecoder::decode_json("realm_id", realm_id, obj);
+ JSONDecoder::decode_json("realm_name", realm_name, obj);
}
void RGWZoneParams::dump(Formatter *f) const
{
encode_json("id", id, f);
encode_json_map("zonegroups", zonegroups, f);
- encode_json("master_zonegroup", master_zonegroup, f);
}
static void decode_zonegroups(map<string, RGWZoneGroup>& zonegroups, JSONObj *o)
if (zonegroups.empty()) {
JSONDecoder::decode_json("regions", zonegroups, obj);
}
- JSONDecoder::decode_json("master_zonegroup", master_zonegroup, obj);
/* backward compatability with region */
if (master_zonegroup.empty()) {
JSONDecoder::decode_json("master_region", master_zonegroup, obj);
}
}
+
+void RGWPeriodConfig::dump(Formatter *f) const
+{
+ encode_json("bucket_quota", bucket_quota, f);
+ encode_json("user_quota", user_quota, f);
+}
+
+void RGWPeriodConfig::decode_json(JSONObj *obj)
+{
+ JSONDecoder::decode_json("bucket_quota", bucket_quota, obj);
+ JSONDecoder::decode_json("user_quota", user_quota, obj);
+}
+
static void decode_realms(map<string, RGWRealm>& realms, JSONObj *o)
{
RGWRealm r;
for (auto iter : zonegroups) {
RGWZoneGroup zg(string(), iter);
-cerr << __FILE__ << ":" << __LINE__ << " iter=" << iter << std::endl;
ret = zg.init(cct, store);
if (ret < 0) {
ldout(cct, 0) << "WARNING: zg.init() failed: " << cpp_strerror(-ret) << dendl;
void RGWPeriod::fork()
{
+ predecessor_uuid = id;
epoch = 1;
- id = realm_id + ":staging";
+ id = get_staging_id(realm_id);
period_map.reset();
}
}
}
- RGWPeriod period(realm.get_current_period());
- ret = period.init(cct, store, realm.get_id());
- if (ret < 0) {
- derr << " failed to init period:" << cpp_strerror(-ret) << dendl;
- return ret;
- }
- ret = period.add_zonegroup(zonegroup);
- if (ret < 0) {
- derr << " failed to add zonegroup to period :" << cpp_strerror(-ret) << dendl;
- return ret;
- }
return 0;
}
};
WRITE_CLASS_ENCODER(RGWPeriodMap)
+struct RGWPeriodConfig
+{
+ RGWQuotaInfo bucket_quota;
+ RGWQuotaInfo user_quota;
+
+ void encode(bufferlist& bl) const {
+ ENCODE_START(1, 1, bl);
+ ::encode(bucket_quota, bl);
+ ::encode(user_quota, bl);
+ ENCODE_FINISH(bl);
+ }
+
+ void decode(bufferlist::iterator& bl) {
+ DECODE_START(1, bl);
+ ::decode(bucket_quota, bl);
+ ::decode(user_quota, bl);
+ DECODE_FINISH(bl);
+ }
+
+ void dump(Formatter *f) const;
+ void decode_json(JSONObj *obj);
+};
+WRITE_CLASS_ENCODER(RGWPeriodConfig)
+
struct RGWRegionMap {
map<string, RGWZoneGroup> regions;
map<string, RGWZoneGroup> regions_by_api;
string predecessor_uuid;
rgw_meta_sync_status sync_status;
RGWPeriodMap period_map;
+ RGWPeriodConfig period_config;
+ string master_zonegroup;
string master_zone;
string realm_id;
const string& get_master_zone() { return master_zone;}
const string& get_realm() { return realm_id;}
const RGWPeriodMap& get_map() { return period_map;}
+ const RGWPeriodConfig& get_config() { return period_config;}
const rgw_meta_sync_status& get_sync_status() { return sync_status;}
const string& get_pool_name(CephContext *cct);
const string& get_latest_epoch_oid();
::encode(sync_status, bl);
::encode(period_map, bl);
::encode(master_zone, bl);
+ ::encode(master_zonegroup, bl);
+ ::encode(period_config, bl);
+ ::encode(realm_id, bl);
+ ::encode(realm_name, bl);
ENCODE_FINISH(bl);
}
::decode(sync_status, bl);
::decode(period_map, bl);
::decode(master_zone, bl);
+ ::decode(master_zonegroup, bl);
+ ::decode(period_config, bl);
+ ::decode(realm_id, bl);
+ ::decode(realm_name, bl);
DECODE_FINISH(bl);
}
void dump(Formatter *f) const;
void decode_json(JSONObj *obj);
+
+ static string get_staging_id(const string& realm_id) {
+ return realm_id + ":staging";
+ }
};
WRITE_CLASS_ENCODER(RGWPeriod)