From: Adam C. Emerson Date: Thu, 14 Apr 2022 13:42:54 +0000 (-0400) Subject: rgw: Disentangle RGWBucketPipeSyncStatusManager::run X-Git-Tag: v18.0.0~787^2~12 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=c24ef2367ca581fa6ce2be35fbfbbef2882dec99;p=ceph-ci.git rgw: Disentangle RGWBucketPipeSyncStatusManager::run Again, from RGWRemoteBucketManager. Signed-off-by: Adam C. Emerson --- diff --git a/src/rgw/rgw_data_sync.cc b/src/rgw/rgw_data_sync.cc index eb503c16a39..015a46e0f30 100644 --- a/src/rgw/rgw_data_sync.cc +++ b/src/rgw/rgw_data_sync.cc @@ -5586,12 +5586,37 @@ int RGWBucketPipeSyncStatusManager::run(const DoutPrefixProvider *dpp) { list stacks; - for (auto& mgr : source_mgrs) { - RGWCoroutinesStack *stack = new RGWCoroutinesStack(store->ctx(), &cr_mgr); - for (int i = 0; i < mgr.num_pipes(); ++i) { - stack->call(mgr.run_sync_cr(i)); + struct bk { + std::vector pairs; + uint64_t latest_gen; + }; + std::vector bookkeeping; + + for (auto& s : sources) { + auto stack = new RGWCoroutinesStack(store->ctx(), &cr_mgr); + uint64_t num_shards, latest_gen; + auto ret = remote_info(dpp, s, nullptr, &latest_gen, &num_shards); + if (!ret) { + ldpp_dout(this, 5) << "Unable to get remote info: " + << ret << dendl; + return ret; } + bookkeeping.emplace_back(); + auto& cur = bookkeeping.back(); + cur.latest_gen = latest_gen; + cur.pairs.resize(num_shards); + for (auto shard = 0u; shard < num_shards; ++shard) { + auto& pair = cur.pairs[shard]; + pair.handler = s.handler; + pair.source_bs.bucket = s.info.bucket; + pair.dest_bucket = s.dest; + pair.source_bs.shard_id = shard; + stack->call(sync_bucket_shard_cr(&s.sc, nullptr, pair, + cur.latest_gen, + sync_env.sync_tracer->root_node, + nullptr)); + } stacks.push_back(stack); }