From 373a2e31db52726df44251040cff2ff00c24747d Mon Sep 17 00:00:00 2001 From: Casey Bodley Date: Fri, 18 Dec 2020 10:22:23 -0500 Subject: [PATCH] rgw: clean up uses of BucketShard::init() without info the rgw_bucket overload of BucketShard::init() has to look up the bucket info. use the RGWBucketInfo overload when we have one Signed-off-by: Casey Bodley --- src/rgw/rgw_admin.cc | 7 +++--- src/rgw/rgw_bucket.cc | 2 +- src/rgw/rgw_rados.cc | 48 +++++++++------------------------------- src/rgw/rgw_rados.h | 9 ++++---- src/rgw/rgw_reshard.cc | 3 +-- src/rgw/rgw_sal_rados.cc | 2 +- 6 files changed, 20 insertions(+), 51 deletions(-) diff --git a/src/rgw/rgw_admin.cc b/src/rgw/rgw_admin.cc index 0b138f336dee9..af75f9c0a182f 100644 --- a/src/rgw/rgw_admin.cc +++ b/src/rgw/rgw_admin.cc @@ -6820,11 +6820,11 @@ next: int i = (specified_shard_id ? shard_id : 0); for (; i < max_shards; i++) { RGWRados::BucketShard bs(static_cast(store)->getRados()); - int ret = bs.init(bucket->get_key(), i, index, nullptr /* no RGWBucketInfo */, dpp()); + int ret = bs.init(dpp(), bucket->get_info(), index, i); marker.clear(); if (ret < 0) { - cerr << "ERROR: bs.init(bucket=" << bucket << ", shard=" << shard_id << "): " << cpp_strerror(-ret) << std::endl; + cerr << "ERROR: bs.init(bucket=" << bucket << ", shard=" << i << "): " << cpp_strerror(-ret) << std::endl; return -ret; } @@ -6887,8 +6887,7 @@ next: const int max_shards = rgw::num_shards(index); for (int i = 0; i < max_shards; i++) { RGWRados::BucketShard bs(static_cast(store)->getRados()); - int shard_id = (bucket->get_info().layout.current_index.layout.normal.num_shards > 0 ? i : -1); - int ret = bs.init(bucket->get_key(), shard_id, index, nullptr /* no RGWBucketInfo */, dpp()); + int ret = bs.init(dpp(), bucket->get_info(), index, i); if (ret < 0) { cerr << "ERROR: bs.init(bucket=" << bucket << ", shard=" << i << "): " << cpp_strerror(-ret) << std::endl; return -ret; diff --git a/src/rgw/rgw_bucket.cc b/src/rgw/rgw_bucket.cc index 2d35f80bf5aa1..4b87e0eabcaf2 100644 --- a/src/rgw/rgw_bucket.cc +++ b/src/rgw/rgw_bucket.cc @@ -1335,7 +1335,7 @@ static int purge_bucket_instance(rgw::sal::Store* store, const RGWBucketInfo& bu const int max_shards = num_shards(index); for (int i = 0; i < max_shards; i++) { RGWRados::BucketShard bs(static_cast(store)->getRados()); - int ret = bs.init(bucket_info.bucket, i, index, nullptr, dpp); + int ret = bs.init(dpp, bucket_info, index, i); if (ret < 0) { cerr << "ERROR: bs.init(bucket=" << bucket_info.bucket << ", shard=" << i << "): " << cpp_strerror(-ret) << std::endl; diff --git a/src/rgw/rgw_rados.cc b/src/rgw/rgw_rados.cc index f9ef93d863ed6..5f75b7731f176 100644 --- a/src/rgw/rgw_rados.cc +++ b/src/rgw/rgw_rados.cc @@ -2682,7 +2682,7 @@ int RGWRados::BucketShard::init(const rgw_bucket& _bucket, RGWBucketInfo bucket_info; RGWBucketInfo* bucket_info_p = bucket_info_out ? bucket_info_out : &bucket_info; - + int ret = store->get_bucket_instance_info(obj_ctx, bucket, *bucket_info_p, NULL, NULL, null_yield, dpp); if (ret < 0) { return ret; @@ -2700,39 +2700,6 @@ int RGWRados::BucketShard::init(const rgw_bucket& _bucket, return 0; } -int RGWRados::BucketShard::init(const rgw_bucket& _bucket, - int sid, std::optional idx_layout, - RGWBucketInfo* bucket_info_out, - const DoutPrefixProvider *dpp) -{ - bucket = _bucket; - shard_id = sid; - - auto obj_ctx = store->svc.sysobj->init_obj_ctx(); - - - RGWBucketInfo bucket_info; - RGWBucketInfo* bucket_info_p = - bucket_info_out ? bucket_info_out : &bucket_info; - int ret = store->get_bucket_instance_info(obj_ctx, bucket, *bucket_info_p, NULL, NULL, null_yield, dpp); - if (ret < 0) { - return ret; - } - - string oid; - - ret = store->svc.bi_rados->open_bucket_index_shard(dpp, *bucket_info_p, shard_id, idx_layout->layout.normal.num_shards, - idx_layout->gen, &bucket_obj); - - if (ret < 0) { - ldpp_dout(dpp, 0) << "ERROR: open_bucket_index_shard() returned ret=" << ret << dendl; - return ret; - } - ldpp_dout(dpp, 20) << " bucket index oid: " << bucket_obj.get_raw_obj() << dendl; - - return 0; -} - int RGWRados::BucketShard::init(const DoutPrefixProvider *dpp, const RGWBucketInfo& bucket_info, const rgw_obj& obj) { @@ -2751,12 +2718,17 @@ int RGWRados::BucketShard::init(const DoutPrefixProvider *dpp, const RGWBucketIn return 0; } -int RGWRados::BucketShard::init(const DoutPrefixProvider *dpp, const RGWBucketInfo& bucket_info, const rgw::bucket_index_layout_generation& current_layout, int sid) +int RGWRados::BucketShard::init(const DoutPrefixProvider *dpp, + const RGWBucketInfo& bucket_info, + const rgw::bucket_index_layout_generation& index, + int sid) { bucket = bucket_info.bucket; shard_id = sid; - int ret = store->svc.bi_rados->open_bucket_index_shard(dpp, bucket_info, shard_id, current_layout.layout.normal.num_shards, current_layout.gen, &bucket_obj); + int ret = store->svc.bi_rados->open_bucket_index_shard(dpp, bucket_info, shard_id, + num_shards(index), index.gen, + &bucket_obj); if (ret < 0) { ldpp_dout(dpp, 0) << "ERROR: open_bucket_index_shard() returned ret=" << ret << dendl; return ret; @@ -8183,9 +8155,9 @@ int RGWRados::bi_list(const DoutPrefixProvider *dpp, list *entries, bool *is_truncated) { BucketShard bs(this); - int ret = bs.init(bucket_info.bucket, shard_id, + int ret = bs.init(dpp, bucket_info, bucket_info.layout.current_index, - nullptr /* no RGWBucketInfo */, dpp); + shard_id); if (ret < 0) { ldpp_dout(dpp, 5) << "bs.init() returned ret=" << ret << dendl; return ret; diff --git a/src/rgw/rgw_rados.h b/src/rgw/rgw_rados.h index 7f03c0b339a2e..532ea398128be 100644 --- a/src/rgw/rgw_rados.h +++ b/src/rgw/rgw_rados.h @@ -688,12 +688,11 @@ public: explicit BucketShard(RGWRados *_store) : store(_store), shard_id(-1) {} int init(const rgw_bucket& _bucket, const rgw_obj& obj, - RGWBucketInfo* out, const DoutPrefixProvider *dpp); - int init(const rgw_bucket& _bucket, int sid, - std::optional current_layout, - RGWBucketInfo* out, const DoutPrefixProvider *dpp); + RGWBucketInfo* out, const DoutPrefixProvider *dpp); int init(const DoutPrefixProvider *dpp, const RGWBucketInfo& bucket_info, const rgw_obj& obj); - int init(const DoutPrefixProvider *dpp, const RGWBucketInfo& bucket_info, const rgw::bucket_index_layout_generation& idx_layout, int sid); + int init(const DoutPrefixProvider *dpp, + const RGWBucketInfo& bucket_info, + const rgw::bucket_index_layout_generation& index, int sid); }; class Object { diff --git a/src/rgw/rgw_reshard.cc b/src/rgw/rgw_reshard.cc index 3a12f6a864c5c..92a2ae9872d6b 100644 --- a/src/rgw/rgw_reshard.cc +++ b/src/rgw/rgw_reshard.cc @@ -111,8 +111,7 @@ public: { num_shard = (bucket_info.layout.target_index->layout.normal.num_shards > 0 ? _num_shard : -1); - bs.init(bucket_info.bucket, num_shard, bucket_info.layout.target_index, - nullptr /* no RGWBucketInfo */, dpp); + bs.init(dpp, bucket_info, *bucket_info.layout.target_index, num_shard); max_aio_completions = store->ctx()->_conf.get_val("rgw_reshard_max_aio"); diff --git a/src/rgw/rgw_sal_rados.cc b/src/rgw/rgw_sal_rados.cc index 4b176e25f2478..0a9c81af4856f 100644 --- a/src/rgw/rgw_sal_rados.cc +++ b/src/rgw/rgw_sal_rados.cc @@ -684,7 +684,7 @@ int RadosBucket::purge_instance(const DoutPrefixProvider* dpp) for (int i = 0; i < max_shards; i++) { RGWRados::BucketShard bs(store->getRados()); int shard_id = (info.layout.current_index.layout.normal.num_shards > 0 ? i : -1); - int ret = bs.init(info.bucket, shard_id, info.layout.current_index, nullptr, dpp); + int ret = bs.init(dpp, info, info.layout.current_index, shard_id); if (ret < 0) { cerr << "ERROR: bs.init(bucket=" << info.bucket << ", shard=" << shard_id << "): " << cpp_strerror(-ret) << std::endl; -- 2.39.5