Mercurial > dovecot > core-2.2
changeset 22319:0bd8a7224ec8
lib-storage: Avoid index refresh with mailbox_list_index_very_dirty_syncs=yes
author | Timo Sirainen <timo.sirainen@dovecot.fi> |
---|---|
date | Thu, 06 Jul 2017 19:00:35 +0300 |
parents | 8d4bf24c6cbc |
children | 4f99fd557c92 |
files | src/lib-storage/list/mailbox-list-index-sync.c src/lib-storage/list/mailbox-list-index-sync.h src/lib-storage/list/mailbox-list-index.c |
diffstat | 3 files changed, 14 insertions(+), 6 deletions(-) [+] |
line wrap: on
line diff
--- a/src/lib-storage/list/mailbox-list-index-sync.c Thu Jul 06 17:48:19 2017 +0300 +++ b/src/lib-storage/list/mailbox-list-index-sync.c Thu Jul 06 19:00:35 2017 +0300 @@ -448,7 +448,7 @@ return ret; } -int mailbox_list_index_sync(struct mailbox_list *list) +int mailbox_list_index_sync(struct mailbox_list *list, bool refresh) { struct mailbox_list_index_sync_context *sync_ctx; int ret = 0; @@ -456,8 +456,15 @@ if (mailbox_list_index_sync_begin(list, &sync_ctx) < 0) return -1; - if (sync_ctx->ilist->has_backing_store) + if (!sync_ctx->ilist->has_backing_store) { + /* no backing store - we have nothing to sync to */ + } else if (refresh || + sync_ctx->ilist->call_corruption_callback || + sync_ctx->ilist->corrupted_names_or_parents || + !sync_ctx->list->mail_set->mailbox_list_index_very_dirty_syncs) { + /* sync the index against the backing store */ ret = mailbox_list_index_sync_list(sync_ctx); + } return mailbox_list_index_sync_end(&sync_ctx, ret == 0); }
--- a/src/lib-storage/list/mailbox-list-index-sync.h Thu Jul 06 17:48:19 2017 +0300 +++ b/src/lib-storage/list/mailbox-list-index-sync.h Thu Jul 06 19:00:35 2017 +0300 @@ -21,7 +21,7 @@ struct mailbox_list_index_sync_context **sync_ctx_r); int mailbox_list_index_sync_end(struct mailbox_list_index_sync_context **_sync_ctx, bool success); -int mailbox_list_index_sync(struct mailbox_list *list); +int mailbox_list_index_sync(struct mailbox_list *list, bool refresh); /* Add name to index, return seq in index. */ uint32_t mailbox_list_index_sync_name(struct mailbox_list_index_sync_context *ctx,
--- a/src/lib-storage/list/mailbox-list-index.c Thu Jul 06 17:48:19 2017 +0300 +++ b/src/lib-storage/list/mailbox-list-index.c Thu Jul 06 19:00:35 2017 +0300 @@ -504,6 +504,7 @@ struct mailbox_list_index *ilist = INDEX_LIST_CONTEXT(list); struct mail_index_view *view; int ret; + bool refresh; i_assert(!ilist->syncing); @@ -516,10 +517,10 @@ } view = mail_index_view_open(ilist->index); - if (ilist->mailbox_tree == NULL || - mailbox_list_index_need_refresh(ilist, view)) { + if ((refresh = mailbox_list_index_need_refresh(ilist, view)) || + ilist->mailbox_tree == NULL) { /* refresh list of mailboxes */ - ret = mailbox_list_index_sync(list); + ret = mailbox_list_index_sync(list, refresh); } else { ret = mailbox_list_index_parse(list, view, FALSE); }