From: Ilya Dryomov Date: Fri, 21 Jan 2022 12:41:46 +0000 (+0100) Subject: rbd-mirror: untangle StateBuilder::is_linked() overloads X-Git-Tag: v17.1.0~33^2~6 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=a968b9991e59a1036005a8244a0fe9ce9cf0950e;p=ceph.git rbd-mirror: untangle StateBuilder::is_linked() overloads Make it clear that the local image non-primariness is asserted independent of the mode; avoid the default implementation being overridden but still relied on by both modes. Signed-off-by: Ilya Dryomov (cherry picked from commit f49fa483ec6cdc19b4d60debefbb21bf65b7a385) --- diff --git a/src/tools/rbd_mirror/image_replayer/StateBuilder.cc b/src/tools/rbd_mirror/image_replayer/StateBuilder.cc index 3cd03e51e5ca..3c7274ec56e5 100644 --- a/src/tools/rbd_mirror/image_replayer/StateBuilder.cc +++ b/src/tools/rbd_mirror/image_replayer/StateBuilder.cc @@ -43,8 +43,9 @@ bool StateBuilder::is_local_primary() const { template bool StateBuilder::is_linked() const { - return (local_promotion_state == - librbd::mirror::PROMOTION_STATE_NON_PRIMARY); + return ((local_promotion_state == + librbd::mirror::PROMOTION_STATE_NON_PRIMARY) && + is_linked_impl()); } template diff --git a/src/tools/rbd_mirror/image_replayer/StateBuilder.h b/src/tools/rbd_mirror/image_replayer/StateBuilder.h index d055c84e0206..844c3133bd16 100644 --- a/src/tools/rbd_mirror/image_replayer/StateBuilder.h +++ b/src/tools/rbd_mirror/image_replayer/StateBuilder.h @@ -44,7 +44,7 @@ public: virtual bool is_disconnected() const = 0; bool is_local_primary() const; - virtual bool is_linked() const; + bool is_linked() const; virtual cls::rbd::MirrorImageMode get_mirror_image_mode() const = 0; @@ -100,6 +100,8 @@ protected: void close_local_image(Context* on_finish); private: + virtual bool is_linked_impl() const = 0; + void handle_close_local_image(int r, Context* on_finish); void handle_close_remote_image(int r, Context* on_finish); }; diff --git a/src/tools/rbd_mirror/image_replayer/journal/StateBuilder.cc b/src/tools/rbd_mirror/image_replayer/journal/StateBuilder.cc index 8d391580ed7c..2c95211d41e1 100644 --- a/src/tools/rbd_mirror/image_replayer/journal/StateBuilder.cc +++ b/src/tools/rbd_mirror/image_replayer/journal/StateBuilder.cc @@ -58,10 +58,9 @@ bool StateBuilder::is_disconnected() const { } template -bool StateBuilder::is_linked() const { +bool StateBuilder::is_linked_impl() const { ceph_assert(!this->remote_mirror_uuid.empty()); - return (image_replayer::StateBuilder::is_linked() && - local_primary_mirror_uuid == this->remote_mirror_uuid); + return (local_primary_mirror_uuid == this->remote_mirror_uuid); } template diff --git a/src/tools/rbd_mirror/image_replayer/journal/StateBuilder.h b/src/tools/rbd_mirror/image_replayer/journal/StateBuilder.h index 1d4fa83cbb04..054c24674f08 100644 --- a/src/tools/rbd_mirror/image_replayer/journal/StateBuilder.h +++ b/src/tools/rbd_mirror/image_replayer/journal/StateBuilder.h @@ -37,7 +37,6 @@ public: void close(Context* on_finish) override; bool is_disconnected() const override; - bool is_linked() const override; cls::rbd::MirrorImageMode get_mirror_image_mode() const override; @@ -75,6 +74,7 @@ public: SyncPointHandler* sync_point_handler = nullptr; private: + bool is_linked_impl() const override; void shut_down_remote_journaler(Context* on_finish); void handle_shut_down_remote_journaler(int r, Context* on_finish); diff --git a/src/tools/rbd_mirror/image_replayer/snapshot/StateBuilder.cc b/src/tools/rbd_mirror/image_replayer/snapshot/StateBuilder.cc index 2fb2534d6420..52e64e762f5f 100644 --- a/src/tools/rbd_mirror/image_replayer/snapshot/StateBuilder.cc +++ b/src/tools/rbd_mirror/image_replayer/snapshot/StateBuilder.cc @@ -56,10 +56,9 @@ bool StateBuilder::is_disconnected() const { } template -bool StateBuilder::is_linked() const { +bool StateBuilder::is_linked_impl() const { // the remote has to have us registered as a peer - return (image_replayer::StateBuilder::is_linked() && - !remote_mirror_peer_uuid.empty()); + return !remote_mirror_peer_uuid.empty(); } template diff --git a/src/tools/rbd_mirror/image_replayer/snapshot/StateBuilder.h b/src/tools/rbd_mirror/image_replayer/snapshot/StateBuilder.h index ab326255fdb8..a4ab82982c10 100644 --- a/src/tools/rbd_mirror/image_replayer/snapshot/StateBuilder.h +++ b/src/tools/rbd_mirror/image_replayer/snapshot/StateBuilder.h @@ -42,7 +42,6 @@ public: void close(Context* on_finish) override; bool is_disconnected() const override; - bool is_linked() const override; cls::rbd::MirrorImageMode get_mirror_image_mode() const override; @@ -79,6 +78,9 @@ public: std::string remote_mirror_peer_uuid; librbd::mirror::snapshot::ImageMeta* local_image_meta = nullptr; + +private: + bool is_linked_impl() const override; }; } // namespace snapshot