]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
rbd-mirror: unbreak one-way snapshot-based mirroring
authorIlya Dryomov <idryomov@gmail.com>
Mon, 20 Sep 2021 19:52:57 +0000 (21:52 +0200)
committerIlya Dryomov <idryomov@gmail.com>
Mon, 27 Sep 2021 09:54:51 +0000 (11:54 +0200)
Snapshot replayer needs the remote's mirror peer uuid to find its
snapshots in the remote image.  It is obtained by listing remote's
mirror peers but RemotePoolPoller::handle_mirror_peer_list() skips
tx-only (MIRROR_PEER_DIRECTION_TX) peers.  In effect only rx-tx
(MIRROR_PEER_DIRECTION_RX_TX) peers are considered for matching
and snapshot replayer always fails with "failed to retrieve mirror
peer uuid from remote pool" error.

Instead, skip rx-only (MIRROR_PEER_DIRECTION_RX) peers as we are
definitely not interested in anything having to do with mirroring
_to_ the remote cluster.

Fixes: https://tracker.ceph.com/issues/52675
Signed-off-by: Ilya Dryomov <idryomov@gmail.com>
(cherry picked from commit b02d3b0c5aa59aa294de43f94c793f5abf71ac03)

src/tools/rbd_mirror/RemotePoolPoller.cc

index 52c64c2d2c1bbde18ae4648a897aba8a7677b3d6..b373360f9d8d335010924bc3c8cb03260089e008 100644 (file)
@@ -183,7 +183,7 @@ void RemotePoolPoller<I>::handle_mirror_peer_list(int r) {
 
   cls::rbd::MirrorPeer* matched_peer = nullptr;
   for (auto& peer : peers) {
-    if (peer.mirror_peer_direction == cls::rbd::MIRROR_PEER_DIRECTION_TX) {
+    if (peer.mirror_peer_direction == cls::rbd::MIRROR_PEER_DIRECTION_RX) {
       continue;
     }