mirror of
https://github.com/ceph/ceph
synced 2025-02-21 01:47:25 +00:00
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:
parent
67c96be4f6
commit
4f652b5cce
@ -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());
|
||||
|
@ -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();
|
||||
|
||||
|
@ -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];
|
||||
}
|
||||
|
@ -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;
|
||||
|
||||
|
@ -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);
|
||||
|
@ -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);
|
||||
|
Loading…
Reference in New Issue
Block a user