From: Mykola Golub Date: Wed, 24 Apr 2019 15:07:21 +0000 (+0100) Subject: journal: auto-tune journal fetch params based on memory target X-Git-Tag: v15.1.0~2445^2~3 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=e836e2e6cf73f0646b7b1cde1a9ad16b6cc6bf98;p=ceph.git journal: auto-tune journal fetch params based on memory target (if a cache manager is specified) Signed-off-by: Mykola Golub --- diff --git a/src/journal/JournalPlayer.cc b/src/journal/JournalPlayer.cc index 89952e636a43..4b68f007e77b 100644 --- a/src/journal/JournalPlayer.cc +++ b/src/journal/JournalPlayer.cc @@ -1,9 +1,12 @@ // -*- mode:C++; tab-width:8; c-basic-offset:2; indent-tabs-mode:t -*- // vim: ts=8 sw=2 smarttab +#include "common/PriorityCache.h" +#include "include/stringify.h" #include "journal/JournalPlayer.h" #include "journal/Entry.h" #include "journal/ReplayHandler.h" +#include "journal/Types.h" #include "journal/Utils.h" #define dout_subsys ceph_subsys_journaler @@ -14,6 +17,8 @@ namespace journal { namespace { +static const uint64_t MIN_FETCH_BYTES = 32768; + struct C_HandleComplete : public Context { ReplayHandler *replay_handler; @@ -49,11 +54,14 @@ struct C_HandleEntriesAvailable : public Context { JournalPlayer::JournalPlayer(librados::IoCtx &ioctx, const std::string &object_oid_prefix, const JournalMetadataPtr& journal_metadata, - ReplayHandler *replay_handler) + ReplayHandler *replay_handler, + CacheManagerHandler *cache_manager_handler) : m_cct(NULL), m_object_oid_prefix(object_oid_prefix), m_journal_metadata(journal_metadata), m_replay_handler(replay_handler), - m_lock("JournalPlayer::m_lock"), m_state(STATE_INIT), m_splay_offset(0), - m_watch_enabled(false), m_watch_scheduled(false), m_watch_interval(0) { + m_cache_manager_handler(cache_manager_handler), + m_cache_rebalance_handler(this), m_lock("JournalPlayer::m_lock"), + m_state(STATE_INIT), m_splay_offset(0), m_watch_enabled(false), + m_watch_scheduled(false), m_watch_interval(0) { m_replay_handler->get(); m_ioctx.dup(ioctx); m_cct = reinterpret_cast(m_ioctx.cct()); @@ -76,6 +84,21 @@ JournalPlayer::JournalPlayer(librados::IoCtx &ioctx, m_commit_positions[splay_offset] = position; } } + + if (m_cache_manager_handler != nullptr) { + m_cache_name = "JournalPlayer/" + stringify(m_ioctx.get_id()) + "/" + + m_object_oid_prefix; + auto order = m_journal_metadata->get_order(); + auto splay_width = m_journal_metadata->get_splay_width(); + uint64_t min_size = MIN_FETCH_BYTES * splay_width; + uint64_t max_size = (2 << order) * splay_width; + + m_cache_manager_handler->register_cache(m_cache_name, min_size, max_size, + &m_cache_rebalance_handler); + m_max_fetch_bytes = 0; + } else { + m_max_fetch_bytes = 2 << m_journal_metadata->get_order(); + } } JournalPlayer::~JournalPlayer() { @@ -87,11 +110,21 @@ JournalPlayer::~JournalPlayer() { ceph_assert(!m_watch_scheduled); } m_replay_handler->put(); + + if (m_cache_manager_handler != nullptr) { + m_cache_manager_handler->unregister_cache(m_cache_name); + } } void JournalPlayer::prefetch() { Mutex::Locker locker(m_lock); ceph_assert(m_state == STATE_INIT); + + if (m_cache_manager_handler != nullptr && m_max_fetch_bytes == 0) { + m_state = STATE_WAITCACHE; + return; + } + m_state = STATE_PREFETCH; m_active_set = m_journal_metadata->get_active_set(); @@ -601,9 +634,9 @@ void JournalPlayer::fetch(uint64_t object_num) { ObjectPlayerPtr object_player(new ObjectPlayer( m_ioctx, m_object_oid_prefix, object_num, m_journal_metadata->get_timer(), m_journal_metadata->get_timer_lock(), m_journal_metadata->get_order(), - m_journal_metadata->get_settings().max_fetch_bytes)); + m_max_fetch_bytes)); - uint8_t splay_width = m_journal_metadata->get_splay_width(); + auto splay_width = m_journal_metadata->get_splay_width(); m_object_players[object_num % splay_width] = object_player; fetch(object_player); } @@ -800,4 +833,47 @@ void JournalPlayer::notify_complete(int r) { m_replay_handler), r); } +void JournalPlayer::handle_cache_rebalanced(uint64_t new_cache_bytes) { + Mutex::Locker locker(m_lock); + + if (m_state == STATE_ERROR) { + return; + } + + auto splay_width = m_journal_metadata->get_splay_width(); + m_max_fetch_bytes = p2align(new_cache_bytes / splay_width, 4096); + + ldout(m_cct, 10) << __func__ << ": new_cache_bytes=" << new_cache_bytes + << ", max_fetch_bytes=" << m_max_fetch_bytes << dendl; + + uint64_t min_bytes = MIN_FETCH_BYTES; + + if (m_state == STATE_WAITCACHE) { + m_state = STATE_INIT; + if (m_max_fetch_bytes >= min_bytes) { + auto ctx = new FunctionContext( + [this](int r) { + prefetch(); + }); + m_journal_metadata->queue(ctx, 0); + return; + } + } else { + min_bytes = p2align(min_bytes - (rand() % min_bytes) / 2, 4096); + } + + if (m_max_fetch_bytes < min_bytes) { + lderr(m_cct) << __func__ << ": can't allocate enough memory from cache" + << dendl; + m_state = STATE_ERROR; + notify_complete(-ENOMEM); + return; + } + + for (auto &pair : m_object_players) { + pair.second->set_max_fetch_bytes(m_max_fetch_bytes); + } +} + + } // namespace journal diff --git a/src/journal/JournalPlayer.h b/src/journal/JournalPlayer.h index 09029061e5e4..6ba54cc8babb 100644 --- a/src/journal/JournalPlayer.h +++ b/src/journal/JournalPlayer.h @@ -11,6 +11,7 @@ #include "common/Mutex.h" #include "journal/JournalMetadata.h" #include "journal/ObjectPlayer.h" +#include "journal/Types.h" #include "cls/journal/cls_journal_types.h" #include #include @@ -20,6 +21,7 @@ class SafeTimer; namespace journal { +class CacheManagerHandler; class Entry; class ReplayHandler; @@ -31,7 +33,7 @@ public: JournalPlayer(librados::IoCtx &ioctx, const std::string &object_oid_prefix, const JournalMetadataPtr& journal_metadata, - ReplayHandler *replay_handler); + ReplayHandler *replay_handler, CacheManagerHandler *cache_manager_handler); ~JournalPlayer(); void prefetch(); @@ -48,6 +50,7 @@ private: enum State { STATE_INIT, + STATE_WAITCACHE, STATE_PREFETCH, STATE_PLAYBACK, STATE_ERROR @@ -89,12 +92,27 @@ private: } }; + struct CacheRebalanceHandler : public journal::CacheRebalanceHandler { + JournalPlayer *player; + + CacheRebalanceHandler(JournalPlayer *player) : player(player) { + } + + void handle_cache_rebalanced(uint64_t new_cache_bytes) override { + player->handle_cache_rebalanced(new_cache_bytes); + } + }; + librados::IoCtx m_ioctx; CephContext *m_cct; std::string m_object_oid_prefix; - JournalMetadataPtr m_journal_metadata; - + JournalMetadataPtr m_journal_metadata; ReplayHandler *m_replay_handler; + CacheManagerHandler *m_cache_manager_handler; + + std::string m_cache_name; + CacheRebalanceHandler m_cache_rebalance_handler; + uint64_t m_max_fetch_bytes; AsyncOpTracker m_async_op_tracker; @@ -150,6 +168,8 @@ private: void notify_entries_available(); void notify_complete(int r); + + void handle_cache_rebalanced(uint64_t new_cache_bytes); }; } // namespace journal diff --git a/src/journal/Journaler.cc b/src/journal/Journaler.cc index 9f78643703b3..432421ae6e44 100644 --- a/src/journal/Journaler.cc +++ b/src/journal/Journaler.cc @@ -73,9 +73,10 @@ Journaler::Threads::~Threads() { Journaler::Journaler(librados::IoCtx &header_ioctx, const std::string &journal_id, - const std::string &client_id, const Settings &settings) + const std::string &client_id, const Settings &settings, + CacheManagerHandler *cache_manager_handler) : m_threads(new Threads(reinterpret_cast(header_ioctx.cct()))), - m_client_id(client_id) { + m_client_id(client_id), m_cache_manager_handler(cache_manager_handler) { set_up(m_threads->work_queue, m_threads->timer, &m_threads->timer_lock, header_ioctx, journal_id, settings); } @@ -83,8 +84,9 @@ Journaler::Journaler(librados::IoCtx &header_ioctx, Journaler::Journaler(ContextWQ *work_queue, SafeTimer *timer, Mutex *timer_lock, librados::IoCtx &header_ioctx, const std::string &journal_id, - const std::string &client_id, const Settings &settings) - : m_client_id(client_id) { + const std::string &client_id, const Settings &settings, + CacheManagerHandler *cache_manager_handler) + : m_client_id(client_id), m_cache_manager_handler(cache_manager_handler) { set_up(work_queue, timer, timer_lock, header_ioctx, journal_id, settings); } @@ -436,7 +438,7 @@ void Journaler::flush_append(Context *on_safe) { void Journaler::create_player(ReplayHandler *replay_handler) { ceph_assert(m_player == nullptr); m_player = new JournalPlayer(m_data_ioctx, m_object_oid_prefix, m_metadata, - replay_handler); + replay_handler, m_cache_manager_handler); } void Journaler::get_metadata(uint8_t *order, uint8_t *splay_width, diff --git a/src/journal/Journaler.h b/src/journal/Journaler.h index 1424cb757612..3f3987105e18 100644 --- a/src/journal/Journaler.h +++ b/src/journal/Journaler.h @@ -22,6 +22,8 @@ class ThreadPool; namespace journal { +struct CacheManagerHandler; + class JournalMetadata; class JournalPlayer; class JournalRecorder; @@ -52,10 +54,12 @@ public: const std::string &journal_id); Journaler(librados::IoCtx &header_ioctx, const std::string &journal_id, - const std::string &client_id, const Settings &settings); + const std::string &client_id, const Settings &settings, + CacheManagerHandler *cache_manager_handler); Journaler(ContextWQ *work_queue, SafeTimer *timer, Mutex *timer_lock, librados::IoCtx &header_ioctx, const std::string &journal_id, - const std::string &client_id, const Settings &settings); + const std::string &client_id, const Settings &settings, + CacheManagerHandler *cache_manager_handler); ~Journaler(); void exists(Context *on_finish) const; @@ -138,6 +142,7 @@ private: librados::IoCtx m_data_ioctx; CephContext *m_cct; std::string m_client_id; + CacheManagerHandler *m_cache_manager_handler; std::string m_header_oid; std::string m_object_oid_prefix; diff --git a/src/journal/ObjectPlayer.h b/src/journal/ObjectPlayer.h index b9062b832b0d..3dfad125bc1f 100644 --- a/src/journal/ObjectPlayer.h +++ b/src/journal/ObjectPlayer.h @@ -78,6 +78,11 @@ public: m_refetch_state = refetch_state; } + inline void set_max_fetch_bytes(uint64_t max_fetch_bytes) { + Mutex::Locker locker(m_lock); + m_max_fetch_bytes = max_fetch_bytes; + } + private: typedef std::pair EntryKey; typedef boost::unordered_map EntryKeys; diff --git a/src/journal/Types.h b/src/journal/Types.h new file mode 100644 index 000000000000..8f8ce7800030 --- /dev/null +++ b/src/journal/Types.h @@ -0,0 +1,28 @@ +// -*- mode:C++; tab-width:8; c-basic-offset:2; indent-tabs-mode:t -*- +// vim: ts=8 sw=2 smarttab + +#ifndef CEPH_JOURNAL_TYPES_H +#define CEPH_JOURNAL_TYPES_H + +namespace journal { + +struct CacheRebalanceHandler { + virtual ~CacheRebalanceHandler() { + } + + virtual void handle_cache_rebalanced(uint64_t new_cache_bytes) = 0; +}; + +struct CacheManagerHandler { + virtual ~CacheManagerHandler() { + } + + virtual void register_cache(const std::string &cache_name, + uint64_t min_size, uint64_t max_size, + CacheRebalanceHandler* handler) = 0; + virtual void unregister_cache(const std::string &cache_name) = 0; +}; + +} // namespace journal + +#endif // # CEPH_JOURNAL_TYPES_H diff --git a/src/librbd/Journal.cc b/src/librbd/Journal.cc index 2f8714625666..5a648282fe99 100644 --- a/src/librbd/Journal.cc +++ b/src/librbd/Journal.cc @@ -76,7 +76,7 @@ struct C_IsTagOwner : public Context { op_work_queue(op_work_queue), on_finish(on_finish), cct(reinterpret_cast(io_ctx.cct())), journaler(new Journaler(io_ctx, image_id, Journal<>::IMAGE_CLIENT_ID, - {})) { + {}, nullptr)) { } void finish(int r) override { @@ -113,7 +113,7 @@ struct C_GetTagOwner : public Context { C_GetTagOwner(librados::IoCtx &io_ctx, const std::string &image_id, std::string *mirror_uuid, Context *on_finish) : mirror_uuid(mirror_uuid), on_finish(on_finish), - journaler(io_ctx, image_id, Journal<>::IMAGE_CLIENT_ID, {}) { + journaler(io_ctx, image_id, Journal<>::IMAGE_CLIENT_ID, {}, nullptr) { } virtual void finish(int r) { @@ -459,7 +459,8 @@ int Journal::request_resync(I *image_ctx) { CephContext *cct = image_ctx->cct; ldout(cct, 20) << __func__ << dendl; - Journaler journaler(image_ctx->md_ctx, image_ctx->id, IMAGE_CLIENT_ID, {}); + Journaler journaler(image_ctx->md_ctx, image_ctx->id, IMAGE_CLIENT_ID, {}, + nullptr); Mutex lock("lock"); journal::ImageClientMeta client_meta; @@ -1074,7 +1075,7 @@ void Journal::create_journaler() { m_journaler = new Journaler(m_work_queue, m_timer, m_timer_lock, m_image_ctx.md_ctx, m_image_ctx.id, - IMAGE_CLIENT_ID, settings); + IMAGE_CLIENT_ID, settings, nullptr); m_journaler->add_listener(&m_metadata_listener); Context *ctx = create_async_context_callback( diff --git a/src/librbd/journal/CreateRequest.cc b/src/librbd/journal/CreateRequest.cc index 4f10ec6571c1..46f0d81d1b9c 100644 --- a/src/librbd/journal/CreateRequest.cc +++ b/src/librbd/journal/CreateRequest.cc @@ -83,8 +83,8 @@ void CreateRequest::create_journal() { ldout(m_cct, 20) << this << " " << __func__ << dendl; ImageCtx::get_timer_instance(m_cct, &m_timer, &m_timer_lock); - m_journaler = new Journaler(m_op_work_queue, m_timer, m_timer_lock, - m_ioctx, m_image_id, m_image_client_id, {}); + m_journaler = new Journaler(m_op_work_queue, m_timer, m_timer_lock, m_ioctx, + m_image_id, m_image_client_id, {}, nullptr); using klass = CreateRequest; Context *ctx = create_context_callback(this); diff --git a/src/librbd/journal/DemoteRequest.cc b/src/librbd/journal/DemoteRequest.cc index 59aa0365a3f8..5b34942684e3 100644 --- a/src/librbd/journal/DemoteRequest.cc +++ b/src/librbd/journal/DemoteRequest.cc @@ -45,7 +45,7 @@ void DemoteRequest::open_journaler() { ldout(cct, 20) << dendl; m_journaler = new Journaler(m_image_ctx.md_ctx, m_image_ctx.id, - Journal<>::IMAGE_CLIENT_ID, {}); + Journal<>::IMAGE_CLIENT_ID, {}, nullptr); auto ctx = create_async_context_callback( m_image_ctx, create_context_callback< DemoteRequest, &DemoteRequest::handle_open_journaler>(this)); diff --git a/src/librbd/journal/PromoteRequest.cc b/src/librbd/journal/PromoteRequest.cc index 695acc388aaa..30d9f3bb159f 100644 --- a/src/librbd/journal/PromoteRequest.cc +++ b/src/librbd/journal/PromoteRequest.cc @@ -40,7 +40,7 @@ void PromoteRequest::send_open() { ldout(cct, 20) << dendl; m_journaler = new Journaler(m_image_ctx->md_ctx, m_image_ctx->id, - Journal<>::IMAGE_CLIENT_ID, {}); + Journal<>::IMAGE_CLIENT_ID, {}, nullptr); Context *ctx = create_async_context_callback( *m_image_ctx, create_context_callback< PromoteRequest, &PromoteRequest::handle_open>(this)); diff --git a/src/librbd/journal/RemoveRequest.cc b/src/librbd/journal/RemoveRequest.cc index 6ed5f54c3b53..6bdabf40093f 100644 --- a/src/librbd/journal/RemoveRequest.cc +++ b/src/librbd/journal/RemoveRequest.cc @@ -42,8 +42,8 @@ void RemoveRequest::stat_journal() { ldout(m_cct, 20) << this << " " << __func__ << dendl; ImageCtx::get_timer_instance(m_cct, &m_timer, &m_timer_lock); - m_journaler = new Journaler(m_op_work_queue, m_timer, m_timer_lock, - m_ioctx, m_image_id, m_image_client_id, {}); + m_journaler = new Journaler(m_op_work_queue, m_timer, m_timer_lock, m_ioctx, + m_image_id, m_image_client_id, {}, nullptr); using klass = RemoveRequest; Context *ctx = create_context_callback(this); diff --git a/src/librbd/journal/ResetRequest.cc b/src/librbd/journal/ResetRequest.cc index 9b67f3e452ce..895d0046e942 100644 --- a/src/librbd/journal/ResetRequest.cc +++ b/src/librbd/journal/ResetRequest.cc @@ -34,7 +34,7 @@ template void ResetRequest::init_journaler() { ldout(m_cct, 10) << dendl; - m_journaler = new Journaler(m_io_ctx, m_image_id, m_client_id, {}); + m_journaler = new Journaler(m_io_ctx, m_image_id, m_client_id, {}, nullptr); Context *ctx = create_context_callback< ResetRequest, &ResetRequest::handle_init_journaler>(this); m_journaler->init(ctx); diff --git a/src/test/journal/mock/MockJournaler.h b/src/test/journal/mock/MockJournaler.h index b925ddfebe9e..787d197dd934 100644 --- a/src/test/journal/mock/MockJournaler.h +++ b/src/test/journal/mock/MockJournaler.h @@ -143,7 +143,8 @@ struct MockJournalerProxy { template MockJournalerProxy(IoCtxT &header_ioctx, const std::string &, - const std::string &, const Settings&) { + const std::string &, const Settings&, + journal::CacheManagerHandler *) { MockJournaler::get_instance().construct(); } @@ -151,7 +152,8 @@ struct MockJournalerProxy { MockJournalerProxy(WorkQueue *work_queue, Timer *timer, Mutex *timer_lock, librados::IoCtx &header_ioctx, const std::string &journal_id, - const std::string &client_id, const Settings&) { + const std::string &client_id, const Settings&, + journal::CacheManagerHandler *) { MockJournaler::get_instance().construct(); } diff --git a/src/test/journal/test_JournalPlayer.cc b/src/test/journal/test_JournalPlayer.cc index 3ae04c07ad94..503580518305 100644 --- a/src/test/journal/test_JournalPlayer.cc +++ b/src/test/journal/test_JournalPlayer.cc @@ -78,7 +78,7 @@ public: journal::JournalPlayer *create_player(const std::string &oid, const journal::JournalMetadataPtr &metadata) { journal::JournalPlayer *player(new journal::JournalPlayer( - m_ioctx, oid + ".", metadata, &m_replay_hander)); + m_ioctx, oid + ".", metadata, &m_replay_hander, nullptr)); m_players.push_back(player); return player; } diff --git a/src/test/journal/test_Journaler.cc b/src/test/journal/test_Journaler.cc index cc7f2c051846..836816581a94 100644 --- a/src/test/journal/test_Journaler.cc +++ b/src/test/journal/test_Journaler.cc @@ -27,7 +27,8 @@ public: RadosTestFixture::SetUp(); m_journal_id = get_temp_journal_id(); m_journaler = new journal::Journaler(m_work_queue, m_timer, &m_timer_lock, - m_ioctx, m_journal_id, CLIENT_ID, {}); + m_ioctx, m_journal_id, CLIENT_ID, {}, + nullptr); } void TearDown() override { @@ -54,8 +55,8 @@ public: } int register_client(const std::string &client_id, const std::string &desc) { - journal::Journaler journaler(m_work_queue, m_timer, &m_timer_lock, - m_ioctx, m_journal_id, client_id, {}); + journal::Journaler journaler(m_work_queue, m_timer, &m_timer_lock, m_ioctx, + m_journal_id, client_id, {}, nullptr); bufferlist data; data.append(desc); C_SaferCond cond; @@ -64,8 +65,8 @@ public: } int update_client(const std::string &client_id, const std::string &desc) { - journal::Journaler journaler(m_work_queue, m_timer, &m_timer_lock, - m_ioctx, m_journal_id, client_id, {}); + journal::Journaler journaler(m_work_queue, m_timer, &m_timer_lock, m_ioctx, + m_journal_id, client_id, {}, nullptr); bufferlist data; data.append(desc); C_SaferCond cond; @@ -74,8 +75,8 @@ public: } int unregister_client(const std::string &client_id) { - journal::Journaler journaler(m_work_queue, m_timer, &m_timer_lock, - m_ioctx, m_journal_id, client_id, {}); + journal::Journaler journaler(m_work_queue, m_timer, &m_timer_lock, m_ioctx, + m_journal_id, client_id, {}, nullptr); C_SaferCond cond; journaler.unregister_client(&cond); return cond.wait(); diff --git a/src/test/librbd/fsx.cc b/src/test/librbd/fsx.cc index e0b40937d316..1e96b502798f 100644 --- a/src/test/librbd/fsx.cc +++ b/src/test/librbd/fsx.cc @@ -329,7 +329,8 @@ int register_journal(rados_ioctx_t ioctx, const char *image_name) { return r; } - journal::Journaler journaler(io_ctx, image_id, JOURNAL_CLIENT_ID, {}); + journal::Journaler journaler(io_ctx, image_id, JOURNAL_CLIENT_ID, {}, + nullptr); r = journaler.register_client(bufferlist()); if (r < 0) { simple_err("failed to register journal client", r); @@ -348,7 +349,8 @@ int unregister_journal(rados_ioctx_t ioctx, const char *image_name) { return r; } - journal::Journaler journaler(io_ctx, image_id, JOURNAL_CLIENT_ID, {}); + journal::Journaler journaler(io_ctx, image_id, JOURNAL_CLIENT_ID, {}, + nullptr); r = journaler.unregister_client(); if (r < 0) { simple_err("failed to unregister journal client", r); @@ -404,7 +406,8 @@ int replay_journal(rados_ioctx_t ioctx, const char *image_name, return r; } - journal::Journaler journaler(io_ctx, image_id, JOURNAL_CLIENT_ID, {}); + journal::Journaler journaler(io_ctx, image_id, JOURNAL_CLIENT_ID, {}, + nullptr); C_SaferCond init_ctx; journaler.init(&init_ctx); BOOST_SCOPE_EXIT_ALL( (&journaler) ) { @@ -417,7 +420,8 @@ int replay_journal(rados_ioctx_t ioctx, const char *image_name, return r; } - journal::Journaler replay_journaler(io_ctx, replay_image_id, "", {}); + journal::Journaler replay_journaler(io_ctx, replay_image_id, "", {}, + nullptr); C_SaferCond replay_init_ctx; replay_journaler.init(&replay_init_ctx); diff --git a/src/test/librbd/journal/test_Entries.cc b/src/test/librbd/journal/test_Entries.cc index 7b013e76ad0f..7ee8174b412e 100644 --- a/src/test/librbd/journal/test_Entries.cc +++ b/src/test/librbd/journal/test_Entries.cc @@ -67,7 +67,7 @@ public: journal::Journaler *create_journaler(librbd::ImageCtx *ictx) { journal::Journaler *journaler = new journal::Journaler( - ictx->md_ctx, ictx->id, "dummy client", {}); + ictx->md_ctx, ictx->id, "dummy client", {}, nullptr); int r = journaler->register_client(bufferlist()); if (r < 0) { diff --git a/src/test/librbd/test_mirroring.cc b/src/test/librbd/test_mirroring.cc index 1aa72da51774..fd34187b2cfb 100644 --- a/src/test/librbd/test_mirroring.cc +++ b/src/test/librbd/test_mirroring.cc @@ -329,7 +329,7 @@ public: "remote-image-id", {{{}, "sync-point-snap", boost::none}}, {}); librbd::journal::ClientData client_data(peer_client_meta); - journal::Journaler journaler(io_ctx, image_id, "peer-client", {}); + journal::Journaler journaler(io_ctx, image_id, "peer-client", {}, nullptr); C_SaferCond init_ctx; journaler.init(&init_ctx); ASSERT_EQ(-ENOENT, init_ctx.wait()); diff --git a/src/test/rbd_mirror/test_ImageSync.cc b/src/test/rbd_mirror/test_ImageSync.cc index 36a2b35e1121..49fba242316a 100644 --- a/src/test/rbd_mirror/test_ImageSync.cc +++ b/src/test/rbd_mirror/test_ImageSync.cc @@ -77,7 +77,7 @@ public: m_remote_journaler = new ::journal::Journaler( m_threads->work_queue, m_threads->timer, &m_threads->timer_lock, - m_remote_io_ctx, m_remote_image_ctx->id, "mirror-uuid", {}); + m_remote_io_ctx, m_remote_image_ctx->id, "mirror-uuid", {}, nullptr); m_client_meta = {"image-id"}; diff --git a/src/tools/rbd/action/Journal.cc b/src/tools/rbd/action/Journal.cc index c46364facd94..76f76b1c5ebc 100644 --- a/src/tools/rbd/action/Journal.cc +++ b/src/tools/rbd/action/Journal.cc @@ -378,7 +378,7 @@ class Journaler : public ::journal::Journaler { public: Journaler(librados::IoCtx& io_ctx, const std::string& journal_id, const std::string &client_id) : - ::journal::Journaler(io_ctx, journal_id, client_id, {}) { + ::journal::Journaler(io_ctx, journal_id, client_id, {}, nullptr) { } int init() { diff --git a/src/tools/rbd_mirror/image_replayer/CreateImageRequest.cc b/src/tools/rbd_mirror/image_replayer/CreateImageRequest.cc index 9aef91541650..e54a76e07335 100644 --- a/src/tools/rbd_mirror/image_replayer/CreateImageRequest.cc +++ b/src/tools/rbd_mirror/image_replayer/CreateImageRequest.cc @@ -157,7 +157,7 @@ void CreateImageRequest::get_remote_parent_client_state() { &m_threads->timer_lock, m_remote_parent_io_ctx, m_remote_parent_spec.image_id, - m_local_parent_mirror_uuid, {}); + m_local_parent_mirror_uuid, {}, nullptr); Context *ctx = create_async_context_callback( m_threads->work_queue, create_context_callback< diff --git a/src/tools/rbd_mirror/image_replayer/PrepareRemoteImageRequest.cc b/src/tools/rbd_mirror/image_replayer/PrepareRemoteImageRequest.cc index 00c141e0bc1c..331c5f9e1fbb 100644 --- a/src/tools/rbd_mirror/image_replayer/PrepareRemoteImageRequest.cc +++ b/src/tools/rbd_mirror/image_replayer/PrepareRemoteImageRequest.cc @@ -109,7 +109,7 @@ void PrepareRemoteImageRequest::get_client() { *m_remote_journaler = new Journaler(m_threads->work_queue, m_threads->timer, &m_threads->timer_lock, m_remote_io_ctx, *m_remote_image_id, m_local_mirror_uuid, - m_journal_settings); + m_journal_settings, nullptr); Context *ctx = create_async_context_callback( m_threads->work_queue, create_context_callback<