]> git.ipfire.org Git - thirdparty/dovecot/core.git/commitdiff
lib-storage: Add settings to configure lib-index optimization parameters
authorTimo Sirainen <timo.sirainen@dovecot.fi>
Mon, 9 Oct 2017 13:37:08 +0000 (16:37 +0300)
committerVille Savolainen <ville.savolainen@dovecot.fi>
Fri, 13 Oct 2017 06:14:43 +0000 (09:14 +0300)
The defaults are expected to be pretty good, but these settings make it
easier to test whether other values might be more optimal.

src/lib-storage/index/index-storage.c
src/lib-storage/mail-storage-settings.c
src/lib-storage/mail-storage-settings.h

index 39d03ebdaa08bd265594c86a4f4df33f19902e55..2280e8adfa5541f60a85676a8da52fa3cc7722ac 100644 (file)
@@ -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;
 }
 
index b95e2ee2bc8d083395d65612c4432ff0e64cb7cc..91ae8c23f2c178932810ef983394b9b44e102a21 100644 (file)
@@ -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')
index 400805c32497f579238aa76fa40f140f8fdd2c20..e72391fa8c228d990d963aeeed741480e03c16c3 100644 (file)
@@ -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;