]> git.proxmox.com Git - ceph.git/blob - ceph/src/tools/rbd_mirror/image_replayer/snapshot/StateBuilder.h
import 15.2.0 Octopus source
[ceph.git] / ceph / src / tools / rbd_mirror / image_replayer / snapshot / StateBuilder.h
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_SNAPSHOT_STATE_BUILDER_H
5 #define CEPH_RBD_MIRROR_IMAGE_REPLAYER_SNAPSHOT_STATE_BUILDER_H
6
7 #include "tools/rbd_mirror/image_replayer/StateBuilder.h"
8 #include <string>
9
10 struct Context;
11
12 namespace librbd {
13
14 struct ImageCtx;
15
16 namespace mirror {
17 namespace snapshot {
18
19 template <typename> class ImageMeta;
20
21 } // namespace snapshot
22 } // namespace mirror
23 } // namespace librbd
24
25 namespace rbd {
26 namespace mirror {
27 namespace image_replayer {
28 namespace snapshot {
29
30 template <typename> class SyncPointHandler;
31
32 template <typename ImageCtxT>
33 class StateBuilder : public image_replayer::StateBuilder<ImageCtxT> {
34 public:
35 static StateBuilder* create(const std::string& global_image_id) {
36 return new StateBuilder(global_image_id);
37 }
38
39 StateBuilder(const std::string& global_image_id);
40 ~StateBuilder() override;
41
42 void close(Context* on_finish) override;
43
44 bool is_disconnected() const override;
45 bool is_linked() const override;
46
47 cls::rbd::MirrorImageMode get_mirror_image_mode() const override;
48
49 image_sync::SyncPointHandler* create_sync_point_handler() override;
50
51 bool replay_requires_remote_image() const override {
52 return true;
53 }
54
55 BaseRequest* create_local_image_request(
56 Threads<ImageCtxT>* threads,
57 librados::IoCtx& local_io_ctx,
58 const std::string& global_image_id,
59 PoolMetaCache* pool_meta_cache,
60 ProgressContext* progress_ctx,
61 Context* on_finish) override;
62
63 BaseRequest* create_prepare_replay_request(
64 const std::string& local_mirror_uuid,
65 ProgressContext* progress_ctx,
66 bool* resync_requested,
67 bool* syncing,
68 Context* on_finish) override;
69
70 image_replayer::Replayer* create_replayer(
71 Threads<ImageCtxT>* threads,
72 InstanceWatcher<ImageCtxT>* instance_watcher,
73 const std::string& local_mirror_uuid,
74 PoolMetaCache* pool_meta_cache,
75 ReplayerListener* replayer_listener) override;
76
77 SyncPointHandler<ImageCtxT>* sync_point_handler = nullptr;
78
79 std::string remote_mirror_peer_uuid;
80
81 librbd::mirror::snapshot::ImageMeta<ImageCtxT>* local_image_meta = nullptr;
82 };
83
84 } // namespace snapshot
85 } // namespace image_replayer
86 } // namespace mirror
87 } // namespace rbd
88
89 extern template class rbd::mirror::image_replayer::snapshot::StateBuilder<librbd::ImageCtx>;
90
91 #endif // CEPH_RBD_MIRROR_IMAGE_REPLAYER_SNAPSHOT_STATE_BUILDER_H