}
MOCK_METHOD1(close, void(Context*));
- MOCK_METHOD3(create_replayer, Replayer*(Threads<librbd::MockTestImageCtx>*,
- const std::string&,
+ MOCK_METHOD4(create_replayer, Replayer*(Threads<librbd::MockTestImageCtx>*,
+ const std::string&, PoolMetaCache*,
ReplayerListener*));
StateBuilder() {
void expect_create_replayer(MockStateBuilder& mock_state_builder,
MockReplayer& mock_replayer) {
- EXPECT_CALL(mock_state_builder, create_replayer(_, _, _))
- .WillOnce(WithArg<2>(
+ EXPECT_CALL(mock_state_builder, create_replayer(_, _, _, _))
+ .WillOnce(WithArg<3>(
Invoke([this, &mock_replayer]
(image_replayer::ReplayerListener* replayer_listener) {
mock_replayer.replayer_listener = replayer_listener;
std::unique_lock locker{m_lock};
ceph_assert(m_replayer == nullptr);
m_replayer = m_state_builder->create_replayer(m_threads, m_local_mirror_uuid,
+ m_pool_meta_cache,
m_replayer_listener);
auto ctx = create_context_callback<
virtual Replayer* create_replayer(
Threads<ImageCtxT>* threads,
const std::string& local_mirror_uuid,
+ PoolMetaCache* pool_meta_cache,
ReplayerListener* replayer_listener) = 0;
std::string global_image_id;
image_replayer::Replayer* StateBuilder<I>::create_replayer(
Threads<I>* threads,
const std::string& local_mirror_uuid,
+ PoolMetaCache* pool_meta_cache,
ReplayerListener* replayer_listener) {
return Replayer<I>::create(
threads, local_mirror_uuid, this, replayer_listener);
image_replayer::Replayer* create_replayer(
Threads<ImageCtxT>* threads,
const std::string& local_mirror_uuid,
+ PoolMetaCache* pool_meta_cache,
ReplayerListener* replayer_listener) override;
Journaler* remote_journaler = nullptr;
#include "common/WorkQueue.h"
#include "librbd/Journal.h"
#include "librbd/Utils.h"
+#include "tools/rbd_mirror/PoolMetaCache.h"
#include "tools/rbd_mirror/Threads.h"
#include "tools/rbd_mirror/Types.h"
#include "tools/rbd_mirror/image_replayer/CloseImageRequest.h"
Replayer<I>::Replayer(
Threads<I>* threads,
const std::string& local_mirror_uuid,
+ PoolMetaCache* pool_meta_cache,
StateBuilder<I>* state_builder,
ReplayerListener* replayer_listener)
: m_threads(threads),
m_local_mirror_uuid(local_mirror_uuid),
+ m_pool_meta_cache(pool_meta_cache),
m_state_builder(state_builder),
m_replayer_listener(replayer_listener),
m_lock(ceph::make_mutex(librbd::util::unique_lock_name(
namespace rbd {
namespace mirror {
+class PoolMetaCache;
template <typename> struct Threads;
namespace image_replayer {
static Replayer* create(
Threads<ImageCtxT>* threads,
const std::string& local_mirror_uuid,
+ PoolMetaCache* pool_meta_cache,
StateBuilder<ImageCtxT>* state_builder,
ReplayerListener* replayer_listener) {
- return new Replayer(threads, local_mirror_uuid, state_builder,
- replayer_listener);
+ return new Replayer(threads, local_mirror_uuid, pool_meta_cache,
+ state_builder, replayer_listener);
}
Replayer(
Threads<ImageCtxT>* threads,
const std::string& local_mirror_uuid,
+ PoolMetaCache* pool_meta_cache,
StateBuilder<ImageCtxT>* state_builder,
ReplayerListener* replayer_listener);
~Replayer();
Threads<ImageCtxT>* m_threads;
std::string m_local_mirror_uuid;
+ PoolMetaCache* m_pool_meta_cache;
StateBuilder<ImageCtxT>* m_state_builder;
ReplayerListener* m_replayer_listener;
image_replayer::Replayer* StateBuilder<I>::create_replayer(
Threads<I>* threads,
const std::string& local_mirror_uuid,
+ PoolMetaCache* pool_meta_cache,
ReplayerListener* replayer_listener) {
return Replayer<I>::create(
- threads, local_mirror_uuid, this, replayer_listener);
+ threads, local_mirror_uuid, pool_meta_cache, this, replayer_listener);
}
} // namespace snapshot
image_replayer::Replayer* create_replayer(
Threads<ImageCtxT>* threads,
const std::string& local_mirror_uuid,
+ PoolMetaCache* pool_meta_cache,
ReplayerListener* replayer_listener) override;
SyncPointHandler<ImageCtxT>* sync_point_handler = nullptr;