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_JOURNAL_STATE_BUILDER_H
5 #define CEPH_RBD_MIRROR_IMAGE_REPLAYER_JOURNAL_STATE_BUILDER_H
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"
15 namespace librbd
{ struct ImageCtx
; }
19 namespace image_replayer
{
22 template <typename
> class SyncPointHandler
;
24 template <typename ImageCtxT
>
25 class StateBuilder
: public image_replayer::StateBuilder
<ImageCtxT
> {
27 typedef librbd::journal::TypeTraits
<ImageCtxT
> TypeTraits
;
28 typedef typename
TypeTraits::Journaler Journaler
;
30 static StateBuilder
* create(const std::string
& global_image_id
) {
31 return new StateBuilder(global_image_id
);
34 StateBuilder(const std::string
& global_image_id
);
35 ~StateBuilder() override
;
37 void close(Context
* on_finish
) override
;
39 bool is_disconnected() const override
;
40 bool is_linked() const override
;
42 cls::rbd::MirrorImageMode
get_mirror_image_mode() const override
;
44 image_sync::SyncPointHandler
* create_sync_point_handler() override
;
46 BaseRequest
* create_local_image_request(
47 Threads
<ImageCtxT
>* threads
,
48 librados::IoCtx
& local_io_ctx
,
49 const std::string
& global_image_id
,
50 PoolMetaCache
* pool_meta_cache
,
51 ProgressContext
* progress_ctx
,
52 Context
* on_finish
) override
;
54 BaseRequest
* create_prepare_replay_request(
55 const std::string
& local_mirror_uuid
,
56 ProgressContext
* progress_ctx
,
57 bool* resync_requested
,
59 Context
* on_finish
) override
;
61 image_replayer::Replayer
* create_replayer(
62 Threads
<ImageCtxT
>* threads
,
63 InstanceWatcher
<ImageCtxT
>* instance_watcher
,
64 const std::string
& local_mirror_uuid
,
65 PoolMetaCache
* pool_meta_cache
,
66 ReplayerListener
* replayer_listener
) override
;
68 std::string local_primary_mirror_uuid
;
70 Journaler
* remote_journaler
= nullptr;
71 cls::journal::ClientState remote_client_state
=
72 cls::journal::CLIENT_STATE_CONNECTED
;
73 librbd::journal::MirrorPeerClientMeta remote_client_meta
;
75 SyncPointHandler
<ImageCtxT
>* sync_point_handler
= nullptr;
79 void shut_down_remote_journaler(Context
* on_finish
);
80 void handle_shut_down_remote_journaler(int r
, Context
* on_finish
);
83 } // namespace journal
84 } // namespace image_replayer
88 extern template class rbd::mirror::image_replayer::journal::StateBuilder
<librbd::ImageCtx
>;
90 #endif // CEPH_RBD_MIRROR_IMAGE_REPLAYER_JOURNAL_STATE_BUILDER_H