From: Timo Sirainen Date: Mon, 24 Jul 2017 11:17:22 +0000 (+0300) Subject: lib-storage: Add mailbox_list_index_include_inbox setting X-Git-Tag: 2.3.0.rc1~1222 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=e4122867044b44e9715c85ac373dbb1c03e0963d;p=thirdparty%2Fdovecot%2Fcore.git lib-storage: Add mailbox_list_index_include_inbox setting This controls whether to update INBOX's STATUS information in the mailbox list index. It can be useful especially if LISTINDEX points to a tmpfs, but perhaps also in other situations. I considered adding a more generic setting to exclude other mailboxes, but the namespace prefixes and hierarchy separators get a bit complicated with shared mailboxes. It's probably also not very useful to change this for anything but the INBOX. --- diff --git a/doc/example-config/conf.d/10-mail.conf b/doc/example-config/conf.d/10-mail.conf index 3832a7c6be..6d6f5cde4f 100644 --- a/doc/example-config/conf.d/10-mail.conf +++ b/doc/example-config/conf.d/10-mail.conf @@ -227,6 +227,10 @@ namespace inbox { # The results will be automatically fixed once the folders are opened. #mailbox_list_index_very_dirty_syncs = yes +# Should INBOX be kept up-to-date in the mailbox list index? By default it's +# not, because most of the mailbox accesses will open INBOX anyway. +#mailbox_list_index_include_inbox = no + # The minimum number of mails in a mailbox before updates are done to cache # file. This allows optimizing Dovecot's behavior to do less disk writes at # the cost of more disk reads. diff --git a/src/lib-storage/list/mailbox-list-index-status.c b/src/lib-storage/list/mailbox-list-index-status.c index 005f5c91b5..ab03535a5c 100644 --- a/src/lib-storage/list/mailbox-list-index-status.c +++ b/src/lib-storage/list/mailbox-list-index-status.c @@ -27,11 +27,10 @@ struct index_list_changes { struct index_list_storage_module index_list_storage_module = MODULE_CONTEXT_INIT(&mail_storage_module_register); -/* Never update the STATUS information for INBOX. INBOX is almost always opened - anyway, so this just causes extra writes. (Although this could be useful if - somebody has a lot of other users' shared INBOXes.) */ +/* Should the STATUS information for this mailbox not be written to the + mailbox list index? */ #define MAILBOX_IS_NEVER_IN_INDEX(box) \ - ((box)->inbox_any) + ((box)->inbox_any && !(box)->storage->set->mailbox_list_index_include_inbox) static int index_list_open_view(struct mailbox *box, bool status_check, diff --git a/src/lib-storage/mail-storage-settings.c b/src/lib-storage/mail-storage-settings.c index dea6a0dbd1..fd5a206270 100644 --- a/src/lib-storage/mail-storage-settings.c +++ b/src/lib-storage/mail-storage-settings.c @@ -52,6 +52,7 @@ static const struct setting_define mail_storage_setting_defines[] = { DEF(SET_BOOL, mail_nfs_index), DEF(SET_BOOL, mailbox_list_index), DEF(SET_BOOL, mailbox_list_index_very_dirty_syncs), + DEF(SET_BOOL, mailbox_list_index_include_inbox), DEF(SET_BOOL, mail_debug), DEF(SET_BOOL, mail_full_filesystem_access), DEF(SET_BOOL, maildir_stat_dirs), @@ -94,6 +95,7 @@ const struct mail_storage_settings mail_storage_default_settings = { .mail_nfs_index = FALSE, .mailbox_list_index = TRUE, .mailbox_list_index_very_dirty_syncs = FALSE, + .mailbox_list_index_include_inbox = FALSE, .mail_debug = FALSE, .mail_full_filesystem_access = FALSE, .maildir_stat_dirs = FALSE, diff --git a/src/lib-storage/mail-storage-settings.h b/src/lib-storage/mail-storage-settings.h index 409669d26d..288ad69572 100644 --- a/src/lib-storage/mail-storage-settings.h +++ b/src/lib-storage/mail-storage-settings.h @@ -38,6 +38,7 @@ struct mail_storage_settings { bool mail_nfs_index; bool mailbox_list_index; bool mailbox_list_index_very_dirty_syncs; + bool mailbox_list_index_include_inbox; bool mail_debug; bool mail_full_filesystem_access; bool maildir_stat_dirs;