From d0250e22c147e6f3478796d19a58eeb911061168 Mon Sep 17 00:00:00 2001 From: Yehuda Sadeh Date: Mon, 20 Jan 2020 17:45:02 -0800 Subject: [PATCH] rgw-admin: fix bucket sync markers for non-trivial case Signed-off-by: Yehuda Sadeh --- src/rgw/rgw_admin.cc | 18 ++++++++++++++++-- src/rgw/rgw_bucket_sync.h | 2 +- src/rgw/rgw_data_sync.cc | 2 +- 3 files changed, 18 insertions(+), 4 deletions(-) diff --git a/src/rgw/rgw_admin.cc b/src/rgw/rgw_admin.cc index 0fdb6e5976cf3..2ec0648e6b466 100644 --- a/src/rgw/rgw_admin.cc +++ b/src/rgw/rgw_admin.cc @@ -2256,7 +2256,7 @@ static int remote_bilog_markers(rgw::sal::RGWRadosStore *store, const RGWZone& s static int bucket_source_sync_status(rgw::sal::RGWRadosStore *store, const RGWZone& zone, const RGWZone& source, RGWRESTConn *conn, const RGWBucketInfo& bucket_info, - const rgw_sync_bucket_pipe& pipe, + rgw_sync_bucket_pipe pipe, int width, std::ostream& out) { out << indented{width, "source zone"} << source.id << " (" << source.name << ")" << std::endl; @@ -2280,6 +2280,9 @@ static int bucket_source_sync_status(rgw::sal::RGWRadosStore *store, const RGWZo return r; } + pipe.source.bucket = source_bucket; + pipe.dest.bucket = bucket_info.bucket; + std::vector status; r = rgw_bucket_sync_status(dpp(), store, pipe, bucket_info, &source_bucket_info, &status); if (r < 0) { @@ -7829,7 +7832,18 @@ next: if (ret < 0) { return -ret; } - RGWBucketPipeSyncStatusManager sync(store, source_zone, opt_source_bucket, bucket); + auto opt_sb = opt_source_bucket; + if (opt_sb && opt_sb->bucket_id.empty()) { + string sbid; + rgw_bucket sbuck; + int ret = init_bucket_for_sync(opt_sb->tenant, opt_sb->name, sbid, sbuck); + if (ret < 0) { + return -ret; + } + opt_sb = sbuck; + } + + RGWBucketPipeSyncStatusManager sync(store, source_zone, opt_sb, bucket); ret = sync.init(); if (ret < 0) { diff --git a/src/rgw/rgw_bucket_sync.h b/src/rgw/rgw_bucket_sync.h index f6a19261eba5c..8ded9d6237953 100644 --- a/src/rgw/rgw_bucket_sync.h +++ b/src/rgw/rgw_bucket_sync.h @@ -309,7 +309,7 @@ class RGWBucketSyncPolicyHandler { } bool bucket_is_sync_target() const { - return !sources.empty(); + return !sources.empty() || !resolved_sources.empty(); } RGWBucketSyncPolicyHandler(const RGWBucketSyncPolicyHandler *_parent, diff --git a/src/rgw/rgw_data_sync.cc b/src/rgw/rgw_data_sync.cc index adfc6babc2e4b..2ed80cd87918d 100644 --- a/src/rgw/rgw_data_sync.cc +++ b/src/rgw/rgw_data_sync.cc @@ -4707,7 +4707,7 @@ int RGWBucketPipeSyncStatusManager::init() ret = cr_mgr.run(new RGWGetBucketPeersCR(&sync_env, dest_bucket, source_zone, - std::nullopt, + source_bucket, &pipes, sync_env.sync_tracer->root_node)); if (ret < 0) { -- 2.39.5