From: Yehuda Sadeh Date: Tue, 21 Jan 2020 01:45:02 +0000 (-0800) Subject: rgw-admin: fix bucket sync markers for non-trivial case X-Git-Tag: v15.1.0~22^2~19 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=d0250e22c147e6f3478796d19a58eeb911061168;p=ceph.git rgw-admin: fix bucket sync markers for non-trivial case Signed-off-by: Yehuda Sadeh --- diff --git a/src/rgw/rgw_admin.cc b/src/rgw/rgw_admin.cc index 0fdb6e5976cf..2ec0648e6b46 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 f6a19261eba5..8ded9d623795 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 adfc6babc2e4..2ed80cd87918 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) {