Ensure that, by default, IO journal events are broken up into manageable
sizes when factoring in that an rbd-mirror daemon might be replaying
events from thousands of images.
Signed-off-by: Jason Dillaman <dillaman@redhat.com>
(cherry picked from commit
11d7500b9bcda7b7c1d8756ade3373f404257f32)
OPTION(rbd_journal_object_flush_bytes, OPT_INT, 0) // maximum number of pending bytes per journal object
OPTION(rbd_journal_object_flush_age, OPT_DOUBLE, 0) // maximum age (in seconds) for pending commits
OPTION(rbd_journal_pool, OPT_STR, "") // pool for journal objects
+OPTION(rbd_journal_max_payload_bytes, OPT_U32, 16384) // maximum journal payload size before splitting
/**
* RBD Mirror options
"rbd_journal_object_flush_interval", false)(
"rbd_journal_object_flush_bytes", false)(
"rbd_journal_object_flush_age", false)(
- "rbd_journal_pool", false);
+ "rbd_journal_pool", false)(
+ "rbd_journal_max_payload_bytes", false);
md_config_t local_config_t;
std::map<std::string, bufferlist> res;
ASSIGN_OPTION(journal_object_flush_bytes);
ASSIGN_OPTION(journal_object_flush_age);
ASSIGN_OPTION(journal_pool);
+ ASSIGN_OPTION(journal_max_payload_bytes);
}
ExclusiveLock<ImageCtx> *ImageCtx::create_exclusive_lock() {
uint64_t journal_object_flush_bytes;
double journal_object_flush_age;
std::string journal_pool;
+ uint32_t journal_max_payload_bytes;
LibrbdAdminSocketHook *asok_hook;
transition_state(STATE_INITIALIZING, 0);
::journal::Settings settings;
settings.commit_interval = m_image_ctx.journal_commit_age;
+ settings.max_payload_bytes = m_image_ctx.journal_max_payload_bytes;
m_journaler = new Journaler(m_work_queue, m_timer, m_timer_lock,
m_image_ctx.md_ctx, m_image_ctx.id,
journal_object_flush_interval(image_ctx.journal_object_flush_interval),
journal_object_flush_bytes(image_ctx.journal_object_flush_bytes),
journal_object_flush_age(image_ctx.journal_object_flush_age),
- journal_pool(image_ctx.journal_pool)
+ journal_pool(image_ctx.journal_pool),
+ journal_max_payload_bytes(image_ctx.journal_max_payload_bytes)
{
md_ctx.dup(image_ctx.md_ctx);
data_ctx.dup(image_ctx.data_ctx);
uint64_t journal_object_flush_bytes;
double journal_object_flush_age;
std::string journal_pool;
+ uint32_t journal_max_payload_bytes;
};
} // namespace librbd