]> git.proxmox.com Git - ceph.git/blame - ceph/src/tools/rbd_mirror/image_replayer/journal/StateBuilder.h
import quincy beta 17.1.0
[ceph.git] / ceph / src / tools / rbd_mirror / image_replayer / journal / StateBuilder.h
CommitLineData
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
13struct Context;
14
15namespace librbd { struct ImageCtx; }
16
17namespace rbd {
18namespace mirror {
19namespace image_replayer {
20namespace journal {
21
22template <typename> class SyncPointHandler;
23
24template <typename ImageCtxT>
25class StateBuilder : public image_replayer::StateBuilder<ImageCtxT> {
26public:
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
80private:
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
92extern template class rbd::mirror::image_replayer::journal::StateBuilder<librbd::ImageCtx>;
93
94#endif // CEPH_RBD_MIRROR_IMAGE_REPLAYER_JOURNAL_STATE_BUILDER_H