From bfd3115930e80b37680fda8fd97310e39c9f1cab Mon Sep 17 00:00:00 2001 From: Casey Bodley Date: Tue, 6 Oct 2020 17:59:22 -0400 Subject: [PATCH] rgw: add sync_bucket_shard_cr() factory function allows other code to spawn this coroutine without having the class definition Signed-off-by: Casey Bodley --- src/rgw/rgw_data_sync.cc | 83 ++++++++++++++++++++++++---------------- 1 file changed, 49 insertions(+), 34 deletions(-) diff --git a/src/rgw/rgw_data_sync.cc b/src/rgw/rgw_data_sync.cc index 6c3cda0c69073..c9ae75c453f3c 100644 --- a/src/rgw/rgw_data_sync.cc +++ b/src/rgw/rgw_data_sync.cc @@ -988,37 +988,6 @@ std::ostream& operator<<(std::ostream& out, const bucket_shard_str& rhs) { return out; } -class RGWSyncBucketShardCR : public RGWCoroutine { - RGWDataSyncCtx *sc; - RGWDataSyncEnv *sync_env; - boost::intrusive_ptr lease_cr; - rgw_bucket_sync_pair_info sync_pair; - rgw_bucket_sync_pipe sync_pipe; - rgw_bucket_shard_sync_info sync_status; - RGWMetaSyncEnv meta_sync_env; - RGWObjVersionTracker objv_tracker; - ceph::real_time* progress; - - const std::string status_oid; - - RGWSyncTraceNodeRef tn; - -public: - RGWSyncBucketShardCR(RGWDataSyncCtx *_sc, - boost::intrusive_ptr lease_cr, - const rgw_bucket_sync_pair_info& _sync_pair, - const RGWSyncTraceNodeRef& _tn_parent, - ceph::real_time* progress) - : RGWCoroutine(_sc->cct), sc(_sc), sync_env(_sc->env), - lease_cr(std::move(lease_cr)), sync_pair(_sync_pair), progress(progress), - status_oid(RGWBucketPipeSyncStatusManager::inc_status_oid(sc->source_zone, sync_pair)), - tn(sync_env->sync_tracer->add_node(_tn_parent, "bucket", - SSTR(bucket_shard_str{_sync_pair.dest_bs} << "<-" << bucket_shard_str{_sync_pair.source_bs} ))) { - } - - int operate(const DoutPrefixProvider *dpp) override; -}; - struct all_bucket_info { RGWBucketInfo bucket_info; map attrs; @@ -4273,6 +4242,12 @@ std::ostream& operator<<(std::ostream& out, std::optional& bs) return out; } +static RGWCoroutine* sync_bucket_shard_cr(RGWDataSyncCtx* sc, + boost::intrusive_ptr lease, + const rgw_bucket_sync_pair_info& sync_pair, + const RGWSyncTraceNodeRef& tn, + ceph::real_time* progress); + RGWRunBucketSourcesSyncCR::RGWRunBucketSourcesSyncCR(RGWDataSyncCtx *_sc, boost::intrusive_ptr lease_cr, std::optional _target_bs, @@ -4351,8 +4326,8 @@ int RGWRunBucketSourcesSyncCR::operate(const DoutPrefixProvider *dpp) cur_progress = (progress ? &shard_progress[prealloc_stack_id()] : nullptr); - yield_spawn_window(new RGWSyncBucketShardCR(sc, lease_cr, sync_pair, tn, - cur_progress), + yield_spawn_window(sync_bucket_shard_cr(sc, lease_cr, sync_pair, tn, + cur_progress), BUCKET_SYNC_SPAWN_WINDOW, [&](uint64_t stack_id, int ret) { handle_complete_stack(stack_id); @@ -4655,6 +4630,46 @@ int RGWGetBucketPeersCR::operate(const DoutPrefixProvider *dpp) return 0; } +class RGWSyncBucketShardCR : public RGWCoroutine { + RGWDataSyncCtx *sc; + RGWDataSyncEnv *sync_env; + boost::intrusive_ptr lease_cr; + rgw_bucket_sync_pair_info sync_pair; + rgw_bucket_sync_pipe sync_pipe; + rgw_bucket_shard_sync_info sync_status; + RGWMetaSyncEnv meta_sync_env; + RGWObjVersionTracker objv_tracker; + ceph::real_time* progress; + + const std::string status_oid; + + RGWSyncTraceNodeRef tn; + +public: + RGWSyncBucketShardCR(RGWDataSyncCtx *_sc, + boost::intrusive_ptr lease_cr, + const rgw_bucket_sync_pair_info& _sync_pair, + const RGWSyncTraceNodeRef& _tn_parent, + ceph::real_time* progress) + : RGWCoroutine(_sc->cct), sc(_sc), sync_env(_sc->env), + lease_cr(std::move(lease_cr)), sync_pair(_sync_pair), progress(progress), + status_oid(RGWBucketPipeSyncStatusManager::inc_status_oid(sc->source_zone, sync_pair)), + tn(sync_env->sync_tracer->add_node(_tn_parent, "bucket", + SSTR(bucket_shard_str{_sync_pair.dest_bs} << "<-" << bucket_shard_str{_sync_pair.source_bs} ))) { + } + + int operate(const DoutPrefixProvider *dpp) override; +}; + +static RGWCoroutine* sync_bucket_shard_cr(RGWDataSyncCtx* sc, + boost::intrusive_ptr lease, + const rgw_bucket_sync_pair_info& sync_pair, + const RGWSyncTraceNodeRef& tn, + ceph::real_time* progress) +{ + return new RGWSyncBucketShardCR(sc, std::move(lease), sync_pair, tn, progress); +} + int RGWSyncBucketShardCR::operate(const DoutPrefixProvider *dpp) { reenter(this) { @@ -4742,7 +4757,7 @@ RGWCoroutine *RGWRemoteBucketManager::run_sync_cr(int num) return nullptr; } - return new RGWSyncBucketShardCR(&sc, nullptr, sync_pairs[num], sync_env->sync_tracer->root_node, nullptr); + return sync_bucket_shard_cr(&sc, nullptr, sync_pairs[num], sync_env->sync_tracer->root_node, nullptr); } int RGWBucketPipeSyncStatusManager::init(const DoutPrefixProvider *dpp) -- 2.39.5