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);
 	}