]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
rbd-mirror: untangle StateBuilder::is_linked() overloads
authorIlya Dryomov <idryomov@gmail.com>
Fri, 21 Jan 2022 12:41:46 +0000 (13:41 +0100)
committerIlya Dryomov <idryomov@gmail.com>
Fri, 21 Jan 2022 13:31:07 +0000 (14:31 +0100)
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 <idryomov@gmail.com>
src/tools/rbd_mirror/image_replayer/StateBuilder.cc
src/tools/rbd_mirror/image_replayer/StateBuilder.h
src/tools/rbd_mirror/image_replayer/journal/StateBuilder.cc
src/tools/rbd_mirror/image_replayer/journal/StateBuilder.h
src/tools/rbd_mirror/image_replayer/snapshot/StateBuilder.cc
src/tools/rbd_mirror/image_replayer/snapshot/StateBuilder.h

index 3cd03e51e5cab85e3a0bcbf9d2e5cd2d8df212be..3c7274ec56e56ce736c87f555dae865ad2bc1e89 100644 (file)
@@ -43,8 +43,9 @@ bool StateBuilder<I>::is_local_primary() const  {
 
 template <typename I>
 bool StateBuilder<I>::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 <typename I>
index d055c84e02068fcad5aca354314a9e1aacc4efd2..844c3133bd169d2c8d4add8274ece5f5f36dd0fd 100644 (file)
@@ -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);
 };
index 8d391580ed7c0b121a7453f399d0ecfc27a34bcc..2c95211d41e12e38501239a3608086e006563ff1 100644 (file)
@@ -58,10 +58,9 @@ bool StateBuilder<I>::is_disconnected() const {
 }
 
 template <typename I>
-bool StateBuilder<I>::is_linked() const {
+bool StateBuilder<I>::is_linked_impl() const {
   ceph_assert(!this->remote_mirror_uuid.empty());
-  return (image_replayer::StateBuilder<I>::is_linked() &&
-          local_primary_mirror_uuid == this->remote_mirror_uuid);
+  return (local_primary_mirror_uuid == this->remote_mirror_uuid);
 }
 
 template <typename I>
index 1d4fa83cbb041b75ef4d7b1cd1f9391a93777db6..054c24674f084687c069403d9ec51e0eb4d5aa42 100644 (file)
@@ -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<ImageCtxT>* 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);
index 2fb2534d642063f40546d4bb6b949e188fac95c4..52e64e762f5f1e6b1deb145dbe43747804783ebf 100644 (file)
@@ -56,10 +56,9 @@ bool StateBuilder<I>::is_disconnected() const {
 }
 
 template <typename I>
-bool StateBuilder<I>::is_linked() const {
+bool StateBuilder<I>::is_linked_impl() const {
   // the remote has to have us registered as a peer
-  return (image_replayer::StateBuilder<I>::is_linked() &&
-          !remote_mirror_peer_uuid.empty());
+  return !remote_mirror_peer_uuid.empty();
 }
 
 template <typename I>
index ab326255fdb863fd6a0861fb9b33fe24d6cc1048..a4ab82982c103e34b0ee1c3d9156ec31c0c84c5d 100644 (file)
@@ -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<ImageCtxT>* local_image_meta = nullptr;
+
+private:
+  bool is_linked_impl() const override;
 };
 
 } // namespace snapshot