]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
rgw: use a helper function to handle repetitive num_shards check
authorShilpa Jagannath <smanjara@redhat.com>
Fri, 11 Sep 2020 06:28:55 +0000 (11:58 +0530)
committerAdam C. Emerson <aemerson@redhat.com>
Tue, 1 Feb 2022 13:43:02 +0000 (08:43 -0500)
Signed-off-by: Shilpa Jagannath <smanjara@redhat.com>
src/rgw/rgw_admin.cc
src/rgw/rgw_bucket.cc
src/rgw/rgw_bucket_layout.h
src/rgw/rgw_rados.cc
src/rgw/services/svc_bi_rados.cc

index cbdd593c856b5111e1593ebf513247bab23a69d2..6cf155857a33256339a4c71057cee637bc921bb8 100644 (file)
@@ -2941,7 +2941,7 @@ int check_reshard_bucket_params(rgw::sal::RadosStore* store,
     return -EBUSY;
   }
 
-  int num_source_shards = ((*bucket)->get_info().layout.current_index.layout.normal.num_shards > 0 ? (*bucket)->get_info().layout.current_index.layout.normal.num_shards : 1);
+  int num_source_shards = rgw::current_num_shards((*bucket)->get_info().layout);
 
   if (num_shards <= num_source_shards && !yes_i_really_mean_it) {
     cerr << "num shards is less or equal to current shards count" << std::endl
@@ -7218,7 +7218,7 @@ next:
     }
 
     const auto& index = bucket->get_info().layout.current_index;
-    int max_shards = index.layout.normal.num_shards;
+    const int max_shards = rgw::num_shards(index);
 
     formatter->open_array_section("entries");
 
@@ -7285,8 +7285,12 @@ next:
     }
 
     const auto& index = bucket->get_info().layout.current_index;
-    int max_shards = index.layout.normal.num_shards;
+    if (index.layout.type == rgw::BucketIndexType::Indexless) {
+      cerr << "ERROR: indexless bucket has no index to purge" << std::endl;
+      return EINVAL;
+    }
 
+    const int max_shards = rgw::num_shards(index);
     for (int i = 0; i < max_shards; i++) {
       RGWRados::BucketShard bs(static_cast<rgw::sal::RadosStore*>(store)->getRados());
       int shard_id = (bucket->get_info().layout.current_index.layout.normal.num_shards > 0  ? i : -1);
@@ -7572,7 +7576,7 @@ next:
       return ret;
     }
 
-    int num_source_shards = (bucket->get_info().layout.current_index.layout.normal.num_shards > 0 ? bucket->get_info().layout.current_index.layout.normal.num_shards : 1);
+    int num_source_shards = rgw::current_num_shards(bucket->get_info().layout);
 
     RGWReshard reshard(static_cast<rgw::sal::RadosStore*>(store), dpp());
     cls_rgw_reshard_entry entry;
index 7b8beb80671211bf0561f16eced83491fc036874..eb18d310a3b657d624c3d444e97ed162d0034d70 100644 (file)
@@ -1354,7 +1354,7 @@ int RGWBucketAdminOp::set_quota(rgw::sal::Store* store, RGWBucketAdminOpState& o
 static int purge_bucket_instance(rgw::sal::Store* store, const RGWBucketInfo& bucket_info, const DoutPrefixProvider *dpp)
 {
   const auto& index = bucket_info.layout.current_index;
-  int max_shards = index.layout.normal.num_shards;
+  const int max_shards = num_shards(index);
   for (int i = 0; i < max_shards; i++) {
     RGWRados::BucketShard bs(static_cast<rgw::sal::RadosStore*>(store)->getRados());
     int ret = bs.init(bucket_info.bucket, i, index, nullptr, dpp);
index 6ba752a2d1686ccec1c5d201fd2251a5cb6877c1..b5f0bacb512bff61e795a6a27ae484525811fcb2 100644 (file)
@@ -157,4 +157,19 @@ struct BucketLayout {
 void encode(const BucketLayout& l, bufferlist& bl, uint64_t f=0);
 void decode(BucketLayout& l, bufferlist::const_iterator& bl);
 
+
+inline uint32_t num_shards(const bucket_index_normal_layout& index) {
+  return index.num_shards;
+}
+inline uint32_t num_shards(const bucket_index_layout& index) {
+  ceph_assert(index.type == BucketIndexType::Normal);
+  return num_shards(index.normal);
+}
+inline uint32_t num_shards(const bucket_index_layout_generation& index) {
+  return num_shards(index.layout);
+}
+inline uint32_t current_num_shards(const BucketLayout& layout) {
+  return num_shards(layout.current_index);
+}
+
 } // namespace rgw
index 065eff728599d677f3069dfee60622b89fe58dd2..da14b342e63d85d77583aa670c768c1114dee2aa 100644 (file)
@@ -9303,8 +9303,7 @@ int RGWRados::check_bucket_shards(const RGWBucketInfo& bucket_info,
   }
 
   bool need_resharding = false;
-  uint32_t num_source_shards =
-    (bucket_info.layout.current_index.layout.normal.num_shards > 0 ? bucket_info.layout.current_index.layout.normal.num_shards : 1);
+  uint32_t num_source_shards = rgw::current_num_shards(bucket_info.layout);
   const uint32_t max_dynamic_shards =
     uint32_t(cct->_conf.get_val<uint64_t>("rgw_max_dynamic_shards"));
 
@@ -9342,7 +9341,7 @@ int RGWRados::add_bucket_to_reshard(const DoutPrefixProvider *dpp, const RGWBuck
 {
   RGWReshard reshard(this->store, dpp);
 
-  uint32_t num_source_shards = (bucket_info.layout.current_index.layout.normal.num_shards > 0 ? bucket_info.layout.current_index.layout.normal.num_shards : 1);
+  uint32_t num_source_shards = rgw::current_num_shards(bucket_info.layout);
 
   new_num_shards = std::min(new_num_shards, get_max_bucket_shards());
   if (new_num_shards <= num_source_shards) {
index 1b043d8f59bf054ca6a91b5e6f847843153d98f0..a2f34382f5fd55870c0144115439c67a34c7ca39 100644 (file)
@@ -473,7 +473,7 @@ int RGWSI_BucketIndex_RADOS::handle_overwrite(const DoutPrefixProvider *dpp,
   bool old_sync_enabled = orig_info.datasync_flag_enabled();
 
   if (old_sync_enabled != new_sync_enabled) {
-    int shards_num = info.layout.current_index.layout.normal.num_shards? info.layout.current_index.layout.normal.num_shards : 1;
+    int shards_num = rgw::current_num_shards(info.layout);
     int shard_id = info.layout.current_index.layout.normal.num_shards? 0 : -1;
     const auto& log_layout = info.layout.logs.back();