dovecot-2.2: lib-storage: Moved most of the \Recent flag handlin...
dovecot at dovecot.org
dovecot at dovecot.org
Wed Aug 19 09:57:43 UTC 2015
details: http://hg.dovecot.org/dovecot-2.2/rev/f78bd5be4e47
changeset: 18975:f78bd5be4e47
user: Timo Sirainen <tss at iki.fi>
date: Wed Aug 19 12:56:55 2015 +0300
description:
lib-storage: Moved most of the \Recent flag handling code to mailbox-recent-flags.c
There are also some API changes, because functions were renamed and the
recent_* fields were moved to struct mailbox. I'm not aware of any plugins
using these though, except for index_mailbox_set_recent_seq() which for now
is kept as a backwards compatibility macro.
No changes were made to the actual code logic.
diffstat:
src/lib-storage/Makefile.am | 2 +
src/lib-storage/index/cydir/cydir-sync.c | 4 +-
src/lib-storage/index/dbox-multi/mdbox-sync.c | 6 +-
src/lib-storage/index/dbox-single/sdbox-sync.c | 2 +-
src/lib-storage/index/index-mail.c | 4 +-
src/lib-storage/index/index-rebuild.c | 2 +-
src/lib-storage/index/index-search.c | 2 +-
src/lib-storage/index/index-status.c | 2 +-
src/lib-storage/index/index-storage.c | 5 -
src/lib-storage/index/index-storage.h | 15 +-
src/lib-storage/index/index-sync.c | 120 +-------------------
src/lib-storage/index/maildir/maildir-save.c | 2 +-
src/lib-storage/index/maildir/maildir-sync-index.c | 4 +-
src/lib-storage/index/maildir/maildir-util.c | 2 +-
src/lib-storage/index/mbox/mbox-file.c | 3 +-
src/lib-storage/index/mbox/mbox-sync.c | 6 +-
src/lib-storage/index/pop3c/pop3c-sync.c | 2 +-
src/lib-storage/index/raw/raw-sync.c | 2 +-
src/lib-storage/mail-storage-private.h | 5 +
src/lib-storage/mail-storage.c | 5 +
src/lib-storage/mailbox-recent-flags.c | 93 ++++++++++++++++
src/lib-storage/mailbox-recent-flags.h | 17 ++
src/plugins/virtual/virtual-sync.c | 4 +-
23 files changed, 161 insertions(+), 148 deletions(-)
diffs (truncated from 628 to 300 lines):
diff -r 0f442376beae -r f78bd5be4e47 src/lib-storage/Makefile.am
--- a/src/lib-storage/Makefile.am Wed Aug 19 11:34:36 2015 +0300
+++ b/src/lib-storage/Makefile.am Wed Aug 19 12:56:55 2015 +0300
@@ -51,6 +51,7 @@
mailbox-keywords.c \
mailbox-list.c \
mailbox-list-notify.c \
+ mailbox-recent-flags.c \
mailbox-search-result.c \
mailbox-tree.c \
mailbox-uidvalidity.c
@@ -79,6 +80,7 @@
mailbox-list-iter.h \
mailbox-list-private.h \
mailbox-list-notify.h \
+ mailbox-recent-flags.h \
mailbox-search-result-private.h \
mailbox-tree.h \
mailbox-uidvalidity.h
diff -r 0f442376beae -r f78bd5be4e47 src/lib-storage/index/cydir/cydir-sync.c
--- a/src/lib-storage/index/cydir/cydir-sync.c Wed Aug 19 11:34:36 2015 +0300
+++ b/src/lib-storage/index/cydir/cydir-sync.c Wed Aug 19 12:56:55 2015 +0300
@@ -71,8 +71,8 @@
/* mark the newly seen messages as recent */
if (mail_index_lookup_seq_range(ctx->sync_view, hdr->first_recent_uid,
hdr->next_uid, &seq1, &seq2)) {
- index_mailbox_set_recent_seq(&ctx->mbox->box, ctx->sync_view,
- seq1, seq2);
+ mailbox_recent_flags_set_seqs(&ctx->mbox->box, ctx->sync_view,
+ seq1, seq2);
}
while (mail_index_sync_next(ctx->index_sync_ctx, &sync_rec)) {
diff -r 0f442376beae -r f78bd5be4e47 src/lib-storage/index/dbox-multi/mdbox-sync.c
--- a/src/lib-storage/index/dbox-multi/mdbox-sync.c Wed Aug 19 11:34:36 2015 +0300
+++ b/src/lib-storage/index/dbox-multi/mdbox-sync.c Wed Aug 19 12:56:55 2015 +0300
@@ -154,8 +154,8 @@
/* mark the newly seen messages as recent */
if (mail_index_lookup_seq_range(ctx->sync_view, hdr->first_recent_uid,
hdr->next_uid, &seq1, &seq2)) {
- index_mailbox_set_recent_seq(&ctx->mbox->box, ctx->sync_view,
- seq1, seq2);
+ mailbox_recent_flags_set_seqs(&ctx->mbox->box, ctx->sync_view,
+ seq1, seq2);
}
/* handle syncing records without map being locked. */
@@ -242,7 +242,7 @@
if (rebuild && (flags & MDBOX_SYNC_FLAG_NO_REBUILD) == 0) {
if (mdbox_storage_rebuild_in_context(mbox->storage, atomic) < 0)
return -1;
- index_mailbox_reset_uidvalidity(&mbox->box);
+ mailbox_recent_flags_reset(&mbox->box);
storage_rebuilt = TRUE;
}
diff -r 0f442376beae -r f78bd5be4e47 src/lib-storage/index/dbox-single/sdbox-sync.c
--- a/src/lib-storage/index/dbox-single/sdbox-sync.c Wed Aug 19 11:34:36 2015 +0300
+++ b/src/lib-storage/index/dbox-single/sdbox-sync.c Wed Aug 19 12:56:55 2015 +0300
@@ -125,7 +125,7 @@
/* mark the newly seen messages as recent */
if (mail_index_lookup_seq_range(ctx->sync_view, hdr->first_recent_uid,
hdr->next_uid, &seq1, &seq2))
- index_mailbox_set_recent_seq(box, ctx->sync_view, seq1, seq2);
+ mailbox_recent_flags_set_seqs(box, ctx->sync_view, seq1, seq2);
while (mail_index_sync_next(ctx->index_sync_ctx, &sync_rec))
sdbox_sync_add(ctx, &sync_rec);
diff -r 0f442376beae -r f78bd5be4e47 src/lib-storage/index/index-mail.c
--- a/src/lib-storage/index/index-mail.c Wed Aug 19 11:34:36 2015 +0300
+++ b/src/lib-storage/index/index-mail.c Wed Aug 19 12:56:55 2015 +0300
@@ -195,7 +195,7 @@
flags = rec->flags & (MAIL_FLAGS_NONRECENT |
MAIL_INDEX_MAIL_FLAG_BACKEND);
- if (index_mailbox_is_recent(_mail->box, _mail->uid))
+ if (mailbox_recent_flags_have_uid(_mail->box, _mail->uid))
flags |= MAIL_RECENT;
if (index_mail_get_pvt(_mail)) {
@@ -1980,7 +1980,7 @@
bool update_modseq = FALSE;
if ((flags & MAIL_RECENT) == 0 &&
- index_mailbox_is_recent(_mail->box, _mail->uid))
+ mailbox_recent_flags_have_uid(_mail->box, _mail->uid))
index_mail_drop_recent_flag(_mail);
flags &= MAIL_FLAGS_NONRECENT | MAIL_INDEX_MAIL_FLAG_BACKEND;
diff -r 0f442376beae -r f78bd5be4e47 src/lib-storage/index/index-rebuild.c
--- a/src/lib-storage/index/index-rebuild.c Wed Aug 19 11:34:36 2015 +0300
+++ b/src/lib-storage/index/index-rebuild.c Wed Aug 19 12:56:55 2015 +0300
@@ -157,7 +157,7 @@
ctx->view = view;
ctx->trans = trans;
mail_index_reset(ctx->trans);
- index_mailbox_reset_uidvalidity(box);
+ mailbox_recent_flags_reset(box);
(void)mail_index_ext_lookup(box->index, "cache", &ctx->cache_ext_id);
/* open cache and read the caching decisions. */
diff -r 0f442376beae -r f78bd5be4e47 src/lib-storage/index/index-search.c
--- a/src/lib-storage/index/index-search.c Wed Aug 19 11:34:36 2015 +0300
+++ b/src/lib-storage/index/index-search.c Wed Aug 19 12:56:55 2015 +0300
@@ -178,7 +178,7 @@
may contain it. */
flags = rec->flags & ~MAIL_RECENT;
if ((arg->value.flags & MAIL_RECENT) != 0 &&
- index_mailbox_is_recent(ctx->box, rec->uid))
+ mailbox_recent_flags_have_uid(ctx->box, rec->uid))
flags |= MAIL_RECENT;
if (ctx->box->view_pvt == NULL) {
/* no private view (set by view syncing) ->
diff -r 0f442376beae -r f78bd5be4e47 src/lib-storage/index/index-status.c
--- a/src/lib-storage/index/index-status.c Wed Aug 19 11:34:36 2015 +0300
+++ b/src/lib-storage/index/index-status.c Wed Aug 19 12:56:55 2015 +0300
@@ -126,7 +126,7 @@
synced yet */
index_sync_update_recent_count(box);
}
- status_r->recent = index_mailbox_get_recent_count(box);
+ status_r->recent = mailbox_recent_flags_count(box);
i_assert(status_r->recent <= status_r->messages);
}
if ((items & STATUS_UNSEEN) != 0) {
diff -r 0f442376beae -r f78bd5be4e47 src/lib-storage/index/index-storage.c
--- a/src/lib-storage/index/index-storage.c Wed Aug 19 11:34:36 2015 +0300
+++ b/src/lib-storage/index/index-storage.c Wed Aug 19 12:56:55 2015 +0300
@@ -369,11 +369,6 @@
ibox->keyword_names = NULL;
i_free_and_null(ibox->cache_fields);
- if (array_is_created(&ibox->recent_flags))
- array_free(&ibox->recent_flags);
- ibox->recent_flags_prev_uid = 0;
- ibox->recent_flags_count = 0;
-
ibox->sync_last_check = 0;
}
diff -r 0f442376beae -r f78bd5be4e47 src/lib-storage/index/index-storage.h
--- a/src/lib-storage/index/index-storage.h Wed Aug 19 11:34:36 2015 +0300
+++ b/src/lib-storage/index/index-storage.h Wed Aug 19 12:56:55 2015 +0300
@@ -4,6 +4,7 @@
#include "file-dotlock.h"
#include "mail-storage-private.h"
#include "mail-index-private.h"
+#include "mailbox-recent-flags.h" /* FIXME: remove in v2.3 */
#define MAILBOX_FULL_SYNC_INTERVAL 5
@@ -30,9 +31,7 @@
const ARRAY_TYPE(keywords) *keyword_names;
struct mail_cache_field *cache_fields;
- ARRAY_TYPE(seq_range) recent_flags;
- uint32_t recent_flags_prev_uid, recent_flags_last_check_nextuid;
- uint32_t recent_flags_count;
+ uint32_t recent_flags_last_check_nextuid;
time_t sync_last_check;
uint32_t list_index_sync_ext_id;
@@ -76,13 +75,9 @@
bool index_storage_is_readonly(struct mailbox *box);
bool index_storage_is_inconsistent(struct mailbox *box);
-void index_mailbox_set_recent_uid(struct mailbox *box, uint32_t uid);
-void index_mailbox_set_recent_seq(struct mailbox *box,
- struct mail_index_view *view,
- uint32_t seq1, uint32_t seq2);
-bool index_mailbox_is_recent(struct mailbox *box, uint32_t uid);
-unsigned int index_mailbox_get_recent_count(struct mailbox *box);
-void index_mailbox_reset_uidvalidity(struct mailbox *box);
+/* FIXME: for backwards compatibility - remove in v2.3 */
+#define index_mailbox_set_recent_seq(box, view, seq1, seq2) \
+ mailbox_recent_flags_set_seqs(box, view, seq1, seq2)
void index_mailbox_check_add(struct mailbox *box, const char *path);
void index_mailbox_check_remove_all(struct mailbox *box);
diff -r 0f442376beae -r f78bd5be4e47 src/lib-storage/index/index-sync.c
--- a/src/lib-storage/index/index-sync.c Wed Aug 19 11:34:36 2015 +0300
+++ b/src/lib-storage/index/index-sync.c Wed Aug 19 12:56:55 2015 +0300
@@ -51,103 +51,6 @@
return TRUE;
}
-void index_mailbox_set_recent_uid(struct mailbox *box, uint32_t uid)
-{
- struct index_mailbox_context *ibox = INDEX_STORAGE_CONTEXT(box);
-
- if (uid <= ibox->recent_flags_prev_uid) {
- if (seq_range_exists(&ibox->recent_flags, uid))
- return;
-
- mail_storage_set_critical(box->storage,
- "Recent flags state corrupted for mailbox %s",
- box->vname);
- array_clear(&ibox->recent_flags);
- ibox->recent_flags_count = 0;
- }
- ibox->recent_flags_prev_uid = uid;
-
- seq_range_array_add_with_init(&ibox->recent_flags, 64, uid);
- ibox->recent_flags_count++;
-}
-
-void index_mailbox_set_recent_seq(struct mailbox *box,
- struct mail_index_view *view,
- uint32_t seq1, uint32_t seq2)
-{
- uint32_t uid;
-
- for (; seq1 <= seq2; seq1++) {
- mail_index_lookup_uid(view, seq1, &uid);
- index_mailbox_set_recent_uid(box, uid);
- }
-}
-
-bool index_mailbox_is_recent(struct mailbox *box, uint32_t uid)
-{
- struct index_mailbox_context *ibox = INDEX_STORAGE_CONTEXT(box);
-
- return array_is_created(&ibox->recent_flags) &&
- seq_range_exists(&ibox->recent_flags, uid);
-}
-
-void index_mailbox_reset_uidvalidity(struct mailbox *box)
-{
- struct index_mailbox_context *ibox = INDEX_STORAGE_CONTEXT(box);
-
- /* can't trust the currently cached recent flags anymore */
- if (array_is_created(&ibox->recent_flags))
- array_clear(&ibox->recent_flags);
- ibox->recent_flags_count = 0;
- ibox->recent_flags_prev_uid = 0;
-}
-
-unsigned int index_mailbox_get_recent_count(struct mailbox *box)
-{
- struct index_mailbox_context *ibox = INDEX_STORAGE_CONTEXT(box);
- const struct mail_index_header *hdr;
- const struct seq_range *range;
- unsigned int i, count, recent_count;
-
- if (!array_is_created(&ibox->recent_flags))
- return 0;
-
- hdr = mail_index_get_header(box->view);
- recent_count = ibox->recent_flags_count;
- range = array_get(&ibox->recent_flags, &count);
- for (i = count; i > 0; ) {
- i--;
- if (range[i].seq2 < hdr->next_uid)
- break;
-
- if (range[i].seq1 >= hdr->next_uid) {
- /* completely invisible to this view */
- recent_count -= range[i].seq2 - range[i].seq1 + 1;
- } else {
- /* partially invisible */
- recent_count -= range[i].seq2 - hdr->next_uid + 1;
- break;
- }
- }
- return recent_count;
-}
-
-static void
-index_mailbox_expunge_recent(struct mailbox *box, uint32_t seq1, uint32_t seq2)
-{
- struct index_mailbox_context *ibox = INDEX_STORAGE_CONTEXT(box);
- uint32_t uid;
-
- if (!array_is_created(&ibox->recent_flags))
- return;
-
- for (; seq1 <= seq2; seq1++) {
- mail_index_lookup_uid(box->view, seq1, &uid);
- if (seq_range_array_remove(&ibox->recent_flags, uid))
- ibox->recent_flags_count--;
- }
-}
-
static void index_view_sync_recs_get(struct index_mailbox_sync_context *ctx)
{
struct mail_index_view_sync_rec sync_rec;
@@ -264,7 +167,7 @@
range = array_idx(ctx->expunges, ctx->expunge_pos);
i_assert(range->seq2 <= ctx->messages_count);
- index_mailbox_expunge_recent(ctx->ctx.box, range->seq1, range->seq2);
+ mailbox_recent_flags_expunge_seqs(ctx->ctx.box, range->seq1, range->seq2);
ctx->messages_count -= range->seq2 - range->seq1 + 1;
sync_rec_r->seq1 = range->seq1;
@@ -310,13 +213,12 @@
static void
index_mailbox_expunge_unseen_recent(struct index_mailbox_sync_context *ctx)
{
- struct index_mailbox_context *ibox =
More information about the dovecot-cvs
mailing list