From: Timo Sirainen Date: Mon, 9 Oct 2017 12:24:45 +0000 (+0300) Subject: lib-index: Add mail_index_base_optimization_settings X-Git-Tag: 2.3.0.rc1~840 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=3a78329166819e06f2929ce44e360514c6a80a8e;p=thirdparty%2Fdovecot%2Fcore.git lib-index: Add mail_index_base_optimization_settings --- diff --git a/src/lib-index/mail-index-private.h b/src/lib-index/mail-index-private.h index 822fd84269..eeb2260631 100644 --- a/src/lib-index/mail-index-private.h +++ b/src/lib-index/mail-index-private.h @@ -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) diff --git a/src/lib-index/mail-index-sync-update.c b/src/lib-index/mail-index-sync-update.c index ba0ce292c5..4d1e0d891c 100644 --- a/src/lib-index/mail-index-sync-update.c +++ b/src/lib-index/mail-index-sync-update.c @@ -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; diff --git a/src/lib-index/mail-index-sync.c b/src/lib-index/mail-index-sync.c index fc84346052..c4ff8c8e1f 100644 --- a/src/lib-index/mail-index-sync.c +++ b/src/lib-index/mail-index-sync.c @@ -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) diff --git a/src/lib-index/mail-index.c b/src/lib-index/mail-index.c index 32d4218dd0..c81c6cf34d 100644 --- a/src/lib-index/mail-index.c +++ b/src/lib-index/mail-index.c @@ -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) diff --git a/src/lib-index/mail-index.h b/src/lib-index/mail-index.h index 4e0f2975d6..4476ee0a57 100644 --- a/src/lib-index/mail-index.h +++ b/src/lib-index/mail-index.h @@ -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; };