From ea60f7e205010ad5262c235aad95f6124565a55a Mon Sep 17 00:00:00 2001 From: Orit Wasserman Date: Wed, 21 Oct 2015 16:39:29 +0200 Subject: [PATCH] rgw: RGWRados internal zone should be protected and not accessed directly Signed-off-by: Orit Wasserman --- src/rgw/rgw_bucket.cc | 18 ++++---- src/rgw/rgw_bucket.h | 4 +- src/rgw/rgw_cache.h | 2 +- src/rgw/rgw_common.h | 13 +----- src/rgw/rgw_log.cc | 4 +- src/rgw/rgw_metadata.cc | 8 ++-- src/rgw/rgw_op.cc | 4 +- src/rgw/rgw_rados.cc | 92 ++++++++++++++++++++-------------------- src/rgw/rgw_rados.h | 14 +++--- src/rgw/rgw_rest_conn.cc | 2 +- src/rgw/rgw_user.cc | 22 +++++----- 11 files changed, 87 insertions(+), 96 deletions(-) diff --git a/src/rgw/rgw_bucket.cc b/src/rgw/rgw_bucket.cc index 740ecfe5f44c0..6f39e8ad1ee17 100644 --- a/src/rgw/rgw_bucket.cc +++ b/src/rgw/rgw_bucket.cc @@ -109,7 +109,7 @@ int rgw_read_user_buckets(RGWRados * store, string buckets_obj_id; rgw_get_buckets_obj(user_id, buckets_obj_id); bufferlist bl; - rgw_obj obj(store->zone.user_uid_pool, buckets_obj_id); + rgw_obj obj(store->get_zone_params().user_uid_pool, buckets_obj_id); bufferlist header; list entries; @@ -153,7 +153,7 @@ int rgw_bucket_sync_user_stats(RGWRados *store, const rgw_user& user_id, rgw_buc { string buckets_obj_id; rgw_get_buckets_obj(user_id, buckets_obj_id); - rgw_obj obj(store->zone.user_uid_pool, buckets_obj_id); + rgw_obj obj(store->get_zone_params().user_uid_pool, buckets_obj_id); return store->cls_user_sync_bucket_stats(obj, bucket); } @@ -211,7 +211,7 @@ int rgw_link_bucket(RGWRados *store, const rgw_user& user_id, rgw_bucket& bucket string buckets_obj_id; rgw_get_buckets_obj(user_id, buckets_obj_id); - rgw_obj obj(store->zone.user_uid_pool, buckets_obj_id); + rgw_obj obj(store->get_zone_params().user_uid_pool, buckets_obj_id); ret = store->cls_user_add_bucket(obj, new_bucket); if (ret < 0) { ldout(store->ctx(), 0) << "ERROR: error adding bucket to directory: " @@ -248,7 +248,7 @@ int rgw_unlink_bucket(RGWRados *store, const rgw_user& user_id, const string& te cls_user_bucket bucket; bucket.name = bucket_name; - rgw_obj obj(store->zone.user_uid_pool, buckets_obj_id); + rgw_obj obj(store->get_zone_params().user_uid_pool, buckets_obj_id); ret = store->cls_user_remove_bucket(obj, bucket); if (ret < 0) { ldout(store->ctx(), 0) << "ERROR: error removing bucket from directory: " @@ -343,7 +343,7 @@ int rgw_bucket_set_attrs(RGWRados *store, RGWBucketInfo& bucket_info, } string oid; store->get_bucket_meta_oid(bucket, oid); - rgw_obj obj(store->zone.domain_root, oid); + rgw_obj obj(store->get_zone_params().domain_root, oid); string key; store->get_bucket_instance_entry(bucket, key); /* we want the bucket instance name without @@ -1724,7 +1724,7 @@ public: void get_pool_and_oid(RGWRados *store, const string& key, rgw_bucket& bucket, string& oid) { oid = key; - bucket = store->zone.domain_root; + bucket = store->get_zone_params().domain_root; } int list_keys_init(RGWRados *store, void **phandle) @@ -1749,7 +1749,7 @@ public: list unfiltered_keys; - int ret = store->list_raw_objects(store->zone.domain_root, no_filter, + int ret = store->list_raw_objects(store->get_zone_params().domain_root, no_filter, max, info->ctx, unfiltered_keys, truncated); if (ret < 0 && ret != -ENOENT) return ret; @@ -1882,7 +1882,7 @@ public: void get_pool_and_oid(RGWRados *store, const string& key, rgw_bucket& bucket, string& oid) { oid = RGW_BUCKET_INSTANCE_MD_PREFIX + key; - bucket = store->zone.domain_root; + bucket = store->get_zone_params().domain_root; } int list_keys_init(RGWRados *store, void **phandle) @@ -1907,7 +1907,7 @@ public: list unfiltered_keys; - int ret = store->list_raw_objects(store->zone.domain_root, no_filter, + int ret = store->list_raw_objects(store->get_zone_params().domain_root, no_filter, max, info->ctx, unfiltered_keys, truncated); if (ret < 0 && ret != -ENOENT) return ret; diff --git a/src/rgw/rgw_bucket.h b/src/rgw/rgw_bucket.h index 8391fc618403c..238a07dd1a07f 100644 --- a/src/rgw/rgw_bucket.h +++ b/src/rgw/rgw_bucket.h @@ -467,10 +467,10 @@ public: const string& start_marker, const string& end_marker); int get_info(int shard_id, RGWDataChangesLogInfo *info); int lock_exclusive(int shard_id, utime_t& duration, string& zone_id, string& owner_id) { - return store->lock_exclusive(store->zone.log_pool, oids[shard_id], duration, zone_id, owner_id); + return store->lock_exclusive(store->get_zone_params().log_pool, oids[shard_id], duration, zone_id, owner_id); } int unlock(int shard_id, string& zone_id, string& owner_id) { - return store->unlock(store->zone.log_pool, oids[shard_id], zone_id, owner_id); + return store->unlock(store->get_zone_params().log_pool, oids[shard_id], zone_id, owner_id); } struct LogMarker { int shard; diff --git a/src/rgw/rgw_cache.h b/src/rgw/rgw_cache.h index 46449ca101533..9cdc53d261678 100644 --- a/src/rgw/rgw_cache.h +++ b/src/rgw/rgw_cache.h @@ -261,7 +261,7 @@ void RGWCache::normalize_bucket_and_obj(rgw_bucket& src_bucket, const string& dst_bucket = src_bucket; dst_obj = src_obj; } else { - dst_bucket = T::zone.domain_root; + dst_bucket = T::get_zone_params().domain_root; dst_obj = src_bucket.name; } } diff --git a/src/rgw/rgw_common.h b/src/rgw/rgw_common.h index 58a6ba98d99a8..efc55d7eaced6 100644 --- a/src/rgw/rgw_common.h +++ b/src/rgw/rgw_common.h @@ -624,19 +624,10 @@ struct rgw_bucket { rgw_bucket() { } // cppcheck-suppress noExplicitConstructor - rgw_bucket(const cls_user_bucket& b) : tenant(b.tenant), name(b.name), data_pool(b.data_pool), + rgw_bucket(const cls_user_bucket& b) : name(b.name), data_pool(b.data_pool), data_extra_pool(b.data_extra_pool), index_pool(b.index_pool), marker(b.marker), - bucket_id(b.bucket_id), oid(b.oid) {} - // cppcheck-suppress noExplicitConstructor - rgw_bucket(const cls_user_bucket& b) { - name = b.name; - data_pool = b.data_pool; - data_extra_pool = b.data_extra_pool; - index_pool = b.index_pool; - marker = b.marker; - bucket_id = b.bucket_id; - } + bucket_id(b.bucket_id) {} rgw_bucket(const string& s) : name(s) { data_pool = index_pool = s; marker = ""; diff --git a/src/rgw/rgw_log.cc b/src/rgw/rgw_log.cc index c600386f4b32f..da9bd5ba37eef 100644 --- a/src/rgw/rgw_log.cc +++ b/src/rgw/rgw_log.cc @@ -352,11 +352,11 @@ int rgw_log_op(RGWRados *store, struct req_state *s, const string& op_name, OpsL string oid = render_log_object_name(s->cct->_conf->rgw_log_object_name, &bdt, s->bucket.bucket_id, entry.bucket); - rgw_obj obj(store->zone.log_pool, oid); + rgw_obj obj(store->get_zone_params().log_pool, oid); ret = store->append_async(obj, bl.length(), bl); if (ret == -ENOENT) { - ret = store->create_pool(store->zone.log_pool); + ret = store->create_pool(store->get_zone_params().log_pool); if (ret < 0) goto done; // retry diff --git a/src/rgw/rgw_metadata.cc b/src/rgw/rgw_metadata.cc index 41fef021a6a7e..94dd7e6588985 100644 --- a/src/rgw/rgw_metadata.cc +++ b/src/rgw/rgw_metadata.cc @@ -255,14 +255,14 @@ int RGWMetadataLog::lock_exclusive(int shard_id, utime_t& duration, string& zone string oid; get_shard_oid(shard_id, oid); - return store->lock_exclusive(store->zone.log_pool, oid, duration, zone_id, owner_id); + return store->lock_exclusive(store->get_zone_params().log_pool, oid, duration, zone_id, owner_id); } int RGWMetadataLog::unlock(int shard_id, string& zone_id, string& owner_id) { string oid; get_shard_oid(shard_id, oid); - return store->unlock(store->zone.log_pool, oid, zone_id, owner_id); + return store->unlock(store->get_zone_params().log_pool, oid, zone_id, owner_id); } void RGWMetadataLog::mark_modified(int shard_id) @@ -689,7 +689,7 @@ int RGWMetadataManager::store_in_heap(RGWMetadataHandler *handler, const string& return -EINVAL; } - rgw_bucket heap_pool(store->zone.metadata_heap); + rgw_bucket heap_pool(store->get_zone_params().metadata_heap); RGWObjVersionTracker otracker; otracker.write_version = objv_tracker->write_version; @@ -711,7 +711,7 @@ int RGWMetadataManager::remove_from_heap(RGWMetadataHandler *handler, const stri return -EINVAL; } - rgw_bucket heap_pool(store->zone.metadata_heap); + rgw_bucket heap_pool(store->get_zone_params().metadata_heap); string oid = heap_oid(handler, key, objv_tracker->write_version); rgw_obj obj(heap_pool, oid); diff --git a/src/rgw/rgw_op.cc b/src/rgw/rgw_op.cc index a4be37f08a73b..53f21d06e3aaf 100644 --- a/src/rgw/rgw_op.cc +++ b/src/rgw/rgw_op.cc @@ -1712,7 +1712,7 @@ void RGWCreateBucket::execute() bool existed; string bucket_name; rgw_make_bucket_entry_name(s->bucket_tenant, s->bucket_name, bucket_name); - rgw_obj obj(store->zone.domain_root, bucket_name); + rgw_obj obj(store->get_zone_params().domain_root, bucket_name); obj_version objv, *pobjv = NULL; op_ret = get_params(); @@ -4305,7 +4305,7 @@ bool RGWBulkDelete::Deleter::delete_single(const acct_path_t& path) goto delop_fail; } - if (!store->zonegroup.is_master) { + if (!store->get_zonegroup().is_master) { bufferlist in_data; JSONParser jp; ret = forward_request_to_master(s, &ot.read_version, store, in_data, diff --git a/src/rgw/rgw_rados.cc b/src/rgw/rgw_rados.cc index 35d9557375e3e..04f4ddb698612 100644 --- a/src/rgw/rgw_rados.cc +++ b/src/rgw/rgw_rados.cc @@ -2147,7 +2147,7 @@ RGWObjState *RGWObjectCtx::get_state(rgw_obj& obj) { } return result; } else { - rgw_obj new_obj(store->zone.domain_root, obj.bucket.name); + rgw_obj new_obj(store->get_zone_params().domain_root, obj.bucket.name); iter = objs_state.find(new_obj); if (iter != objs_state.end()) { result = &iter->second; @@ -2173,7 +2173,7 @@ void RGWObjectCtx::set_atomic(rgw_obj& obj) { if (!obj.get_object().empty()) { objs_state[obj].is_atomic = true; } else { - rgw_obj new_obj(store->zone.domain_root, obj.bucket.name); + rgw_obj new_obj(store->get_zone_params().domain_root, obj.bucket.name); objs_state[new_obj].is_atomic = true; } } @@ -2183,7 +2183,7 @@ void RGWObjectCtx::set_prefetch_data(rgw_obj& obj) { if (!obj.get_object().empty()) { objs_state[obj].prefetch_data = true; } else { - rgw_obj new_obj(store->zone.domain_root, obj.bucket.name); + rgw_obj new_obj(store->get_zone_params().domain_root, obj.bucket.name); objs_state[new_obj].prefetch_data = true; } } @@ -2287,7 +2287,7 @@ public: int notify_all(map& conn_map, map >& shards) { rgw_http_param_pair pairs[] = { { "type", "data" }, { "notify", NULL }, - { "source-zone", store->zone.get_name().c_str() }, + { "source-zone", store->get_zone_params().get_name().c_str() }, { NULL, NULL } }; list stacks; @@ -2946,12 +2946,12 @@ int RGWRados::init_complete() period_zonegroup = iter->second; has_period_zonegroup = true; map::iterator zone_iter = - period_zonegroup.zones.find(zone.get_predefined_name(cct)); + period_zonegroup.zones.find(zone_params.get_predefined_name(cct)); if (zone_iter != zonegroup.zones.end()) { - period_zone= zone_iter->second; + period_zone = zone_iter->second; has_period_zone = true; } else { - lderr(cct) << "Cannot find zone " << zone.get_predefined_name(cct) << + lderr(cct) << "Cannot find zone " << zone_params.get_predefined_name(cct) << " in current period using local" << dendl; } } else { @@ -2993,7 +2993,7 @@ int RGWRados::init_complete() } if (!has_period_zone) { - ret = zone.init(cct, this); + ret = zone_params.init(cct, this); if (ret < 0 && ret != -ENOENT) { lderr(cct) << "failed reading zone info: ret "<< ret << " " << cpp_strerror(-ret) << dendl; return ret; @@ -3017,7 +3017,7 @@ int RGWRados::init_complete() for (ziter = zonegroup.zones.begin(); ziter != zonegroup.zones.end(); ++ziter) { const string& id = ziter->first; RGWZone& z = ziter->second; - if (id != zone.get_id()) { + if (id != zone_id()) { if (!z.endpoints.empty()) { ldout(cct, 20) << "generating connection object for zone " << z.name << " id " << z.id << dendl; zone_conn_map[id] = new RGWRESTConn(cct, this, z.endpoints); @@ -3221,7 +3221,7 @@ int RGWRados::list_periods(const string& current_period, list& periods) */ int RGWRados::open_root_pool_ctx() { - const string& pool = zone.domain_root.name; + const string& pool = get_zone_params().domain_root.name; const char *pool_str = pool.c_str(); librados::Rados *rad = get_rados_handle(); int r = rad->ioctx_create(pool_str, root_pool_ctx); @@ -3240,7 +3240,7 @@ int RGWRados::open_root_pool_ctx() int RGWRados::open_gc_pool_ctx() { - const char *gc_pool = zone.gc_pool.name.c_str(); + const char *gc_pool = get_zone_params().gc_pool.name.c_str(); librados::Rados *rad = get_rados_handle(); int r = rad->ioctx_create(gc_pool, gc_pool_ctx); if (r == -ENOENT) { @@ -3258,7 +3258,7 @@ int RGWRados::open_gc_pool_ctx() int RGWRados::open_objexp_pool_ctx() { - const char * const pool_name = zone.log_pool.name.c_str(); + const char * const pool_name = get_zone_params().log_pool.name.c_str(); librados::Rados * const rad = get_rados_handle(); int r = rad->ioctx_create(pool_name, objexp_pool_ctx); if (r == -ENOENT) { @@ -3277,7 +3277,7 @@ int RGWRados::open_objexp_pool_ctx() int RGWRados::init_watch() { - const char *control_pool = zone.control_pool.name.c_str(); + const char *control_pool = get_zone_params().control_pool.name.c_str(); librados::Rados *rad = rados[0]; int r = rad->ioctx_create(control_pool, control_pool_ctx); @@ -3448,7 +3448,7 @@ struct log_list_state { int RGWRados::log_list_init(const string& prefix, RGWAccessHandle *handle) { log_list_state *state = new log_list_state; - const char *log_pool = zone.log_pool.name.c_str(); + const char *log_pool = get_zone_params().log_pool.name.c_str(); librados::Rados *rad = get_rados_handle(); int r = rad->ioctx_create(log_pool, state->io_ctx); if (r < 0) { @@ -3484,7 +3484,7 @@ int RGWRados::log_list_next(RGWAccessHandle handle, string *name) int RGWRados::log_remove(const string& name) { librados::IoCtx io_ctx; - const char *log_pool = zone.log_pool.name.c_str(); + const char *log_pool = get_zone_params().log_pool.name.c_str(); librados::Rados *rad = get_rados_handle(); int r = rad->ioctx_create(log_pool, io_ctx); if (r < 0) @@ -3505,7 +3505,7 @@ struct log_show_state { int RGWRados::log_show_init(const string& name, RGWAccessHandle *handle) { log_show_state *state = new log_show_state; - const char *log_pool = zone.log_pool.name.c_str(); + const char *log_pool = get_zone_params().log_pool.name.c_str(); librados::Rados *rad = get_rados_handle(); int r = rad->ioctx_create(log_pool, state->io_ctx); if (r < 0) { @@ -3744,7 +3744,7 @@ void RGWRados::time_log_prepare_entry(cls_log_entry& entry, const utime_t& ut, c int RGWRados::time_log_add_init(librados::IoCtx& io_ctx) { - const char *log_pool = zone.log_pool.name.c_str(); + const char *log_pool = get_zone_params().log_pool.name.c_str(); librados::Rados *rad = get_rados_handle(); int r = rad->ioctx_create(log_pool, io_ctx); if (r == -ENOENT) { @@ -3808,7 +3808,7 @@ int RGWRados::time_log_list(const string& oid, utime_t& start_time, utime_t& end { librados::IoCtx io_ctx; - const char *log_pool = zone.log_pool.name.c_str(); + const char *log_pool = get_zone_params().log_pool.name.c_str(); librados::Rados *rad = get_rados_handle(); int r = rad->ioctx_create(log_pool, io_ctx); if (r < 0) @@ -3831,7 +3831,7 @@ int RGWRados::time_log_info(const string& oid, cls_log_header *header) { librados::IoCtx io_ctx; - const char *log_pool = zone.log_pool.name.c_str(); + const char *log_pool = get_zone_params().log_pool.name.c_str(); librados::Rados *rad = get_rados_handle(); int r = rad->ioctx_create(log_pool, io_ctx); if (r < 0) @@ -3851,7 +3851,7 @@ int RGWRados::time_log_info(const string& oid, cls_log_header *header) int RGWRados::time_log_info_async(librados::IoCtx& io_ctx, const string& oid, cls_log_header *header, librados::AioCompletion *completion) { - const char *log_pool = zone.log_pool.name.c_str(); + const char *log_pool = get_zone_params().log_pool.name.c_str(); librados::Rados *rad = get_rados_handle(); int r = rad->ioctx_create(log_pool, io_ctx); if (r < 0) @@ -3873,7 +3873,7 @@ int RGWRados::time_log_trim(const string& oid, const utime_t& start_time, const { librados::IoCtx io_ctx; - const char *log_pool = zone.log_pool.name.c_str(); + const char *log_pool = get_zone_params().log_pool.name.c_str(); librados::Rados *rad = get_rados_handle(); int r = rad->ioctx_create(log_pool, io_ctx); if (r < 0) @@ -4325,7 +4325,7 @@ int RGWRados::create_bucket(RGWUserInfo& owner, rgw_bucket& bucket, uint32_t nop = 0; ::encode(nop, bl); - const string& pool = zone.domain_root.name; + const string& pool = get_zone_params().domain_root.name; const char *pool_str = pool.c_str(); librados::IoCtx id_io_ctx; librados::Rados *rad = get_rados_handle(); @@ -4336,8 +4336,8 @@ int RGWRados::create_bucket(RGWUserInfo& owner, rgw_bucket& bucket, if (!pmaster_bucket) { uint64_t iid = instance_id(); uint64_t bid = next_bucket_id(); - char buf[zone.get_id().size() + 48]; - snprintf(buf, sizeof(buf), "%s.%llu.%llu", zone.get_id().c_str(), (long long)iid, (long long)bid); + char buf[get_zone_params().get_id().size() + 48]; + snprintf(buf, sizeof(buf), "%s.%llu.%llu", get_zone_params().get_id().c_str(), (long long)iid, (long long)bid); bucket.marker = buf; bucket.bucket_id = bucket.marker; } else { @@ -4478,8 +4478,8 @@ int RGWRados::set_bucket_location_by_rule(const string& location_rule, const str * checking it for the local zone, because that's where this bucket object is going to * reside. */ - map::iterator piter = zone.placement_pools.find(location_rule); - if (piter == zone.placement_pools.end()) { + map::iterator piter = get_zone_params().placement_pools.find(location_rule); + if (piter == get_zone_params().placement_pools.end()) { /* couldn't find, means we cannot really place data for this bucket in this zone */ if (zonegroup.equals(zonegroup_id)) { /* that's a configuration error, zone should have that rule, as we're within the requested @@ -4504,7 +4504,7 @@ int RGWRados::select_bucket_placement(RGWUserInfo& user_info, const string& zone const string& tenant_name, const string& bucket_name, rgw_bucket& bucket, string *pselected_rule) { - if (!zone.placement_pools.empty()) { + if (!get_zone_params().placement_pools.empty()) { return select_new_bucket_location(user_info, zonegroup_id, placement_rule, tenant_name, bucket_name, bucket, pselected_rule); } @@ -4522,10 +4522,10 @@ int RGWRados::select_legacy_bucket_placement(const string& tenant_name, const st string pool_name; bool write_map = false; - rgw_obj obj(zone.domain_root, avail_pools); + rgw_obj obj(get_zone_params().domain_root, avail_pools); RGWObjectCtx obj_ctx(this); - int ret = rgw_get_system_obj(this, obj_ctx, zone.domain_root, avail_pools, map_bl, NULL, NULL); + int ret = rgw_get_system_obj(this, obj_ctx, get_zone_params().domain_root, avail_pools, map_bl, NULL, NULL); if (ret < 0) { goto read_omap; } @@ -4598,7 +4598,7 @@ int RGWRados::update_placement_map() { bufferlist header; map m; - rgw_obj obj(zone.domain_root, avail_pools); + rgw_obj obj(get_zone_params().domain_root, avail_pools); int ret = omap_get_all(obj, header, m); if (ret < 0) return ret; @@ -4620,7 +4620,7 @@ int RGWRados::add_bucket_placement(std::string& new_pool) if (ret < 0) // DNE, or something return ret; - rgw_obj obj(zone.domain_root, avail_pools); + rgw_obj obj(get_zone_params().domain_root, avail_pools); bufferlist empty_bl; ret = omap_set(obj, new_pool, empty_bl); @@ -4632,7 +4632,7 @@ int RGWRados::add_bucket_placement(std::string& new_pool) int RGWRados::remove_bucket_placement(std::string& old_pool) { - rgw_obj obj(zone.domain_root, avail_pools); + rgw_obj obj(get_zone_params().domain_root, avail_pools); int ret = omap_del(obj, old_pool); // don't care about return value @@ -4646,7 +4646,7 @@ int RGWRados::list_placement_set(set& names) bufferlist header; map m; - rgw_obj obj(zone.domain_root, avail_pools); + rgw_obj obj(get_zone_params().domain_root, avail_pools); int ret = omap_get_all(obj, header, m); if (ret < 0) return ret; @@ -4744,7 +4744,7 @@ int RGWRados::get_system_obj_ref(const rgw_obj& obj, rgw_rados_ref *ref, rgw_buc if (ref->oid.empty()) { ref->oid = bucket->name; - *bucket = zone.domain_root; + *bucket = get_zone_params().domain_root; } r = open_pool_ctx(bucket->name, ref->ioctx); if (r < 0) @@ -9230,11 +9230,11 @@ void RGWRados::get_bucket_meta_oid(rgw_bucket& bucket, string& oid) void RGWRados::get_bucket_instance_obj(rgw_bucket& bucket, rgw_obj& obj) { if (!bucket.oid.empty()) { - obj.init(zone.domain_root, bucket.oid); + obj.init(get_zone_params().domain_root, bucket.oid); } else { string oid; get_bucket_meta_oid(bucket, oid); - obj.init(zone.domain_root, oid); + obj.init(get_zone_params().domain_root, oid); } } @@ -9267,11 +9267,11 @@ int RGWRados::get_bucket_instance_from_oid(RGWObjectCtx& obj_ctx, string& oid, R time_t *pmtime, map *pattrs, rgw_cache_entry_info *cache_info) { - ldout(cct, 20) << "reading from " << zone.domain_root << ":" << oid << dendl; + ldout(cct, 20) << "reading from " << get_zone_params().domain_root << ":" << oid << dendl; bufferlist epbl; - int ret = rgw_get_system_obj(this, obj_ctx, zone.domain_root, oid, epbl, &info.objv_tracker, pmtime, pattrs, cache_info); + int ret = rgw_get_system_obj(this, obj_ctx, get_zone_params().domain_root, oid, epbl, &info.objv_tracker, pmtime, pattrs, cache_info); if (ret < 0) { return ret; } @@ -9300,7 +9300,7 @@ int RGWRados::get_bucket_entrypoint_info(RGWObjectCtx& obj_ctx, string bucket_entry; rgw_make_bucket_entry_name(tenant_name, bucket_name, bucket_entry); - int ret = rgw_get_system_obj(this, obj_ctx, zone.domain_root, bucket_entry, bl, objv_tracker, pmtime, pattrs, cache_info); + int ret = rgw_get_system_obj(this, obj_ctx, get_zone_params().domain_root, bucket_entry, bl, objv_tracker, pmtime, pattrs, cache_info); if (ret < 0) { return ret; } @@ -10165,7 +10165,7 @@ int RGWRados::cls_obj_usage_log_add(const string& oid, rgw_usage_log_info& info) { librados::IoCtx io_ctx; - const char *usage_log_pool = zone.usage_log_pool.name.c_str(); + const char *usage_log_pool = get_zone_params().usage_log_pool.name.c_str(); librados::Rados *rad = get_rados_handle(); int r = rad->ioctx_create(usage_log_pool, io_ctx); if (r == -ENOENT) { @@ -10194,7 +10194,7 @@ int RGWRados::cls_obj_usage_log_read(string& oid, string& user, uint64_t start_e *is_truncated = false; - const char *usage_log_pool = zone.usage_log_pool.name.c_str(); + const char *usage_log_pool = get_zone_params().usage_log_pool.name.c_str(); librados::Rados *rad = get_rados_handle(); int r = rad->ioctx_create(usage_log_pool, io_ctx); if (r < 0) @@ -10210,7 +10210,7 @@ int RGWRados::cls_obj_usage_log_trim(string& oid, string& user, uint64_t start_e { librados::IoCtx io_ctx; - const char *usage_log_pool = zone.usage_log_pool.name.c_str(); + const char *usage_log_pool = get_zone_params().usage_log_pool.name.c_str(); librados::Rados *rad = get_rados_handle(); int r = rad->ioctx_create(usage_log_pool, io_ctx); if (r < 0) @@ -10404,7 +10404,7 @@ int RGWRados::cls_user_get_header(const string& user_id, cls_user_header *header { string buckets_obj_id; rgw_get_buckets_obj(user_id, buckets_obj_id); - rgw_obj obj(zone.user_uid_pool, buckets_obj_id); + rgw_obj obj(get_zone_params().user_uid_pool, buckets_obj_id); rgw_rados_ref ref; rgw_bucket bucket; @@ -10430,7 +10430,7 @@ int RGWRados::cls_user_get_header_async(const string& user_id, RGWGetUserHeader_ { string buckets_obj_id; rgw_get_buckets_obj(user_id, buckets_obj_id); - rgw_obj obj(zone.user_uid_pool, buckets_obj_id); + rgw_obj obj(get_zone_params().user_uid_pool, buckets_obj_id); rgw_rados_ref ref; rgw_bucket bucket; @@ -10495,7 +10495,7 @@ int RGWRados::update_user_bucket_stats(const string& user_id, rgw_bucket& bucket string buckets_obj_id; rgw_get_buckets_obj(user_id, buckets_obj_id); - rgw_obj obj(zone.user_uid_pool, buckets_obj_id); + rgw_obj obj(get_zone_params().user_uid_pool, buckets_obj_id); int r = cls_user_update_buckets(obj, entries, false); if (r < 0) { @@ -10557,7 +10557,7 @@ int RGWRados::complete_sync_user_stats(const rgw_user& user_id) { string buckets_obj_id; rgw_get_buckets_obj(user_id, buckets_obj_id); - rgw_obj obj(zone.user_uid_pool, buckets_obj_id); + rgw_obj obj(get_zone_params().user_uid_pool, buckets_obj_id); return cls_user_complete_stats_sync(obj); } diff --git a/src/rgw/rgw_rados.h b/src/rgw/rgw_rados.h index d942a1674cd0a..d701db7918b8a 100644 --- a/src/rgw/rgw_rados.h +++ b/src/rgw/rgw_rados.h @@ -1735,6 +1735,7 @@ protected: RGWZoneGroup zonegroup; RGWZone zone_public_config; /* external zone params, e.g., entrypoints, log flags, etc. */ + RGWZoneParams zone_params; /* internal zone params, e.g., rados pools */ RGWZoneGroup period_zonegroup; RGWZone period_zone; /* external zone params, e.g., entrypoints, log flags, etc. */ @@ -1775,7 +1776,7 @@ public: */ void init_host_id() { /* uint64_t needs 16, two '-' separators and a trailing null */ - const string& zone_name = zone.get_name(); + const string& zone_name = get_zone().name; const string& zonegroup_name = zonegroup.get_name(); char charbuf[16 + zone_name.size() + zonegroup_name.size() + 2 + 1]; snprintf(charbuf, sizeof(charbuf), "%llx-%s-%s", (unsigned long long)instance_id(), zone_name.c_str(), zonegroup_name.c_str()); @@ -1787,12 +1788,11 @@ public: RGWRealm realm; RGWPeriod current_period; - RGWZoneParams zone; /* internal zone params, e.g., rados pools */ RGWRESTConn *rest_master_conn; map zone_conn_map; map zonegroup_conn_map; - RGWZoneParams& get_zone_params() { return zone; } + RGWZoneParams& get_zone_params() { return zone_params; } RGWZoneGroup& get_zonegroup() { if (has_period_zonegroup) { return period_zonegroup; @@ -2705,12 +2705,12 @@ public: uint64_t instance_id(); const string& zone_id() { - return zone.get_id(); + return get_zone_params().get_id(); } string unique_id(uint64_t unique_num) { char buf[32]; snprintf(buf, sizeof(buf), ".%llu.%llu", (unsigned long long)instance_id(), (unsigned long long)unique_num); - string s = zone.get_id() + buf; + string s = get_zone_params().get_id() + buf; return s; } @@ -2718,7 +2718,7 @@ public: char buf[16 + 2 + 1]; /* uint64_t needs 16, 2 hyphens add further 2 */ snprintf(buf, sizeof(buf), "-%llx-", (unsigned long long)instance_id()); - url_encode(string(buf) + zone.get_name(), trans_id_suffix); + url_encode(string(buf) + get_zone_params().get_name(), trans_id_suffix); } /* In order to preserve compability with Swift API, transaction ID @@ -2744,7 +2744,7 @@ public: } void get_log_pool_name(string& name) { - name = zone.log_pool.name; + name = get_zone_params().log_pool.name; } bool need_to_log_data() { diff --git a/src/rgw/rgw_rest_conn.cc b/src/rgw/rgw_rest_conn.cc index 1ab561e9cb7cc..e555ca3935e05 100644 --- a/src/rgw/rgw_rest_conn.cc +++ b/src/rgw/rgw_rest_conn.cc @@ -13,7 +13,7 @@ RGWRESTConn::RGWRESTConn(CephContext *_cct, RGWRados *store, const list& for (i = 0, iter = remote_endpoints.begin(); iter != remote_endpoints.end(); ++iter, ++i) { endpoints[i] = *iter; } - key = store->zone.system_key; + key = store->get_zone_params().system_key; zone_group = store->get_zonegroup().get_id(); } diff --git a/src/rgw/rgw_user.cc b/src/rgw/rgw_user.cc index 72e4768d616c3..f367ba2c4a29e 100644 --- a/src/rgw/rgw_user.cc +++ b/src/rgw/rgw_user.cc @@ -195,7 +195,7 @@ int rgw_store_user_info(RGWRados *store, if (old_info && old_info->swift_keys.count(siter->first) != 0) continue; - ret = rgw_put_system_obj(store, store->zone.user_swift_pool, k.id, + ret = rgw_put_system_obj(store, store->get_zone_params().user_swift_pool, k.id, link_bl.c_str(), link_bl.length(), exclusive, NULL, 0); if (ret < 0) @@ -279,7 +279,7 @@ int rgw_get_user_info_by_uid(RGWRados *store, RGWObjectCtx obj_ctx(store); string oid = uid.to_str(); - int ret = rgw_get_system_obj(store, obj_ctx, store->zone.user_uid_pool, oid, bl, objv_tracker, pmtime, pattrs, cache_info); + int ret = rgw_get_system_obj(store, obj_ctx, store->get_zone_params().user_uid_pool, oid, bl, objv_tracker, pmtime, pattrs, cache_info); if (ret < 0) { return ret; } @@ -338,7 +338,7 @@ int rgw_get_user_attrs_by_uid(RGWRados *store, RGWObjVersionTracker *objv_tracker) { RGWObjectCtx obj_ctx(store); - rgw_obj obj(store->zone.user_uid_pool, user_id.to_str()); + rgw_obj obj(store->get_zone_params().user_uid_pool, user_id.to_str()); RGWRados::SystemObject src(store, obj_ctx, obj); RGWRados::SystemObject::Read rop(&src); @@ -348,7 +348,7 @@ int rgw_get_user_attrs_by_uid(RGWRados *store, int rgw_remove_key_index(RGWRados *store, RGWAccessKey& access_key) { - rgw_obj obj(store->zone.user_keys_pool, access_key.id); + rgw_obj obj(store->get_zone_params().user_keys_pool, access_key.id); int ret = store->delete_system_obj(obj); return ret; } @@ -371,14 +371,14 @@ int rgw_remove_uid_index(RGWRados *store, rgw_user& uid) int rgw_remove_email_index(RGWRados *store, string& email) { - rgw_obj obj(store->zone.user_email_pool, email); + rgw_obj obj(store->get_zone_params().user_email_pool, email); int ret = store->delete_system_obj(obj); return ret; } int rgw_remove_swift_name_index(RGWRados *store, string& swift_name) { - rgw_obj obj(store->zone.user_swift_pool, swift_name); + rgw_obj obj(store->get_zone_params().user_swift_pool, swift_name); int ret = store->delete_system_obj(obj); return ret; } @@ -440,7 +440,7 @@ int rgw_delete_user(RGWRados *store, RGWUserInfo& info, RGWObjVersionTracker& ob } } - rgw_obj email_obj(store->zone.user_email_pool, info.user_email); + rgw_obj email_obj(store->get_zone_params().user_email_pool, info.user_email); ldout(store->ctx(), 10) << "removing email index: " << info.user_email << dendl; ret = store->delete_system_obj(email_obj); if (ret < 0 && ret != -ENOENT) { @@ -450,7 +450,7 @@ int rgw_delete_user(RGWRados *store, RGWUserInfo& info, RGWObjVersionTracker& ob string buckets_obj_id; rgw_get_buckets_obj(info.user_id, buckets_obj_id); - rgw_obj uid_bucks(store->zone.user_uid_pool, buckets_obj_id); + rgw_obj uid_bucks(store->get_zone_params().user_uid_pool, buckets_obj_id); ldout(store->ctx(), 10) << "removing user buckets index" << dendl; ret = store->delete_system_obj(uid_bucks); if (ret < 0 && ret != -ENOENT) { @@ -461,7 +461,7 @@ int rgw_delete_user(RGWRados *store, RGWUserInfo& info, RGWObjVersionTracker& ob string key; info.user_id.to_str(key); - rgw_obj uid_obj(store->zone.user_uid_pool, key); + rgw_obj uid_obj(store->get_zone_params().user_uid_pool, key); ldout(store->ctx(), 10) << "removing user index: " << info.user_id << dendl; ret = store->meta_mgr->remove_entry(user_meta_handler, key, &objv_tracker); if (ret < 0 && ret != -ENOENT && ret != -ECANCELED) { @@ -2656,7 +2656,7 @@ public: void get_pool_and_oid(RGWRados *store, const string& key, rgw_bucket& bucket, string& oid) { oid = key; - bucket = store->zone.user_uid_pool; + bucket = store->get_zone_params().user_uid_pool; } int list_keys_init(RGWRados *store, void **phandle) @@ -2681,7 +2681,7 @@ public: list unfiltered_keys; - int ret = store->list_raw_objects(store->zone.user_uid_pool, no_filter, + int ret = store->list_raw_objects(store->get_zone_params().user_uid_pool, no_filter, max, info->ctx, unfiltered_keys, truncated); if (ret < 0 && ret != -ENOENT) return ret; -- 2.39.5