]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
rgw: remove destination shard id from rgw_bucket_sync_pair_info
authorCasey Bodley <cbodley@redhat.com>
Wed, 9 Jun 2021 16:26:54 +0000 (12:26 -0400)
committerAdam C. Emerson <aemerson@redhat.com>
Mon, 13 Sep 2021 16:27:51 +0000 (12:27 -0400)
the sync_pair is used as input to RGWBucketPipeSyncStatusManager::status_oid()
to generate the per-shard sync status object names

this sync status tracks incremental bucket sync, which reads changes
from a source bucket's bilog shard, and copies objects from the remote
source bucket to the local destination bucket

this doesn't require sync to know anything about the destination bucket
shards, so rgw_bucket_sync_pair_info and status_oid() now only track the
the destination's rgw_bucket instead of rgw_bucket_shard

Signed-off-by: Casey Bodley <cbodley@redhat.com>
src/rgw/rgw_data_sync.cc
src/rgw/rgw_data_sync.h

index 6b05a24e98457074183aed19a2eecf06f55ee2d7..84e9bf0752cda8349c3fdd1d10ed7e632d5fc6ca 100644 (file)
@@ -2400,7 +2400,7 @@ public:
           }
 
           if (!dest_bucket_perms.verify_bucket_permission(RGW_PERM_WRITE)) {
-            ldout(cct, 0) << "ERROR: " << __func__ << ": permission check failed: user not allowed to write into bucket (bucket=" << sync_pipe.info.dest_bs.bucket.get_key() << ")" << dendl;
+            ldout(cct, 0) << "ERROR: " << __func__ << ": permission check failed: user not allowed to write into bucket (bucket=" << sync_pipe.info.dest_bucket.get_key() << ")" << dendl;
             return -EPERM;
           }
 
@@ -2780,7 +2780,7 @@ public:
         const bool stopped = status.state == rgw_bucket_shard_sync_info::StateStopped;
         bool write_status = false;
 
