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>
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;
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);
};
}
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>
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;
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);
}
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>
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;
std::string remote_mirror_peer_uuid;
librbd::mirror::snapshot::ImageMeta<ImageCtxT>* local_image_meta = nullptr;
+
+private:
+ bool is_linked_impl() const override;
};
} // namespace snapshot