From: Timo Sirainen Date: Mon, 9 Oct 2017 13:37:08 +0000 (+0300) Subject: lib-storage: Add settings to configure lib-index optimization parameters X-Git-Tag: 2.2.34~277 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=8026ec14ab6ac6a921e14fd162b13195ae15aa60;p=thirdparty%2Fdovecot%2Fcore.git lib-storage: Add settings to configure lib-index optimization parameters The defaults are expected to be pretty good, but these settings make it easier to test whether other values might be more optimal. --- diff --git a/src/lib-storage/index/index-storage.c b/src/lib-storage/index/index-storage.c index 39d03ebdaa..2280e8adfa 100644 --- a/src/lib-storage/index/index-storage.c +++ b/src/lib-storage/index/index-storage.c @@ -247,6 +247,29 @@ int index_storage_mailbox_alloc_index(struct mailbox *box) mail_index_set_lock_method(box->index, box->storage->set->parsed_lock_method, mail_storage_get_lock_timeout(box->storage, UINT_MAX)); + + const struct mail_storage_settings *set = box->storage->set; + struct mail_index_optimization_settings optimization_set = { + .index = { + .rewrite_min_log_bytes = set->mail_index_rewrite_min_log_bytes, + .rewrite_max_log_bytes = set->mail_index_rewrite_max_log_bytes, + }, + .log = { + .min_size = set->mail_index_log_rotate_min_size, + .max_size = set->mail_index_log_rotate_max_size, + .min_age_secs = set->mail_index_log_rotate_min_age, + .log2_max_age_secs = set->mail_index_log2_max_age, + }, + .cache = { + .unaccessed_field_drop_secs = set->mail_cache_unaccessed_field_drop, + .record_max_size = set->mail_cache_record_max_size, + .compress_min_size = set->mail_cache_compress_min_size, + .compress_delete_percentage = set->mail_cache_compress_delete_percentage, + .compress_continued_percentage = set->mail_cache_compress_continued_percentage, + .compress_header_continue_count = set->mail_cache_compress_header_continue_count, + }, + }; + mail_index_set_optimization_settings(box->index, &optimization_set); return 0; } diff --git a/src/lib-storage/mail-storage-settings.c b/src/lib-storage/mail-storage-settings.c index b95e2ee2bc..91ae8c23f2 100644 --- a/src/lib-storage/mail-storage-settings.c +++ b/src/lib-storage/mail-storage-settings.c @@ -38,6 +38,18 @@ static const struct setting_define mail_storage_setting_defines[] = { DEF(SET_STR, mail_server_comment), DEF(SET_STR, mail_server_admin), DEF(SET_UINT, mail_cache_min_mail_count), + DEF(SET_TIME, mail_cache_unaccessed_field_drop), + DEF(SET_SIZE, mail_cache_record_max_size), + DEF(SET_SIZE, mail_cache_compress_min_size), + DEF(SET_UINT, mail_cache_compress_delete_percentage), + DEF(SET_UINT, mail_cache_compress_continued_percentage), + DEF(SET_UINT, mail_cache_compress_header_continue_count), + DEF(SET_SIZE, mail_index_rewrite_min_log_bytes), + DEF(SET_SIZE, mail_index_rewrite_max_log_bytes), + DEF(SET_SIZE, mail_index_log_rotate_min_size), + DEF(SET_SIZE, mail_index_log_rotate_max_size), + DEF(SET_TIME, mail_index_log_rotate_min_age), + DEF(SET_TIME, mail_index_log2_max_age), DEF(SET_TIME, mailbox_idle_check_interval), DEF(SET_UINT, mail_max_keyword_length), DEF(SET_TIME, mail_max_lock_timeout), @@ -81,6 +93,18 @@ const struct mail_storage_settings mail_storage_default_settings = { .mail_server_comment = "", .mail_server_admin = "", .mail_cache_min_mail_count = 0, + .mail_cache_unaccessed_field_drop = 60*60*24*30, + .mail_cache_record_max_size = 64 * 1024, + .mail_cache_compress_min_size = 32 * 1024, + .mail_cache_compress_delete_percentage = 20, + .mail_cache_compress_continued_percentage = 200, + .mail_cache_compress_header_continue_count = 4, + .mail_index_rewrite_min_log_bytes = 8 * 1024, + .mail_index_rewrite_max_log_bytes = 128 * 1024, + .mail_index_log_rotate_min_size = 32 * 1024, + .mail_index_log_rotate_max_size = 1024 * 1024, + .mail_index_log_rotate_min_age = 5 * 60, + .mail_index_log2_max_age = 3600 * 24 * 2, .mailbox_idle_check_interval = 30, .mail_max_keyword_length = 50, .mail_max_lock_timeout = 0, @@ -414,6 +438,11 @@ static bool mail_storage_settings_check(void *_set, pool_t pool ATTR_UNUSED, return FALSE; } + if (set->mail_cache_compress_delete_percentage > 100) { + *error_r = "mail_cache_compress_delete_percentage can't be over 100"; + return FALSE; + } + uidl_format_ok = FALSE; for (p = set->pop3_uidl_format; *p != '\0'; p++) { if (p[0] != '%' || p[1] == '\0') diff --git a/src/lib-storage/mail-storage-settings.h b/src/lib-storage/mail-storage-settings.h index 400805c324..e72391fa8c 100644 --- a/src/lib-storage/mail-storage-settings.h +++ b/src/lib-storage/mail-storage-settings.h @@ -24,6 +24,18 @@ struct mail_storage_settings { const char *mail_server_comment; const char *mail_server_admin; unsigned int mail_cache_min_mail_count; + unsigned int mail_cache_unaccessed_field_drop; + uoff_t mail_cache_record_max_size; + uoff_t mail_cache_compress_min_size; + unsigned int mail_cache_compress_delete_percentage; + unsigned int mail_cache_compress_continued_percentage; + unsigned int mail_cache_compress_header_continue_count; + uoff_t mail_index_rewrite_min_log_bytes; + uoff_t mail_index_rewrite_max_log_bytes; + uoff_t mail_index_log_rotate_min_size; + uoff_t mail_index_log_rotate_max_size; + unsigned int mail_index_log_rotate_min_age; + unsigned int mail_index_log2_max_age; unsigned int mailbox_idle_check_interval; unsigned int mail_max_keyword_length; unsigned int mail_max_lock_timeout;