]> git.ipfire.org Git - thirdparty/dovecot/core.git/commitdiff
lib-storage: Added MAILBOX_TRANSACTION_FLAG_NO_CACHE_DEC and use it when precaching.
authorTimo Sirainen <tss@iki.fi>
Tue, 30 Aug 2011 01:31:28 +0000 (04:31 +0300)
committerTimo Sirainen <tss@iki.fi>
Tue, 30 Aug 2011 01:31:28 +0000 (04:31 +0300)
The result is that "doveadm index" no longer changes caching decisions.

src/lib-storage/index/index-sync.c
src/lib-storage/index/index-transaction.c
src/lib-storage/mail-storage.h

index 230910285d04d02527ec904f8e9118fffa96e619..7d3082f31eb56271d52c5ab75dfd70f5bb961f8f 100644 (file)
@@ -398,7 +398,7 @@ static int cache_add(struct mailbox *box, enum cache_mask cache)
 
        /* find the first message we need to index */
        mailbox_get_open_status(box, STATUS_MESSAGES, &status);
-       trans = mailbox_transaction_begin(box, 0);
+       trans = mailbox_transaction_begin(box, MAILBOX_TRANSACTION_FLAG_NO_CACHE_DEC);
        mail = mail_alloc(trans, 0, NULL);
        for (seq = status.messages; seq > 0; seq--) {
                mail_set_seq(mail, seq);
index fca22d0bfaa54e9e5767e54d02381672dfbd0d8a..2507d5687dfde7cc81087104872d997c4f9db769 100644 (file)
@@ -85,6 +85,9 @@ void index_transaction_init(struct mailbox_transaction_context *t,
        t->cache_view = mail_cache_view_open(box->cache, t->view);
        t->cache_trans = mail_cache_get_transaction(t->cache_view, t->itrans);
 
+       if ((flags & MAILBOX_TRANSACTION_FLAG_NO_CACHE_DEC) != 0)
+               mail_cache_view_update_cache_decisions(t->cache_view, FALSE);
+
        /* set up after mail_cache_get_transaction(), so that we'll still
           have the cache_trans available in _index_commit() */
        t->super = t->itrans->v;
index 70826ef5af28f858d390df5e74fa7becb8a45e45..5d8197f6aa81216b91a94477b694e5af6cb8b023 100644 (file)
@@ -152,7 +152,10 @@ enum mailbox_transaction_flags {
           is done only if it can be done easily. */
        MAILBOX_TRANSACTION_FLAG_ASSIGN_UIDS    = 0x04,
        /* Refresh the index so lookups return latest flags/modseqs */
-       MAILBOX_TRANSACTION_FLAG_REFRESH        = 0x08
+       MAILBOX_TRANSACTION_FLAG_REFRESH        = 0x08,
+       /* Don't update caching decisions no matter what we do in this
+          transaction (useful for e.g. precaching) */
+       MAILBOX_TRANSACTION_FLAG_NO_CACHE_DEC   = 0x10
 };
 
 enum mailbox_sync_flags {