1 // -*- mode:C++; tab-width:8; c-basic-offset:2; indent-tabs-mode:t -*-
2 // vim: ts=8 sw=2 smarttab
4 #ifndef CEPH_RBD_MIRROR_IMAGE_REPLAYER_SNAPSHOT_STATE_BUILDER_H
5 #define CEPH_RBD_MIRROR_IMAGE_REPLAYER_SNAPSHOT_STATE_BUILDER_H
7 #include "tools/rbd_mirror/image_replayer/StateBuilder.h"
19 template <typename
> class ImageMeta
;
21 } // namespace snapshot
27 namespace image_replayer
{
30 template <typename
> class SyncPointHandler
;
32 template <typename ImageCtxT
>
33 class StateBuilder
: public image_replayer::StateBuilder
<ImageCtxT
> {
35 static StateBuilder
* create(const std::string
& global_image_id
) {
36 return new StateBuilder(global_image_id
);
39 StateBuilder(const std::string
& global_image_id
);
40 ~StateBuilder() override
;
42 void close(Context
* on_finish
) override
;
44 bool is_disconnected() const override
;
45 bool is_linked() const override
;
47 cls::rbd::MirrorImageMode
get_mirror_image_mode() const override
;
49 image_sync::SyncPointHandler
* create_sync_point_handler() override
;
51 bool replay_requires_remote_image() const override
{
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
;
63 BaseRequest
* create_prepare_replay_request(
64 const std::string
& local_mirror_uuid
,
65 ProgressContext
* progress_ctx
,
66 bool* resync_requested
,
68 Context
* on_finish
) override
;
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
;
77 SyncPointHandler
<ImageCtxT
>* sync_point_handler
= nullptr;
79 std::string remote_mirror_peer_uuid
;
81 librbd::mirror::snapshot::ImageMeta
<ImageCtxT
>* local_image_meta
= nullptr;
84 } // namespace snapshot
85 } // namespace image_replayer
89 extern template class rbd::mirror::image_replayer::snapshot::StateBuilder
<librbd::ImageCtx
>;
91 #endif // CEPH_RBD_MIRROR_IMAGE_REPLAYER_SNAPSHOT_STATE_BUILDER_H