]> git.proxmox.com Git - ceph.git/blame - ceph/src/tools/rbd_mirror/image_replayer/journal/StateBuilder.h
import 15.2.0 Octopus source
[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;
40 bool is_linked() const override;
41
42 cls::rbd::MirrorImageMode get_mirror_image_mode() const override;
43
44 image_sync::SyncPointHandler* create_sync_point_handler() override;
45
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;
53
54 BaseRequest* create_prepare_replay_request(
55 const std::string& local_mirror_uuid,
56 ProgressContext* progress_ctx,
57 bool* resync_requested,
58 bool* syncing,
59 Context* on_finish) override;
60
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;
67
68 std::string local_primary_mirror_uuid;
69
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;
74
75 SyncPointHandler<ImageCtxT>* sync_point_handler = nullptr;
76
77private:
78
79 void shut_down_remote_journaler(Context* on_finish);
80 void handle_shut_down_remote_journaler(int r, Context* on_finish);
81};
82
83} // namespace journal
84} // namespace image_replayer
85} // namespace mirror
86} // namespace rbd
87
88extern template class rbd::mirror::image_replayer::journal::StateBuilder<librbd::ImageCtx>;
89
90#endif // CEPH_RBD_MIRROR_IMAGE_REPLAYER_JOURNAL_STATE_BUILDER_H