]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
rgw: helper function to set reshard status from rgw::BucketReshardState.
authorShilpa Jagannath <smanjara@redhat.com>
Tue, 21 Jul 2020 13:10:09 +0000 (18:40 +0530)
committerCasey Bodley <cbodley@redhat.com>
Fri, 27 May 2022 19:47:31 +0000 (15:47 -0400)
Signed-off-by: Shilpa Jagannath <smanjara@redhat.com>
src/rgw/rgw_reshard.cc
src/rgw/rgw_reshard.h

index 4a98832efc1fe1465fa9799c68a05dea7774410d..951846d1e99ffcf1815093f6f2dee129072b8b02 100644 (file)
@@ -327,24 +327,17 @@ static int set_target_layout(rgw::sal::RadosStore *store,
                              RGWBucketInfo& bucket_info,
                              const DoutPrefixProvider *dpp)
 {
-  assert(!bucket_info.layout.target_index);
+  bucket_info.layout.target_index = std::nullopt; // to ensure empty target_index in case of an abruptly interrupted reshard process
+  ceph_assert(!bucket_info.layout.target_index);
   bucket_info.layout.target_index.emplace();
 
   bucket_info.layout.target_index->layout.normal.num_shards = new_num_shards;
-  
+
   //increment generation number
   bucket_info.layout.target_index->gen = bucket_info.layout.current_index.gen;
   bucket_info.layout.target_index->gen++;
 
-  bucket_info.layout.resharding = rgw::BucketReshardState::InProgress;
-
-  int ret = static_cast<rgw::sal::RadosStore*>(store)->getRados()->put_bucket_instance_info(bucket_info, true, real_time(), nullptr, dpp);
-  if (ret < 0) {
-    cerr << "ERROR: failed to store updated bucket instance info: " << cpp_strerror(-ret) << std::endl;
-    return ret;
-  }
-
-  ret = store->svc()->bi->init_index(dpp, bucket_info, *(bucket_info.layout.target_index));
+  int ret = static_cast<rgw::sal::RadosStore*>(store)->svc()->bi->init_index(dpp, bucket_info, *(bucket_info.layout.target_index));
   if (ret < 0) {
       return ret;
   }
@@ -354,6 +347,11 @@ static int set_target_layout(rgw::sal::RadosStore *store,
 
 int RGWBucketReshard::set_target_layout(int new_num_shards, const DoutPrefixProvider *dpp)
 {
+  int ret = RGWBucketReshard::set_reshard_status(rgw::BucketReshardState::InProgress, dpp);
+  if (ret < 0) {
+    cerr << "ERROR: failed to store updated bucket instance info: " << cpp_strerror(-ret) << std::endl;
+    return ret;
+  }
   return ::set_target_layout(store, new_num_shards, bucket_info, dpp);
 }
 
@@ -661,8 +659,7 @@ int RGWBucketReshard::do_reshard(int num_shards,
   //overwrite current_index for the next reshard process
   bucket_info.layout.current_index = *bucket_info.layout.target_index;
   bucket_info.layout.target_index = std::nullopt; // target_layout doesn't need to exist after reshard
-  bucket_info.layout.resharding = rgw::BucketReshardState::None;
-  ret = store->getRados()->put_bucket_instance_info(bucket_info, false, real_time(), nullptr, dpp);
+  ret = RGWBucketReshard::set_reshard_status(rgw::BucketReshardState::None, dpp);
   if (ret < 0) {
     ldpp_dout(dpp, -1) << "ERROR: failed writing bucket instance info: " << dendl;
       return ret;
@@ -677,6 +674,15 @@ int RGWBucketReshard::get_status(const DoutPrefixProvider *dpp, list<cls_rgw_buc
   return store->svc()->bi_rados->get_reshard_status(dpp, bucket_info, status);
 }
 
+int RGWBucketReshard::set_reshard_status(rgw::BucketReshardState s, const DoutPrefixProvider* dpp) {
+    bucket_info.layout.resharding = s;
+    int ret = store->getRados()->put_bucket_instance_info(bucket_info, false, real_time(), nullptr, dpp);
+    if (ret < 0) {
+      ldout(store->ctx(), 0) << "ERROR: failed to write bucket info, ret=" << ret << dendl;
+      return ret;
+    }
+    return 0;
+}
 
 int RGWBucketReshard::execute(int num_shards, int max_op_entries,
                               const DoutPrefixProvider *dpp,
@@ -757,11 +763,12 @@ error_out:
       return ret;
   }
 
-  ret = store->svc()->bi->init_index(dpp, bucket_info, bucket_info.layout.current_index);
+  ret = RGWBucketReshard::set_reshard_status(rgw::BucketReshardState::None, dpp);
   if (ret < 0) {
-      return ret;
+    cerr << "ERROR: failed to store updated bucket instance info: " << cpp_strerror(-ret) << std::endl;
+    return ret;
   }
-  
+
   return ret;
 } // execute
 
index ed1325d5adf5f7674dc9cb2899bdb5f2a27945e6..29b6b30e6b79edb0a52d407e80a79059220208d5 100644 (file)
@@ -86,6 +86,8 @@ private:
   static const std::initializer_list<uint16_t> reshard_primes;
 
   int set_target_layout(int new_num_shards, const DoutPrefixProvider *dpp);
+  int set_reshard_status(rgw::BucketReshardState s, const DoutPrefixProvider* dpp);
+  
   int do_reshard(int num_shards,
                 int max_entries,
                  bool verbose,