-        auto max_marker = marker_mgr.get(sync_pair.dest_bs.shard_id, "");
+        auto max_marker = marker_mgr.get(sync_pair.source_bs.shard_id, "");
 
         if (info.syncstopped) {
           if (stopped && !sync_env->sync_module->should_full_sync()) {
@@ -2841,15 +2841,9 @@ RGWRemoteBucketManager::RGWRemoteBucketManager(const DoutPrefixProvider *_dpp,
     auto& sync_pair = sync_pairs[i];
 
     sync_pair.source_bs.bucket = source_bucket_info.bucket;
-    sync_pair.dest_bs.bucket = dest_bucket;
+    sync_pair.dest_bucket = dest_bucket;
 
     sync_pair.source_bs.shard_id = (source_bucket_info.layout.current_index.layout.normal.num_shards > 0 ? cur_shard : -1);
-
-    if (dest_bucket == source_bucket_info.bucket) {
-      sync_pair.dest_bs.shard_id = sync_pair.source_bs.shard_id;
-    } else {
-      sync_pair.dest_bs.shard_id = -1;
-    }
   }
 
   sc.init(sync_env, conn, source_zone);
@@ -2996,7 +2990,7 @@ class CheckAllBucketShardStatusIsIncremental : public RGWShardCollectCR {
     if (shard >= num_shards || status < 0 || !*result) {
       return false;
     }
-    sync_pair.dest_bs.shard_id = sync_pair.source_bs.shard_id = shard++;
+    sync_pair.source_bs.shard_id = shard++;
     spawn(new CheckBucketShardStatusIsIncremental(sc, sync_pair, result), false);
     return true;
   }
@@ -3099,7 +3093,7 @@ class InitBucketShardStatusCollectCR : public RGWShardCollectCR {
     if (shard >= num_shards || status < 0) { // stop spawning on any errors
       return false;
     }
-    sync_pair.dest_bs.shard_id = sync_pair.source_bs.shard_id = shard++;
+    sync_pair.source_bs.shard_id = shard++;
     spawn(new InitBucketShardStatusCR(sc, sync_pair, info, marker_mgr), false);
     return true;
   }
@@ -3135,7 +3129,7 @@ public:
 
   int operate(const DoutPrefixProvider *dpp) override {
     reenter(this) {
-      yield call(new RGWReadRemoteBucketIndexLogInfoCR(sc, sync_pair.dest_bs.bucket, &info));
+      yield call(new RGWReadRemoteBucketIndexLogInfoCR(sc, sync_pair.dest_bucket, &info));
       if (retcode < 0) {
         lderr(cct) << "failed to read remote bilog info: "
             << cpp_strerror(retcode) << dendl;
@@ -3845,7 +3839,7 @@ public:
     data_sync_module = sync_env->sync_module->get_data_handler();
     
     zones_trace = _zones_trace;
-    zones_trace.insert(sync_env->svc->zone->get_zone().id, _sync_pipe.info.dest_bs.get_key());
+    zones_trace.insert(sync_env->svc->zone->get_zone().id, _sync_pipe.info.dest_bucket.get_key());
   }
 
   int operate(const DoutPrefixProvider *dpp) override {
@@ -4017,7 +4011,7 @@ public:
                                          SSTR(bucket_shard_str{bs}))),
       marker_tracker(sc, status_obj, sync_status, tn, objv_tracker)
   {
-    zones_trace.insert(sc->source_zone.id, sync_pipe.info.dest_bs.bucket.get_key());
+    zones_trace.insert(sc->source_zone.id, sync_pipe.info.dest_bucket.get_key());
     prefix_handler.set_rules(sync_pipe.get_rules());
   }
 
@@ -4268,7 +4262,7 @@ public:
         << bucket_shard_str{bs};
     set_status("init");
     rules = sync_pipe.get_rules();
-    target_location_key = sync_pipe.info.dest_bs.bucket.get_key();
+    target_location_key = sync_pipe.info.dest_bucket.get_key();
   }
 
   bool check_key_handled(const rgw_obj_key& key) {
@@ -4724,7 +4718,7 @@ int RGWRunBucketSourcesSyncCR::operate(const DoutPrefixProvider *dpp)
         } else {
           sync_pair.source_bs.bucket = siter->source.get_bucket();
         }
-        sync_pair.dest_bs.bucket = siter->target.get_bucket();
+        sync_pair.dest_bucket = siter->target.get_bucket();
 
         sync_pair.handler = siter->handler;
 
@@ -4745,11 +4739,6 @@ int RGWRunBucketSourcesSyncCR::operate(const DoutPrefixProvider *dpp)
          * this affects the crafted status oid
          */
         sync_pair.source_bs.shard_id = (source_num_shards > 0 ? cur_shard : -1);
-        if (source_num_shards == target_num_shards) {
-          sync_pair.dest_bs.shard_id = sync_pair.source_bs.shard_id;
-        } else {
-          sync_pair.dest_bs.shard_id = -1;
-        }
 
         ldpp_dout(dpp, 20) << __func__ << "(): sync_pair=" << sync_pair << dendl;
 
@@ -5092,7 +5081,7 @@ public:
       bucket_status_obj(sc->env->svc->zone->get_zone_params().log_pool,
                  RGWBucketPipeSyncStatusManager::full_status_oid(sc->source_zone,
                                                                  sync_pair.source_bs.bucket,
-                                                                 sync_pair.dest_bs.bucket)),
+                                                                 sync_pair.dest_bucket)),
       tn(tn) {
   }
 
@@ -5162,9 +5151,9 @@ public:
       status_obj(env->svc->zone->get_zone_params().log_pool,
                  RGWBucketPipeSyncStatusManager::full_status_oid(sc->source_zone,
                                                                  sync_pair.source_bs.bucket,
-                                                                 sync_pair.dest_bs.bucket)),
+                                                                 sync_pair.dest_bucket)),
       tn(env->sync_tracer->add_node(_tn_parent, "bucket",
-                                    SSTR(bucket_shard_str{_sync_pair.dest_bs} << "<-" << bucket_shard_str{_sync_pair.source_bs} ))) {
+                                    SSTR(bucket_str{_sync_pair.dest_bucket} << "<-" << bucket_shard_str{_sync_pair.source_bs} ))) {
   }
 
   int operate(const DoutPrefixProvider *dpp) override;
@@ -5192,7 +5181,7 @@ int RGWSyncBucketCR::operate(const DoutPrefixProvider *dpp)
       return set_cr_error(retcode);
     }
 
