]> git.ipfire.org Git - thirdparty/dovecot/core.git/commitdiff
lib-index: Add mail_index_base_optimization_settings
authorTimo Sirainen <timo.sirainen@dovecot.fi>
Mon, 9 Oct 2017 12:24:45 +0000 (15:24 +0300)
committerTimo Sirainen <tss@dovecot.fi>
Thu, 12 Oct 2017 13:37:47 +0000 (16:37 +0300)
src/lib-index/mail-index-private.h
src/lib-index/mail-index-sync-update.c
src/lib-index/mail-index-sync.c
src/lib-index/mail-index.c
src/lib-index/mail-index.h

index 822fd8426936fa64563484c48d8cd6dd1b47953a..eeb2260631f880dbe779d653bd4f436be4a07b70 100644 (file)
@@ -23,11 +23,6 @@ struct mail_index_sync_map_ctx;
    try to catch them by limiting the header size. */
 #define MAIL_INDEX_EXT_HEADER_MAX_SIZE (1024*1024*16-1)
 
-/* Write to main index file when bytes-to-be-read-from-log is between these
-   values. */
-#define MAIL_INDEX_MIN_WRITE_BYTES (1024*8)
-#define MAIL_INDEX_MAX_WRITE_BYTES (1024*128)
-
 #define MAIL_INDEX_IS_IN_MEMORY(index) \
        ((index)->dir == NULL)
 
index ba0ce292c580dda2c89139a8d5bc088f8883fc8c..4d1e0d891ca3e14f0120dee32daee196aed21cf1 100644 (file)
@@ -972,7 +972,7 @@ int mail_index_sync_map(struct mail_index_map **_map,
        mail_transaction_log_get_head(index->log, &prev_seq, &prev_offset);
        if (prev_seq != map->hdr.log_file_seq ||
            prev_offset - map->hdr.log_file_tail_offset >
-                                       MAIL_INDEX_MIN_WRITE_BYTES) {
+                       index->optimization_set.index.rewrite_min_log_bytes) {
                /* we're reading more from log than we would have preferred.
                   remember that we probably want to rewrite index soon. */
                index->index_min_write = TRUE;
index fc84346052e9abe249145b8e7da1c4418fbfb8db..c4ff8c8e1f0b38477c5220bcac33a4faea3668ce 100644 (file)
@@ -820,8 +820,9 @@ static bool mail_index_sync_want_index_write(struct mail_index *index)
 
        log_diff = index->map->hdr.log_file_tail_offset -
                index->last_read_log_file_tail_offset;
-       if (log_diff > MAIL_INDEX_MAX_WRITE_BYTES ||
-           (index->index_min_write && log_diff > MAIL_INDEX_MIN_WRITE_BYTES))
+       if (log_diff > index->optimization_set.index.rewrite_max_log_bytes ||
+           (index->index_min_write &&
+            log_diff > index->optimization_set.index.rewrite_min_log_bytes))
                return TRUE;
 
        if (index->need_recreate)
index 32d4218dd05ebe92150b2262c8143b47ae96fffe..c81c6cf34dffcf647fb33c8ddaf02b4ce496303e 100644 (file)
@@ -30,6 +30,10 @@ struct mail_index_module_register mail_index_module_register = { 0 };
 static void mail_index_close_nonopened(struct mail_index *index);
 
 static const struct mail_index_optimization_settings default_optimization_set = {
+       .index = {
+               .rewrite_min_log_bytes = 8 * 1024,
+               .rewrite_max_log_bytes = 128 * 1024,
+       },
        .log = {
                .min_size = 32 * 1024,
                .max_size = 1024 * 1024,
@@ -163,6 +167,13 @@ void mail_index_set_optimization_settings(struct mail_index *index,
        struct mail_index_optimization_settings *dest =
                &index->optimization_set;
 
+       /* index */
+       if (set->index.rewrite_min_log_bytes != 0)
+               dest->index.rewrite_min_log_bytes = set->index.rewrite_min_log_bytes;
+       if (set->index.rewrite_max_log_bytes != 0)
+               dest->index.rewrite_max_log_bytes = set->index.rewrite_max_log_bytes;
+
+       /* log */
        if (set->log.min_size != 0)
                dest->log.min_size = set->log.min_size;
        if (set->log.max_size != 0)
index 4e0f2975d6ed9deb08d52c01399cb10d283cf6e6..4476ee0a57dd4de56e32d5e329d64f4069bf4f5e 100644 (file)
@@ -237,6 +237,13 @@ struct mail_index_transaction_commit_result {
        unsigned int ignored_modseq_changes;
 };
 
+struct mail_index_base_optimization_settings {
+       /* Rewrite the index when the number of bytes that needs to be read
+          from the .log on refresh is between these min/max values. */
+       uoff_t rewrite_min_log_bytes;
+       uoff_t rewrite_max_log_bytes;
+};
+
 struct mail_index_log_optimization_settings {
        /* Rotate transaction log after it's a) min_size or larger and it was
           created at least min_age_secs or b) larger than max_size. */
@@ -250,6 +257,7 @@ struct mail_index_log_optimization_settings {
 };
 
 struct mail_index_optimization_settings {
+       struct mail_index_base_optimization_settings index;
        struct mail_index_log_optimization_settings log;
 };