return -ret;
}
+ ret = zone.read();
+ if (ret < 0 && ret != -ENOENT) {
+ cerr << "zone.read() returned ret=" << ret << std::endl;
+ return -ret;
+ }
+
+ string orig_id = zone.get_id();
+
ret = read_decode_json(infile, zone);
if (ret < 0) {
return 1;
}
- if (zone.get_id().empty() && zone.get_name().empty()) {
- cerr << "no zone name id or name in the json provided , assuming old format" << std::endl;
+ if (zone.get_name().empty()) {
+ zone.set_name(zone_name);
+ if (zone.get_name().empty()) {
+ cerr << "no zone name specified" << std::endl;
+ return EINVAL;
+ }
+ }
+
+ zone_name = zone.get_name();
+
+ if (zone.get_id().empty()) {
+ zone.set_id(orig_id);
+ }
+
+ if (zone.get_id().empty()) {
+ cerr << "no zone name id the json provided, assuming old format" << std::endl;
if (zone_name.empty()) {
cerr << "missing zone name" << std::endl;
- return -EINVAL;
+ return EINVAL;
}
zone.set_name(zone_name);
zone.set_id(zone_name);
}
- ret = zone.create();
- if (ret < 0 && ret != -EEXIST) {
+ ret = zone.write(false);
+ if (ret < 0) {
cerr << "ERROR: couldn't create zone: " << cpp_strerror(-ret) << std::endl;
return 1;
- } if (ret == -EEXIST) {
- ret = zone.update();
- if (ret < 0) {
- cerr << "ERROR: couldn't update zone: " << cpp_strerror(-ret) << std::endl;
- return 1;
- }
}
encode_json("zone", zone, formatter);
return 0;
}
+int RGWSystemMetaObj::read()
+{
+ int ret = read_id(name, id);
+ if (ret < 0) {
+ return ret;
+ }
+
+ return read_info(id);
+}
+
int RGWSystemMetaObj::create(bool exclusive)
{
int ret;
if (exclusive && ret == 0) {
ldout(cct, 0) << "ERROR: name " << name << " already in use for obj id " << id << dendl;
return -EEXIST;
- } else if ( ret != -ENOENT) {
+ } else if ( ret < 0 && ret != -ENOENT) {
lderr(cct) << "failed reading obj id " << id << ": " << cpp_strerror(-ret) << dendl;
return ret;
}
id = uuid_str;
}
- ret = store_info(true);
+ ret = store_info(exclusive);
if (ret < 0) {
ldout(cct, 0) << "ERROR: storing info for " << id << ": " << cpp_strerror(-ret) << dendl;
return ret;
return rgw_put_system_obj(store, pool, oid, bl.c_str(), bl.length(), exclusive, NULL, 0, NULL);
}
+int RGWSystemMetaObj::write(bool exclusive)
+{
+ int ret = store_info(exclusive);
+ if (ret < 0) {
+ ldout(cct, 20) << __func__ << "(): store_info() returned ret=" << ret << dendl;
+ return ret;
+ }
+ ret = store_name(exclusive);
+ if (ret < 0) {
+ ldout(cct, 20) << __func__ << "(): store_name() returned ret=" << ret << dendl;
+ return ret;
+ }
+ return 0;
+}
+
const string& RGWRealm::get_predefined_name() {
return cct->_conf->rgw_realm;
int delete_obj(bool old_format = false);
int rename(const string& new_name);
int update() { return store_info(false);}
+ int read();
+ int write(bool exclusive);
virtual const string& get_pool_name(CephContext *cct) = 0;
virtual const string& get_default_oid(bool old_format = false) = 0;
RGWSystemMetaObj::decode(bl);
} else if (struct_v >= 2) {
::decode(name, bl);
- id = name;
+ id = name;
}
if (struct_v >= 3)
::decode(system_key, bl);