-    yield call(new RGWSyncGetBucketInfoCR(env, sync_pair.dest_bs.bucket, &sync_pipe.dest_bucket_info,
+    yield call(new RGWSyncGetBucketInfoCR(env, sync_pair.dest_bucket, &sync_pipe.dest_bucket_info,
                                           &sync_pipe.dest_bucket_attrs, tn));
     if (retcode < 0) {
       tn->log(0, SSTR("ERROR: failed to retrieve bucket info for bucket=" << bucket_str{sync_pair.source_bs.bucket}));
@@ -5491,10 +5480,10 @@ string RGWBucketPipeSyncStatusManager::full_status_oid(const rgw_zone_id& source
 string RGWBucketPipeSyncStatusManager::inc_status_oid(const rgw_zone_id& source_zone,
                                                       const rgw_bucket_sync_pair_info& sync_pair)
 {
-  if (sync_pair.source_bs == sync_pair.dest_bs) {
-    return bucket_status_oid_prefix + "." + source_zone.id + ":" + sync_pair.dest_bs.get_key();
+  if (sync_pair.source_bs.bucket == sync_pair.dest_bucket) {
+    return bucket_status_oid_prefix + "." + source_zone.id + ":" + sync_pair.source_bs.get_key();
   } else {
-    return bucket_status_oid_prefix + "." + source_zone.id + ":" + sync_pair.dest_bs.get_key() + ":" + sync_pair.source_bs.get_key();
+    return bucket_status_oid_prefix + "." + source_zone.id + ":" + sync_pair.dest_bucket.get_key() + ":" + sync_pair.source_bs.get_key();
   }
 }
 
@@ -5543,15 +5532,7 @@ class RGWCollectBucketSyncStatusCR : public RGWShardCollectCR {
   rgw::sal::RadosStore* const store;
   RGWDataSyncCtx *const sc;
   RGWDataSyncEnv *const env;
-  RGWBucketInfo source_bucket_info;
-  RGWBucketInfo dest_bucket_info;
-  rgw_bucket_shard source_bs;
-  rgw_bucket_shard dest_bs;
-
   rgw_bucket_sync_pair_info sync_pair;
-
-  bool shard_to_shard_sync;
-
   using Vector = std::vector<rgw_bucket_shard_sync_info>;
   Vector::iterator i, end;
 
@@ -5572,34 +5553,19 @@ class RGWCollectBucketSyncStatusCR : public RGWShardCollectCR {
                                Vector *status)
     : RGWShardCollectCR(sc->cct, max_concurrent_shards),
       store(store), sc(sc), env(sc->env),
-      source_bucket_info(source_bucket_info),
-      dest_bucket_info(dest_bucket_info),
       i(status->begin()), end(status->end())
   {
-    shard_to_shard_sync = (source_bucket_info.layout.current_index.layout.normal.num_shards == dest_bucket_info.layout.current_index.layout.normal.num_shards);
-
-    source_bs = rgw_bucket_shard(source_bucket_info.bucket, source_bucket_info.layout.current_index.layout.normal.num_shards > 0 ? 0 : -1);
-    dest_bs = rgw_bucket_shard(dest_bucket_info.bucket, dest_bucket_info.layout.current_index.layout.normal.num_shards > 0 ? 0 : -1);
-
-    status->clear();
-    status->resize(std::max<size_t>(1, source_bucket_info.layout.current_index.layout.normal.num_shards));
-
-    i = status->begin();
-    end = status->end();
+    sync_pair.source_bs = rgw_bucket_shard(source_bucket_info.bucket, source_bucket_info.layout.current_index.layout.normal.num_shards > 0 ? 0 : -1);
+    sync_pair.dest_bucket = dest_bucket_info.bucket;
   }
 
   bool spawn_next() override {
     if (i == end) {
       return false;
     }
-    sync_pair.source_bs = source_bs;
-    sync_pair.dest_bs = dest_bs;
     spawn(new RGWReadBucketPipeSyncStatusCoroutine(sc, sync_pair, &*i, nullptr), false);
     ++i;
-    ++source_bs.shard_id;
-    if (shard_to_shard_sync) {
-      dest_bs.shard_id = source_bs.shard_id;
-    }
+    ++sync_pair.source_bs.shard_id;
     return true;
   }
 };
index a440635ec1aefc15961f2fc90a3859fa3d2d6264..538a692d5b2336df5b3a163e6bff63031e9b579c 100644 (file)
@@ -51,19 +51,14 @@ struct rgw_sync_bucket_pipe;
 struct rgw_bucket_sync_pair_info {
   RGWBucketSyncFlowManager::pipe_handler handler; /* responsible for sync filters */
   rgw_bucket_shard source_bs;
-  rgw_bucket_shard dest_bs;
+  rgw_bucket dest_bucket;
 };
 
 inline std::ostream& operator<<(std::ostream& out, const rgw_bucket_sync_pair_info& p) {
-  if (p.source_bs.bucket == p.dest_bs.bucket) {
+  if (p.source_bs.bucket == p.dest_bucket) {
     return out << p.source_bs;
   }
-
-  out << p.source_bs;
-
-  out << "->" << p.dest_bs.bucket;
-
-  return out;
+  return out << p.source_bs << "->" << p.dest_bucket;
 }
 
 struct rgw_bucket_sync_pipe {