Skip to content

Commit 8eb3c26

Browse files
committed
RGW/standalone: refactor RGWZoneParams with configstore
Signed-off-by: Ali Masarwa <[email protected]>
1 parent 4bb08c9 commit 8eb3c26

File tree

4 files changed

+41
-233
lines changed

4 files changed

+41
-233
lines changed

src/rgw/driver/rados/rgw_zone.cc

Lines changed: 0 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -106,22 +106,6 @@ int RGWSystemMetaObj::read(const DoutPrefixProvider *dpp, optional_yield y)
106106
return read_info(dpp, id, y);
107107
}
108108

109-
int RGWZoneParams::create_default(const DoutPrefixProvider *dpp, optional_yield y, bool old_format)
110-
{
111-
name = default_zone_name;
112-
113-
int r = create(dpp, y);
114-
if (r < 0) {
115-
return r;
116-
}
117-
118-
if (old_format) {
119-
name = id;
120-
}
121-
122-
return r;
123-
}
124-
125109
const string& RGWZoneParams::get_compression_type(const rgw_placement_rule& placement_rule) const
126110
{
127111
static const std::string NONE{"none"};

src/rgw/driver/rados/rgw_zone.h

Lines changed: 35 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -97,7 +97,9 @@ class RGWSystemMetaObj {
9797
};
9898
WRITE_CLASS_ENCODER(RGWSystemMetaObj)
9999

100-
struct RGWZoneParams : RGWSystemMetaObj {
100+
struct RGWZoneParams {
101+
std::string id;
102+
std::string name;
101103
rgw_pool domain_root;
102104
rgw_pool control_pool;
103105
rgw_pool gc_pool;
@@ -126,33 +128,24 @@ struct RGWZoneParams : RGWSystemMetaObj {
126128

127129
JSONFormattable tier_config;
128130

129-
RGWZoneParams() : RGWSystemMetaObj() {}
130-
explicit RGWZoneParams(const std::string& name) : RGWSystemMetaObj(name){}
131-
RGWZoneParams(const rgw_zone_id& id, const std::string& name) : RGWSystemMetaObj(id.id, name) {}
132-
RGWZoneParams(const rgw_zone_id& id, const std::string& name, const std::string& _realm_id)
133-
: RGWSystemMetaObj(id.id, name), realm_id(_realm_id) {}
134-
virtual ~RGWZoneParams();
135-
136-
rgw_pool get_pool(CephContext *cct) const override;
137-
const std::string get_default_oid(bool old_format = false) const override;
138-
const std::string& get_names_oid_prefix() const override;
139-
const std::string& get_info_oid_prefix(bool old_format = false) const override;
140-
std::string get_predefined_id(CephContext *cct) const override;
141-
const std::string& get_predefined_name(CephContext *cct) const override;
142-
143-
int init(const DoutPrefixProvider *dpp,
144-
CephContext *_cct, RGWSI_SysObj *_sysobj_svc, optional_yield y,
145-
bool setup_obj = true, bool old_format = false);
146-
using RGWSystemMetaObj::init;
147-
int read_default_id(const DoutPrefixProvider *dpp, std::string& default_id, optional_yield y, bool old_format = false) override;
148-
int set_as_default(const DoutPrefixProvider *dpp, optional_yield y, bool exclusive = false) override;
149-
int create_default(const DoutPrefixProvider *dpp, optional_yield y, bool old_format = false);
150-
int create(const DoutPrefixProvider *dpp, optional_yield y, bool exclusive = true) override;
151-
int fix_pool_names(const DoutPrefixProvider *dpp, optional_yield y);
131+
RGWZoneParams() {}
132+
explicit RGWZoneParams(const std::string& _name) : name(_name){}
133+
RGWZoneParams(const rgw_zone_id& _id, const std::string& _name) : id(_id.id), name(_name) {}
134+
RGWZoneParams(const rgw_zone_id& _id, const std::string& _name, const std::string& _realm_id)
135+
: id(_id.id), name(_name), realm_id(_realm_id) {}
136+
137+
const std::string& get_name() const { return name; }
138+
const std::string& get_id() const { return id; }
139+
140+
void set_name(const std::string& _name) { name = _name;}
141+
void set_id(const std::string& _id) { id = _id;}
142+
void clear_id() { id.clear(); }
143+
144+
rgw_pool get_pool(CephContext *cct) const;
152145

153146
const std::string& get_compression_type(const rgw_placement_rule& placement_rule) const;
154147

155-
void encode(bufferlist& bl) const override {
148+
void encode(bufferlist& bl) const {
156149
ENCODE_START(15, 1, bl);
157150
encode(domain_root, bl);
158151
encode(control_pool, bl);
@@ -164,7 +157,14 @@ struct RGWZoneParams : RGWSystemMetaObj {
164157
encode(user_email_pool, bl);
165158
encode(user_swift_pool, bl);
166159
encode(user_uid_pool, bl);
167-
RGWSystemMetaObj::encode(bl);
160+
{
161+
// these used to be wrapped by RGWSystemMetaObj::encode(),
162+
// so the extra ENCODE_START/ENCODE_FINISH are preserved
163+
ENCODE_START(1, 1, bl);
164+
encode(id, bl);
165+
encode(name, bl);
166+
ENCODE_FINISH(bl);
167+
}
168168
encode(system_key, bl);
169169
encode(placement_pools, bl);
170170
rgw_pool unused_metadata_heap;
@@ -185,7 +185,7 @@ struct RGWZoneParams : RGWSystemMetaObj {
185185
ENCODE_FINISH(bl);
186186
}
187187

188-
void decode(bufferlist::const_iterator& bl) override {
188+
void decode(bufferlist::const_iterator& bl) {
189189
DECODE_START(15, bl);
190190
decode(domain_root, bl);
191191
decode(control_pool, bl);
@@ -198,7 +198,14 @@ struct RGWZoneParams : RGWSystemMetaObj {
198198
decode(user_swift_pool, bl);
199199
decode(user_uid_pool, bl);
200200
if (struct_v >= 6) {
201-
RGWSystemMetaObj::decode(bl);
201+
{
202+
// these used to be wrapped by RGWSystemMetaObj::decode(),
203+
// so the extra DECODE_START/DECODE_FINISH are preserved
204+
DECODE_START(1, bl);
205+
decode(id, bl);
206+
decode(name, bl);
207+
DECODE_FINISH(bl);
208+
}
202209
} else if (struct_v >= 2) {
203210
decode(name, bl);
204211
id = name;

src/rgw/rgw_zone.cc

Lines changed: 4 additions & 186 deletions
Original file line numberDiff line numberDiff line change
@@ -220,11 +220,10 @@ void RGWZoneGroup::decode_json(JSONObj *obj)
220220
JSONDecoder::decode_json("enabled_features", enabled_features, obj);
221221
}
222222

223-
RGWZoneParams::~RGWZoneParams() {}
224-
225223
void RGWZoneParams::decode_json(JSONObj *obj)
226224
{
227-
RGWSystemMetaObj::decode_json(obj);
225+
JSONDecoder::decode_json("id", id, obj);
226+
JSONDecoder::decode_json("name", name, obj);
228227
JSONDecoder::decode_json("domain_root", domain_root, obj);
229228
JSONDecoder::decode_json("control_pool", control_pool, obj);
230229
JSONDecoder::decode_json("gc_pool", gc_pool, obj);
@@ -251,7 +250,8 @@ void RGWZoneParams::decode_json(JSONObj *obj)
251250

252251
void RGWZoneParams::dump(Formatter *f) const
253252
{
254-
RGWSystemMetaObj::dump(f);
253+
encode_json("id", id, f);
254+
encode_json("name", name, f);
255255
encode_json("domain_root", domain_root, f);
256256
encode_json("control_pool", control_pool, f);
257257
encode_json("gc_pool", gc_pool, f);
@@ -276,17 +276,6 @@ void RGWZoneParams::dump(Formatter *f) const
276276
encode_json("realm_id", realm_id, f);
277277
}
278278

279-
int RGWZoneParams::init(const DoutPrefixProvider *dpp,
280-
CephContext *cct, RGWSI_SysObj *sysobj_svc,
281-
optional_yield y, bool setup_obj, bool old_format)
282-
{
283-
if (name.empty()) {
284-
name = cct->_conf->rgw_zone;
285-
}
286-
287-
return RGWSystemMetaObj::init(dpp, cct, sysobj_svc, y, setup_obj, old_format);
288-
}
289-
290279
rgw_pool RGWZoneParams::get_pool(CephContext *cct) const
291280
{
292281
if (cct->_conf->rgw_zone_root_pool.empty()) {
@@ -296,101 +285,6 @@ rgw_pool RGWZoneParams::get_pool(CephContext *cct) const
296285
return rgw_pool(cct->_conf->rgw_zone_root_pool);
297286
}
298287

299-
const string RGWZoneParams::get_default_oid(bool old_format) const
300-
{
301-
if (old_format) {
302-
return cct->_conf->rgw_default_zone_info_oid;
303-
}
304-
305-
return cct->_conf->rgw_default_zone_info_oid + "." + realm_id;
306-
}
307-
308-
const string& RGWZoneParams::get_names_oid_prefix() const
309-
{
310-
return zone_names_oid_prefix;
311-
}
312-
313-
const string& RGWZoneParams::get_info_oid_prefix(bool old_format) const
314-
{
315-
return zone_info_oid_prefix;
316-
}
317-
318-
string RGWZoneParams::get_predefined_id(CephContext *cct) const {
319-
return cct->_conf.get_val<string>("rgw_zone_id");
320-
}
321-
322-
const string& RGWZoneParams::get_predefined_name(CephContext *cct) const {
323-
return cct->_conf->rgw_zone;
324-
}
325-
326-
int RGWZoneParams::read_default_id(const DoutPrefixProvider *dpp, string& default_id, optional_yield y,
327-
bool old_format)
328-
{
329-
if (realm_id.empty()) {
330-
/* try using default realm */
331-
RGWRealm realm;
332-
auto config_store_type = g_conf().get_val<std::string>("rgw_config_store");
333-
auto cfgstore = DriverManager::create_config_store(dpp, config_store_type);
334-
int ret = rgw::read_realm(dpp, y, cfgstore.get(), realm.get_id(), realm.get_name(), realm);
335-
//no default realm exist
336-
if (ret < 0) {
337-
return read_id(dpp, default_zone_name, default_id, y);
338-
}
339-
realm_id = realm.get_id();
340-
}
341-
342-
return RGWSystemMetaObj::read_default_id(dpp, default_id, y, old_format);
343-
}
344-
345-
346-
int RGWZoneParams::set_as_default(const DoutPrefixProvider *dpp, optional_yield y, bool exclusive)
347-
{
348-
if (realm_id.empty()) {
349-
/* try using default realm */
350-
RGWRealm realm;
351-
auto config_store_type = g_conf().get_val<std::string>("rgw_config_store");
352-
auto cfgstore = DriverManager::create_config_store(dpp, config_store_type);
353-
int ret = rgw::read_realm(dpp, y, cfgstore.get(), realm.get_id(), realm.get_name(), realm);
354-
if (ret < 0) {
355-
ldpp_dout(dpp, 10) << "could not read realm id: " << cpp_strerror(-ret) << dendl;
356-
return -EINVAL;
357-
}
358-
realm_id = realm.get_id();
359-
}
360-
361-
return RGWSystemMetaObj::set_as_default(dpp, y, exclusive);
362-
}
363-
364-
int RGWZoneParams::create(const DoutPrefixProvider *dpp, optional_yield y, bool exclusive)
365-
{
366-
RGWZonePlacementInfo default_placement;
367-
default_placement.index_pool = name + "." + default_bucket_index_pool_suffix;
368-
rgw_pool pool = name + "." + default_storage_pool_suffix;
369-
default_placement.storage_classes.set_storage_class(RGW_STORAGE_CLASS_STANDARD, &pool, nullptr);
370-
default_placement.data_extra_pool = name + "." + default_storage_extra_pool_suffix;
371-
placement_pools["default-placement"] = default_placement;
372-
373-
int r = fix_pool_names(dpp, y);
374-
if (r < 0) {
375-
ldpp_dout(dpp, 0) << "ERROR: fix_pool_names returned r=" << r << dendl;
376-
return r;
377-
}
378-
379-
r = RGWSystemMetaObj::create(dpp, y, exclusive);
380-
if (r < 0) {
381-
return r;
382-
}
383-
384-
// try to set as default. may race with another create, so pass exclusive=true
385-
// so we don't override an existing default
386-
r = set_as_default(dpp, y, true);
387-
if (r < 0 && r != -EEXIST) {
388-
ldpp_dout(dpp, 10) << "WARNING: failed to set zone as default, r=" << r << dendl;
389-
}
390-
391-
return 0;
392-
}
393-
394288
rgw_pool fix_zone_pool_dup(const set<rgw_pool>& pools,
395289
const string& default_prefix,
396290
const string& default_suffix,
@@ -484,82 +378,6 @@ int get_zones_pool_set(const DoutPrefixProvider *dpp,
484378

485379
}
486380

487-
static int get_zones_pool_set(const DoutPrefixProvider *dpp,
488-
CephContext* cct,
489-
RGWSI_SysObj* sysobj_svc,
490-
const list<string>& zone_names,
491-
const string& my_zone_id,
492-
set<rgw_pool>& pool_names,
493-
optional_yield y)
494-
{
495-
for (const auto& name : zone_names) {
496-
RGWZoneParams zone(name);
497-
int r = zone.init(dpp, cct, sysobj_svc, y);
498-
if (r < 0) {
499-
ldpp_dout(dpp, 0) << "Error: failed to load zone " << name
500-
<< " with " << cpp_strerror(-r) << dendl;
501-
return r;
502-
}
503-
if (zone.get_id() != my_zone_id) {
504-
add_zone_pools(zone, pool_names);
505-
}
506-
}
507-
return 0;
508-
}
509-
510-
int RGWZoneParams::fix_pool_names(const DoutPrefixProvider *dpp, optional_yield y)
511-
{
512-
513-
list<string> zones;
514-
int r = zone_svc->list_zones(dpp, zones);
515-
if (r < 0) {
516-
ldpp_dout(dpp, 10) << "WARNING: driver->list_zones() returned r=" << r << dendl;
517-
}
518-
519-
set<rgw_pool> pools;
520-
r = get_zones_pool_set(dpp, cct, sysobj_svc, zones, id, pools, y);
521-
if (r < 0) {
522-
ldpp_dout(dpp, 0) << "Error: get_zones_pool_names" << r << dendl;
523-
return r;
524-
}
525-
526-
domain_root = fix_zone_pool_dup(pools, name, ".rgw.meta:root", domain_root);
527-
control_pool = fix_zone_pool_dup(pools, name, ".rgw.control", control_pool);
528-
gc_pool = fix_zone_pool_dup(pools, name ,".rgw.log:gc", gc_pool);
529-
lc_pool = fix_zone_pool_dup(pools, name ,".rgw.log:lc", lc_pool);
530-
log_pool = fix_zone_pool_dup(pools, name, ".rgw.log", log_pool);
531-
intent_log_pool = fix_zone_pool_dup(pools, name, ".rgw.log:intent", intent_log_pool);
532-
usage_log_pool = fix_zone_pool_dup(pools, name, ".rgw.log:usage", usage_log_pool);
533-
user_keys_pool = fix_zone_pool_dup(pools, name, ".rgw.meta:users.keys", user_keys_pool);
534-
user_email_pool = fix_zone_pool_dup(pools, name, ".rgw.meta:users.email", user_email_pool);
535-
user_swift_pool = fix_zone_pool_dup(pools, name, ".rgw.meta:users.swift", user_swift_pool);
536-
user_uid_pool = fix_zone_pool_dup(pools, name, ".rgw.meta:users.uid", user_uid_pool);
537-
roles_pool = fix_zone_pool_dup(pools, name, ".rgw.meta:roles", roles_pool);
538-
reshard_pool = fix_zone_pool_dup(pools, name, ".rgw.log:reshard", reshard_pool);
539-
otp_pool = fix_zone_pool_dup(pools, name, ".rgw.otp", otp_pool);
540-
oidc_pool = fix_zone_pool_dup(pools, name, ".rgw.meta:oidc", oidc_pool);
541-
notif_pool = fix_zone_pool_dup(pools, name ,".rgw.log:notif", notif_pool);
542-
topics_pool = fix_zone_pool_dup(pools, name, ".rgw.meta:topics", topics_pool);
543-
account_pool = fix_zone_pool_dup(pools, name, ".rgw.meta:accounts", account_pool);
544-
group_pool = fix_zone_pool_dup(pools, name, ".rgw.meta:groups", group_pool);
545-
546-
for(auto& iter : placement_pools) {
547-
iter.second.index_pool = fix_zone_pool_dup(pools, name, "." + default_bucket_index_pool_suffix,
548-
iter.second.index_pool);
549-
for (auto& pi : iter.second.storage_classes.get_all()) {
550-
if (pi.second.data_pool) {
551-
rgw_pool& pool = pi.second.data_pool.get();
552-
pool = fix_zone_pool_dup(pools, name, "." + default_storage_pool_suffix,
553-
pool);
554-
}
555-
}
556-
iter.second.data_extra_pool= fix_zone_pool_dup(pools, name, "." + default_storage_extra_pool_suffix,
557-
iter.second.data_extra_pool);
558-
}
559-
560-
return 0;
561-
}
562-
563381
void RGWPeriodConfig::decode_json(JSONObj *obj)
564382
{
565383
JSONDecoder::decode_json("bucket_quota", quota.bucket_quota, obj);

src/rgw/services/svc_zone.cc

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -151,7 +151,7 @@ int RGWSI_Zone::do_start(optional_yield y, const DoutPrefixProvider *dpp)
151151
return ret;
152152
}
153153

154-
ret = zone_params->init(dpp, cct, sysobj_svc, y);
154+
ret = cfgstore->read_default_zone(dpp, y, realm->get_id(), *zone_params, nullptr);
155155
bool found_zone = (ret == 0);
156156
if (ret < 0 && ret != -ENOENT) {
157157
lderr(cct) << "failed reading zone info: ret "<< ret << " " << cpp_strerror(-ret) << dendl;
@@ -581,8 +581,7 @@ int RGWSI_Zone::create_default_zg(const DoutPrefixProvider *dpp, optional_yield
581581
int RGWSI_Zone::init_default_zone(const DoutPrefixProvider *dpp, optional_yield y)
582582
{
583583
ldpp_dout(dpp, 10) << " Using default name "<< default_zone_name << dendl;
584-
zone_params->set_name(default_zone_name);
585-
int ret = zone_params->init(dpp, cct, sysobj_svc, y);
584+
int ret = cfgstore->read_zone_by_name(dpp, y, default_zone_name, *zone_params, nullptr);
586585
if (ret < 0 && ret != -ENOENT) {
587586
ldpp_dout(dpp, 0) << "failed reading zone params info: " << " " << cpp_strerror(-ret) << dendl;
588587
return ret;

0 commit comments

Comments
 (0)