]> 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)
committerVille Savolainen <ville.savolainen@dovecot.fi>
Fri, 13 Oct 2017 06:14:27 +0000 (09:14 +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 632f78abf0adcf81ab06201d17435f50795091ef..82d157007ceda3589f7ef8750d9f2596616b7cfe 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 4d78b0496dc85939830b4fa8728bf1b51c480548..27337ba61bce141aa7bc9aefed4144bddd64d645 100644 (file)
@@ -973,7 +973,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 f4d30eb03bc0e4e175e96fe0e1b54b9590a6043c..e8ebd265c6128e914f53c4db333779387c73a7be 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 ec93634df6524bb3e78eea5cddd41b896dac91dc..164a3e4eef790180702668badc0447f2f52a26c3 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 c78116513f9cb7b37d5e9d4188ad460f49783606..8cc7d090660121a6e84b51aafadf72c9f958f7d4 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;
 };