rbd-mirror: peer_ping should send the local fsid to the remote

It was previously incorrectly sending the remote cluster's
fsid to the remote cluster.

Signed-off-by: Jason Dillaman <dillaman@redhat.com>
This commit is contained in:
Jason Dillaman 2019-12-02 15:45:04 -05:00
parent 67c96be4f6
commit 4f652b5cce
6 changed files with 36 additions and 32 deletions

View File

@ -132,7 +132,7 @@ public:
EXPECT_EQ(0, m_local_ioctx.create(RBD_MIRRORING, false));
m_local_status_updater = rbd::mirror::MirrorStatusUpdater<>::create(
m_local_ioctx, m_threads.get(), "");
m_local_ioctx, m_threads.get(), "", "");
C_SaferCond status_updater_ctx;
m_local_status_updater->init(&status_updater_ctx);
EXPECT_EQ(0, status_updater_ctx.wait());

View File

@ -247,7 +247,7 @@ public:
TEST_F(TestMockMirrorStatusUpdater, InitShutDown) {
MockMirrorStatusUpdater mock_mirror_status_updater(m_local_io_ctx,
m_mock_threads, "");
m_mock_threads, "", "");
MockMirrorStatusWatcher* mock_mirror_status_watcher =
new MockMirrorStatusWatcher();
@ -261,7 +261,7 @@ TEST_F(TestMockMirrorStatusUpdater, InitShutDown) {
TEST_F(TestMockMirrorStatusUpdater, InitStatusWatcherError) {
MockMirrorStatusUpdater mock_mirror_status_updater(m_local_io_ctx,
m_mock_threads, "");
m_mock_threads, "", "");
MockMirrorStatusWatcher* mock_mirror_status_watcher =
new MockMirrorStatusWatcher();
@ -278,7 +278,7 @@ TEST_F(TestMockMirrorStatusUpdater, InitStatusWatcherError) {
TEST_F(TestMockMirrorStatusUpdater, ShutDownStatusWatcherError) {
MockMirrorStatusUpdater mock_mirror_status_updater(m_local_io_ctx,
m_mock_threads, "");
m_mock_threads, "", "");
MockMirrorStatusWatcher* mock_mirror_status_watcher =
new MockMirrorStatusWatcher();
@ -297,7 +297,7 @@ TEST_F(TestMockMirrorStatusUpdater, ShutDownStatusWatcherError) {
TEST_F(TestMockMirrorStatusUpdater, SmallBatch) {
MockMirrorStatusUpdater mock_mirror_status_updater(m_local_io_ctx,
m_mock_threads, "");
m_mock_threads, "", "");
MockMirrorStatusWatcher* mock_mirror_status_watcher =
new MockMirrorStatusWatcher();
@ -328,7 +328,7 @@ TEST_F(TestMockMirrorStatusUpdater, SmallBatch) {
TEST_F(TestMockMirrorStatusUpdater, LargeBatch) {
MockMirrorStatusUpdater mock_mirror_status_updater(m_local_io_ctx,
m_mock_threads, "");
m_mock_threads, "", "");
MockMirrorStatusWatcher* mock_mirror_status_watcher =
new MockMirrorStatusWatcher();
@ -369,7 +369,7 @@ TEST_F(TestMockMirrorStatusUpdater, LargeBatch) {
TEST_F(TestMockMirrorStatusUpdater, OverwriteStatus) {
MockMirrorStatusUpdater mock_mirror_status_updater(m_local_io_ctx,
m_mock_threads, "");
m_mock_threads, "", "");
MockMirrorStatusWatcher* mock_mirror_status_watcher =
new MockMirrorStatusWatcher();
@ -399,7 +399,7 @@ TEST_F(TestMockMirrorStatusUpdater, OverwriteStatus) {
TEST_F(TestMockMirrorStatusUpdater, OverwriteStatusInFlight) {
MockMirrorStatusUpdater mock_mirror_status_updater(m_local_io_ctx,
m_mock_threads, "");
m_mock_threads, "", "");
MockMirrorStatusWatcher* mock_mirror_status_watcher =
new MockMirrorStatusWatcher();
@ -440,7 +440,7 @@ TEST_F(TestMockMirrorStatusUpdater, OverwriteStatusInFlight) {
TEST_F(TestMockMirrorStatusUpdater, ImmediateUpdate) {
MockMirrorStatusUpdater mock_mirror_status_updater(m_local_io_ctx,
m_mock_threads, "");
m_mock_threads, "", "");
MockMirrorStatusWatcher* mock_mirror_status_watcher =
new MockMirrorStatusWatcher();
@ -461,7 +461,7 @@ TEST_F(TestMockMirrorStatusUpdater, ImmediateUpdate) {
TEST_F(TestMockMirrorStatusUpdater, RemoveIdleStatus) {
MockMirrorStatusUpdater mock_mirror_status_updater(m_local_io_ctx,
m_mock_threads, "");
m_mock_threads, "", "");
MockMirrorStatusWatcher* mock_mirror_status_watcher =
new MockMirrorStatusWatcher();
@ -484,7 +484,7 @@ TEST_F(TestMockMirrorStatusUpdater, RemoveIdleStatus) {
TEST_F(TestMockMirrorStatusUpdater, RemoveInFlightStatus) {
MockMirrorStatusUpdater mock_mirror_status_updater(m_local_io_ctx,
m_mock_threads, "");
m_mock_threads, "", "");
MockMirrorStatusWatcher* mock_mirror_status_watcher =
new MockMirrorStatusWatcher();
@ -518,7 +518,7 @@ TEST_F(TestMockMirrorStatusUpdater, RemoveInFlightStatus) {
TEST_F(TestMockMirrorStatusUpdater, ShutDownWhileUpdating) {
MockMirrorStatusUpdater mock_mirror_status_updater(m_local_io_ctx,
m_mock_threads, "");
m_mock_threads, "", "");
MockMirrorStatusWatcher* mock_mirror_status_watcher =
new MockMirrorStatusWatcher();
@ -557,7 +557,8 @@ TEST_F(TestMockMirrorStatusUpdater, MirrorPeerSitePing) {
ASSERT_EQ(0, _rados->cluster_fsid(&fsid));
MockMirrorStatusUpdater mock_mirror_status_updater(m_local_io_ctx,
m_mock_threads, "siteA");
m_mock_threads, "siteA",
fsid);
MockMirrorStatusWatcher* mock_mirror_status_watcher =
new MockMirrorStatusWatcher();

View File

@ -176,7 +176,8 @@ struct MirrorStatusUpdater<librbd::MockTestImageCtx> {
static MirrorStatusUpdater *create(librados::IoCtx &io_ctx,
Threads<librbd::MockTestImageCtx> *threads,
const std::string& site_name) {
const std::string& site_name,
const std::string& fsid) {
ceph_assert(s_instance[site_name] != nullptr);
return s_instance[site_name];
}

View File

@ -31,11 +31,12 @@ using librbd::util::create_rados_callback;
template <typename I>
MirrorStatusUpdater<I>::MirrorStatusUpdater(
librados::IoCtx& io_ctx, Threads<I> *threads,
const std::string& site_name)
const std::string& site_name, const std::string& fsid)
: m_io_ctx(io_ctx), m_threads(threads), m_site_name(site_name),
m_lock(ceph::make_mutex("rbd::mirror::MirrorStatusUpdater " +
stringify(m_io_ctx.get_id()))) {
m_fsid(fsid), m_lock(ceph::make_mutex("rbd::mirror::MirrorStatusUpdater " +
stringify(m_io_ctx.get_id()))) {
dout(10) << "site_name=" << site_name << ", "
<< "fsid=" << fsid << ", "
<< "pool_id=" << m_io_ctx.get_id() << dendl;
}
@ -49,16 +50,6 @@ template <typename I>
void MirrorStatusUpdater<I>::init(Context* on_finish) {
dout(10) << dendl;
if (!m_site_name.empty()) {
librados::Rados rados(m_io_ctx);
int r = rados.cluster_fsid(&m_fsid);
if (r < 0) {
derr << "failed to retrieve fsid: " << cpp_strerror(r) << dendl;
m_threads->work_queue->queue(on_finish, r);
return;
}
}
ceph_assert(!m_initialized);
m_initialized = true;

View File

@ -27,12 +27,13 @@ public:
static MirrorStatusUpdater* create(librados::IoCtx& io_ctx,
Threads<ImageCtxT> *threads,
const std::string& site_name) {
return new MirrorStatusUpdater(io_ctx, threads, site_name);
const std::string& site_name,
const std::string& fsid) {
return new MirrorStatusUpdater(io_ctx, threads, site_name, fsid);
}
MirrorStatusUpdater(librados::IoCtx& io_ctx, Threads<ImageCtxT> *threads,
const std::string& site_name);
const std::string& site_name, const std::string& fsid);
~MirrorStatusUpdater();
void init(Context* on_finish);

View File

@ -262,7 +262,7 @@ void NamespaceReplayer<I>::init_local_status_updater() {
ceph_assert(!m_local_status_updater);
m_local_status_updater.reset(MirrorStatusUpdater<I>::create(
m_local_io_ctx, m_threads, ""));
m_local_io_ctx, m_threads, "", ""));
auto ctx = create_context_callback<
NamespaceReplayer<I>,
&NamespaceReplayer<I>::handle_init_local_status_updater>(this);
@ -297,8 +297,18 @@ void NamespaceReplayer<I>::init_remote_status_updater() {
ceph_assert(ceph_mutex_is_locked(m_lock));
ceph_assert(!m_remote_status_updater);
librados::Rados rados(m_local_io_ctx);
std::string local_fsid;
int r = rados.cluster_fsid(&local_fsid);
if (r < 0) {
derr << "failed to retrieve local fsid: " << cpp_strerror(r) << dendl;
m_ret_val = r;
shut_down_local_status_updater();
return;
}
m_remote_status_updater.reset(MirrorStatusUpdater<I>::create(
m_remote_io_ctx, m_threads, m_local_site_name));
m_remote_io_ctx, m_threads, m_local_site_name, local_fsid));
auto ctx = create_context_callback<
NamespaceReplayer<I>,
&NamespaceReplayer<I>::handle_init_remote_status_updater>(this);