librbd: new configuration option to restrict journal payload size

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>
This commit is contained in:
Jason Dillaman 2016-07-20 08:11:53 -04:00
parent 47e0fbf231
commit 11d7500b9b
5 changed files with 9 additions and 2 deletions

View File

@ -1248,6 +1248,7 @@ OPTION(rbd_journal_object_flush_interval, OPT_INT, 0) // maximum number of pendi
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

View File

@ -928,7 +928,8 @@ struct C_InvalidateCache : public Context {
"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;
@ -983,6 +984,7 @@ struct C_InvalidateCache : public Context {
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() {

View File

@ -182,6 +182,7 @@ namespace librbd {
uint64_t journal_object_flush_bytes;
double journal_object_flush_age;
std::string journal_pool;
uint32_t journal_max_payload_bytes;
LibrbdAdminSocketHook *asok_hook;

View File

@ -1191,6 +1191,7 @@ void Journal<I>::create_journaler() {
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,

View File

@ -86,7 +86,8 @@ struct MockImageCtx {
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);
@ -240,6 +241,7 @@ struct MockImageCtx {
uint64_t journal_object_flush_bytes;
double journal_object_flush_age;
std::string journal_pool;
uint32_t journal_max_payload_bytes;
};
} // namespace librbd