]>
Commit | Line | Data |
---|---|---|
9f95a23c TL |
1 | // -*- mode:C++; tab-width:8; c-basic-offset:2; indent-tabs-mode:t -*- |
2 | // vim: ts=8 sw=2 smarttab | |
3 | ||
4 | #ifndef CEPH_RBD_MIRROR_IMAGE_REPLAYER_JOURNAL_STATE_BUILDER_H | |
5 | #define CEPH_RBD_MIRROR_IMAGE_REPLAYER_JOURNAL_STATE_BUILDER_H | |
6 | ||
7 | #include "tools/rbd_mirror/image_replayer/StateBuilder.h" | |
8 | #include "cls/journal/cls_journal_types.h" | |
9 | #include "librbd/journal/Types.h" | |
10 | #include "librbd/journal/TypeTraits.h" | |
11 | #include <string> | |
12 | ||
13 | struct Context; | |
14 | ||
15 | namespace librbd { struct ImageCtx; } | |
16 | ||
17 | namespace rbd { | |
18 | namespace mirror { | |
19 | namespace image_replayer { | |
20 | namespace journal { | |
21 | ||
22 | template <typename> class SyncPointHandler; | |
23 | ||
24 | template <typename ImageCtxT> | |
25 | class StateBuilder : public image_replayer::StateBuilder<ImageCtxT> { | |
26 | public: | |
27 | typedef librbd::journal::TypeTraits<ImageCtxT> TypeTraits; | |
28 | typedef typename TypeTraits::Journaler Journaler; | |
29 | ||
30 | static StateBuilder* create(const std::string& global_image_id) { | |
31 | return new StateBuilder(global_image_id); | |
32 | } | |
33 | ||
34 | StateBuilder(const std::string& global_image_id); | |
35 | ~StateBuilder() override; | |
36 | ||
37 | void close(Context* on_finish) override; | |
38 | ||
39 | bool is_disconnected() const override; | |
9f95a23c TL |
40 | |
41 | cls::rbd::MirrorImageMode get_mirror_image_mode() const override; | |
42 | ||
43 | image_sync::SyncPointHandler* create_sync_point_handler() override; | |
44 | ||
20effc67 TL |
45 | bool replay_requires_remote_image() const override { |
46 | return false; | |
47 | } | |
48 | ||
9f95a23c TL |
49 | BaseRequest* create_local_image_request( |
50 | Threads<ImageCtxT>* threads, | |
51 | librados::IoCtx& local_io_ctx, | |
52 | const std::string& global_image_id, | |
53 | PoolMetaCache* pool_meta_cache, | |
54 | ProgressContext* progress_ctx, | |
55 | Context* on_finish) override; | |
56 | ||
57 | BaseRequest* create_prepare_replay_request( | |
58 | const std::string& local_mirror_uuid, | |
59 | ProgressContext* progress_ctx, | |
60 | bool* resync_requested, | |
61 | bool* syncing, | |
62 | Context* on_finish) override; | |
63 | ||
64 | image_replayer::Replayer* create_replayer( | |
65 | Threads<ImageCtxT>* threads, | |
66 | InstanceWatcher<ImageCtxT>* instance_watcher, | |
67 | const std::string& local_mirror_uuid, | |
68 | PoolMetaCache* pool_meta_cache, | |
69 | ReplayerListener* replayer_listener) override; | |
70 | ||
71 | std::string local_primary_mirror_uuid; | |
72 | ||
73 | Journaler* remote_journaler = nullptr; | |
74 | cls::journal::ClientState remote_client_state = | |
75 | cls::journal::CLIENT_STATE_CONNECTED; | |
76 | librbd::journal::MirrorPeerClientMeta remote_client_meta; | |
77 | ||
78 | SyncPointHandler<ImageCtxT>* sync_point_handler = nullptr; | |
79 | ||
80 | private: | |
20effc67 | 81 | bool is_linked_impl() const override; |
9f95a23c TL |
82 | |
83 | void shut_down_remote_journaler(Context* on_finish); | |
84 | void handle_shut_down_remote_journaler(int r, Context* on_finish); | |
85 | }; | |
86 | ||
87 | } // namespace journal | |
88 | } // namespace image_replayer | |
89 | } // namespace mirror | |
90 | } // namespace rbd | |
91 | ||
92 | extern template class rbd::mirror::image_replayer::journal::StateBuilder<librbd::ImageCtx>; | |
93 | ||
94 | #endif // CEPH_RBD_MIRROR_IMAGE_REPLAYER_JOURNAL_STATE_BUILDER_H |