dovecot: mail_index_sync_begin() takes now flags parameter inste...

dovecot at dovecot.org dovecot at dovecot.org
Tue Jun 19 16:33:09 EEST 2007


details:   http://hg.dovecot.org/dovecot/rev/b25c9ca2142b
changeset: 5779:b25c9ca2142b
user:      Timo Sirainen <tss at iki.fi>
date:      Tue Jun 19 16:33:05 2007 +0300
description:
mail_index_sync_begin() takes now flags parameter instead of two booleans.
Cleanups to recent handling.

diffstat:

10 files changed, 42 insertions(+), 52 deletions(-)
src/lib-index/mail-index-sync-update.c         |   20 ----------------
src/lib-index/mail-index-sync.c                |   30 ++++++++----------------
src/lib-index/mail-index.h                     |    9 ++++++-
src/lib-index/mailbox-list-index-sync.c        |    2 -
src/lib-storage/index/cydir/cydir-sync.c       |    9 +++++--
src/lib-storage/index/dbox/dbox-save.c         |    2 -
src/lib-storage/index/dbox/dbox-sync.c         |    7 ++++-
src/lib-storage/index/maildir/maildir-sync.c   |    3 --
src/lib-storage/index/mbox/mbox-sync.c         |    9 +++++--
src/lib-storage/list/index-mailbox-list-sync.c |    3 --

diffs (288 lines):

diff -r 3d4344ad057c -r b25c9ca2142b src/lib-index/mail-index-sync-update.c
--- a/src/lib-index/mail-index-sync-update.c	Tue Jun 19 16:20:19 2007 +0300
+++ b/src/lib-index/mail-index-sync-update.c	Tue Jun 19 16:33:05 2007 +0300
@@ -637,26 +637,6 @@ void mail_index_sync_map_deinit(struct m
 	if (sync_map_ctx->expunge_handlers_used)
 		mail_index_sync_deinit_expunge_handlers(sync_map_ctx);
 	mail_index_sync_deinit_handlers(sync_map_ctx);
-}
-
-static void mail_index_sync_remove_recent(struct mail_index_sync_map_ctx *ctx)
-{
-	struct mail_index_map *map = ctx->view->map;
-	struct mail_index_record *rec;
-	unsigned int i;
-
-	for (i = 0; i < map->records_count; i++) {
-		rec = MAIL_INDEX_MAP_IDX(map, i);
-		if ((rec->flags & MAIL_RECENT) != 0) {
-			rec->flags &= ~MAIL_RECENT;
-
-			mail_index_sync_write_seq_update(ctx, i + 1, i + 1);
-		}
-	}
-
-	map->hdr.recent_messages_count = 0;
-	map->hdr.first_recent_uid_lowwater = map->hdr.next_uid;
-	map->write_base_header = TRUE;
 }
 
 static void mail_index_sync_update_hdr_dirty_flag(struct mail_index_map *map)
diff -r 3d4344ad057c -r b25c9ca2142b src/lib-index/mail-index-sync.c
--- a/src/lib-index/mail-index-sync.c	Tue Jun 19 16:20:19 2007 +0300
+++ b/src/lib-index/mail-index-sync.c	Tue Jun 19 16:33:05 2007 +0300
@@ -28,8 +28,6 @@ struct mail_index_sync_ctx {
 	unsigned int lock_id;
 
 	unsigned int sync_appends:1;
-	unsigned int sync_recent:1;
-	unsigned int sync_dirty:1;
 };
 
 static void mail_index_sync_add_expunge(struct mail_index_sync_ctx *ctx)
@@ -192,12 +190,6 @@ static int mail_index_sync_add_recent_up
 		}
 	}
 
-	if (!seen_recent) {
-		/* no recent messages, drop the sync_recent flag so we
-		   don't scan through the messages again */
-		ctx->sync_recent = FALSE;
-	}
-
 	return 0;
 }
 
@@ -215,7 +207,8 @@ mail_index_sync_update_mailbox_pos(struc
 }
 
 static int
-mail_index_sync_read_and_sort(struct mail_index_sync_ctx *ctx)
+mail_index_sync_read_and_sort(struct mail_index_sync_ctx *ctx,
+			      enum mail_index_sync_flags flags)
 {
 	struct mail_index_transaction *sync_trans = ctx->sync_trans;
 	struct mail_index_sync_list *synclist;
@@ -224,13 +217,13 @@ mail_index_sync_read_and_sort(struct mai
 	int ret;
 
 	if ((ctx->view->map->hdr.flags & MAIL_INDEX_HDR_FLAG_HAVE_DIRTY) &&
-	    ctx->sync_dirty) {
+	    (flags & MAIL_INDEX_SYNC_FLAG_FLUSH_DIRTY) != 0) {
 		/* show dirty flags as flag updates */
 		if (mail_index_sync_add_dirty_updates(ctx) < 0)
 			return -1;
 	}
 
-	if (ctx->sync_recent) {
+	if ((flags & MAIL_INDEX_SYNC_FLAG_DROP_RECENT) != 0) {
 		if (mail_index_sync_add_recent_updates(ctx) < 0)
 			return -1;
 	}
@@ -292,11 +285,12 @@ mail_index_sync_read_and_sort(struct mai
 
 static bool
 mail_index_need_sync(struct mail_index *index,
-		     const struct mail_index_header *hdr, bool sync_recent,
+		     const struct mail_index_header *hdr,
+		     enum mail_index_sync_flags flags,
 		     uint32_t log_file_seq, uoff_t log_file_offset)
 {
-	// FIXME: how's this recent syncing supposed to work?
-	if (sync_recent && hdr->recent_messages_count > 0)
+	if (hdr->recent_messages_count > 0 &&
+	    (flags & MAIL_INDEX_SYNC_FLAG_DROP_RECENT) != 0)
 		return TRUE;
 
 	if (hdr->log_file_seq < log_file_seq ||
@@ -338,7 +332,7 @@ int mail_index_sync_begin(struct mail_in
 			  struct mail_index_view **view_r,
 			  struct mail_index_transaction **trans_r,
 			  uint32_t log_file_seq, uoff_t log_file_offset,
-			  bool sync_recent, bool sync_dirty)
+			  enum mail_index_sync_flags flags)
 {
 	const struct mail_index_header *hdr;
 	struct mail_index_sync_ctx *ctx;
@@ -365,7 +359,7 @@ int mail_index_sync_begin(struct mail_in
 	}
 	hdr = &index->map->hdr;
 
-	if (!mail_index_need_sync(index, hdr, sync_recent,
+	if (!mail_index_need_sync(index, hdr, flags,
 				  log_file_seq, log_file_offset)) {
 		mail_index_unlock(index, lock_id);
 		mail_transaction_log_sync_unlock(index->log);
@@ -389,8 +383,6 @@ int mail_index_sync_begin(struct mail_in
 	ctx = i_new(struct mail_index_sync_ctx, 1);
 	ctx->index = index;
 	ctx->lock_id = lock_id;
-	ctx->sync_recent = sync_recent;
-	ctx->sync_dirty = sync_dirty;
 	ctx->last_tail_seq = hdr->log_file_seq;
 	ctx->last_tail_offset = hdr->log_file_tail_offset;
 
@@ -410,7 +402,7 @@ int mail_index_sync_begin(struct mail_in
 
 	/* we need to have all the transactions sorted to optimize
 	   caller's mailbox access patterns */
-	if (mail_index_sync_read_and_sort(ctx) < 0) {
+	if (mail_index_sync_read_and_sort(ctx, flags) < 0) {
                 mail_index_sync_rollback(&ctx);
 		return -1;
 	}
diff -r 3d4344ad057c -r b25c9ca2142b src/lib-index/mail-index.h
--- a/src/lib-index/mail-index.h	Tue Jun 19 16:20:19 2007 +0300
+++ b/src/lib-index/mail-index.h	Tue Jun 19 16:33:05 2007 +0300
@@ -105,6 +105,13 @@ enum mail_index_sync_type {
 	MAIL_INDEX_SYNC_TYPE_KEYWORD_ADD	= 0x08,
 	MAIL_INDEX_SYNC_TYPE_KEYWORD_REMOVE	= 0x10,
 	MAIL_INDEX_SYNC_TYPE_KEYWORD_RESET	= 0x20
+};
+
+enum mail_index_sync_flags {
+	/* Resync all dirty messages' flags. */
+	MAIL_INDEX_SYNC_FLAG_FLUSH_DIRTY	= 0x01,
+	/* Drop recent flags from all messages */
+	MAIL_INDEX_SYNC_FLAG_DROP_RECENT	= 0x02
 };
 
 enum mail_index_view_sync_flags {
@@ -234,7 +241,7 @@ int mail_index_sync_begin(struct mail_in
 			  struct mail_index_view **view_r,
 			  struct mail_index_transaction **trans_r,
 			  uint32_t log_file_seq, uoff_t log_file_offset,
-			  bool sync_recent, bool sync_dirty);
+			  enum mail_index_sync_flags flags);
 /* Returns -1 if error, 0 if sync is finished, 1 if record was filled. */
 int mail_index_sync_next(struct mail_index_sync_ctx *ctx,
 			 struct mail_index_sync_rec *sync_rec);
diff -r 3d4344ad057c -r b25c9ca2142b src/lib-index/mailbox-list-index-sync.c
--- a/src/lib-index/mailbox-list-index-sync.c	Tue Jun 19 16:20:19 2007 +0300
+++ b/src/lib-index/mailbox-list-index-sync.c	Tue Jun 19 16:33:05 2007 +0300
@@ -333,7 +333,7 @@ static int sync_mail_sync_init(struct ma
 
 	if (mail_index_sync_begin(ctx->index->mail_index, &ctx->mail_sync_ctx,
 				  &ctx->mail_view, &ctx->trans, (uint32_t)-1, 0,
-				  FALSE, FALSE) < 0)
+				  0) < 0)
 		return -1;
 
 	/* we should have only external transactions in here, for which we
diff -r 3d4344ad057c -r b25c9ca2142b src/lib-storage/index/cydir/cydir-sync.c
--- a/src/lib-storage/index/cydir/cydir-sync.c	Tue Jun 19 16:20:19 2007 +0300
+++ b/src/lib-storage/index/cydir/cydir-sync.c	Tue Jun 19 16:33:05 2007 +0300
@@ -117,14 +117,19 @@ int cydir_sync_begin(struct cydir_mailbo
 		     struct cydir_sync_context **ctx_r)
 {
 	struct cydir_sync_context *ctx;
+	enum mail_index_sync_flags sync_flags;
 	int ret;
 
 	ctx = i_new(struct cydir_sync_context, 1);
 	ctx->mbox = mbox;
+
+	sync_flags = MAIL_INDEX_SYNC_FLAG_FLUSH_DIRTY;
+	if (!mbox->ibox.keep_recent)
+		sync_flags |= MAIL_INDEX_SYNC_FLAG_DROP_RECENT;
+
 	ret = mail_index_sync_begin(mbox->ibox.index, &ctx->index_sync_ctx,
 				    &ctx->sync_view, &ctx->trans,
-				    (uint32_t)-1, (uoff_t)-1,
-				    !mbox->ibox.keep_recent, TRUE);
+				    (uint32_t)-1, (uoff_t)-1, sync_flags);
 	if (ret <= 0) {
 		if (ret < 0)
 			mail_storage_set_index_error(&mbox->ibox);
diff -r 3d4344ad057c -r b25c9ca2142b src/lib-storage/index/dbox/dbox-save.c
--- a/src/lib-storage/index/dbox/dbox-save.c	Tue Jun 19 16:20:19 2007 +0300
+++ b/src/lib-storage/index/dbox/dbox-save.c	Tue Jun 19 16:33:05 2007 +0300
@@ -373,7 +373,7 @@ int dbox_transaction_save_commit_pre(str
 	/* lock index lock before dropping uidlist lock in _append_commit() */
 	if (mail_index_sync_begin(ctx->mbox->ibox.index, &ctx->index_sync_ctx,
 				  &view, &ctx->trans, (uint32_t)-1, (uoff_t)-1,
-				  FALSE, FALSE) < 0) {
+				  0) < 0) {
 		ctx->failed = TRUE;
 		dbox_transaction_save_rollback(ctx);
 		return -1;
diff -r 3d4344ad057c -r b25c9ca2142b src/lib-storage/index/dbox/dbox-sync.c
--- a/src/lib-storage/index/dbox/dbox-sync.c	Tue Jun 19 16:20:19 2007 +0300
+++ b/src/lib-storage/index/dbox/dbox-sync.c	Tue Jun 19 16:33:05 2007 +0300
@@ -486,6 +486,7 @@ static int dbox_sync_init(struct dbox_ma
 			  struct dbox_sync_context *ctx, bool *force)
 {
 	const struct mail_index_header *hdr;
+	enum mail_index_sync_flags sync_flags;
 	time_t mtime;
 	int ret;
 
@@ -497,10 +498,12 @@ static int dbox_sync_init(struct dbox_ma
 				   &mtime) < 0)
 		return -1;
 
+	sync_flags = MAIL_INDEX_SYNC_FLAG_FLUSH_DIRTY;
+	if (!mbox->ibox.keep_recent)
+		sync_flags |= MAIL_INDEX_SYNC_FLAG_DROP_RECENT;
 	ret = mail_index_sync_begin(mbox->ibox.index, &ctx->index_sync_ctx,
 				    &ctx->sync_view, &ctx->trans,
-				    (uint32_t)-1, (uoff_t)-1,
-				    !mbox->ibox.keep_recent, TRUE);
+				    (uint32_t)-1, (uoff_t)-1, sync_flags);
 	if (ret <= 0) {
 		if (ret < 0)
 			mail_storage_set_index_error(&mbox->ibox);
diff -r 3d4344ad057c -r b25c9ca2142b src/lib-storage/index/maildir/maildir-sync.c
--- a/src/lib-storage/index/maildir/maildir-sync.c	Tue Jun 19 16:20:19 2007 +0300
+++ b/src/lib-storage/index/maildir/maildir-sync.c	Tue Jun 19 16:33:05 2007 +0300
@@ -1009,8 +1009,7 @@ int maildir_sync_index_begin(struct mail
 	struct mail_index_transaction *trans;
 
 	if (mail_index_sync_begin(mbox->ibox.index, &sync_ctx, &view, &trans,
-				  (uint32_t)-1, (uoff_t)-1,
-				  FALSE, FALSE) <= 0) {
+				  (uint32_t)-1, (uoff_t)-1, 0) <= 0) {
 		mail_storage_set_index_error(&mbox->ibox);
 		return -1;
 	}
diff -r 3d4344ad057c -r b25c9ca2142b src/lib-storage/index/mbox/mbox-sync.c
--- a/src/lib-storage/index/mbox/mbox-sync.c	Tue Jun 19 16:20:19 2007 +0300
+++ b/src/lib-storage/index/mbox/mbox-sync.c	Tue Jun 19 16:33:05 2007 +0300
@@ -1695,6 +1695,7 @@ static int mbox_sync_int(struct mbox_mai
 	struct mail_index_view *sync_view;
 	struct mail_index_transaction *trans;
 	struct mbox_sync_context sync_ctx;
+	enum mail_index_sync_flags sync_flags;
 	uint32_t seq;
 	uoff_t offset;
 	unsigned int lock_id = 0;
@@ -1760,10 +1761,14 @@ __again:
 		offset = (uoff_t)-1;
 	}
 
+	sync_flags = 0;
+	if (!mbox->ibox.keep_recent)
+		sync_flags |= MAIL_INDEX_SYNC_FLAG_DROP_RECENT;
+	if ((flags & MBOX_SYNC_REWRITE) != 0)
+		sync_flags |= MAIL_INDEX_SYNC_FLAG_FLUSH_DIRTY;
 	ret = mail_index_sync_begin(mbox->ibox.index, &index_sync_ctx,
 				    &sync_view, &trans, seq, offset,
-				    !mbox->ibox.keep_recent,
-				    (flags & MBOX_SYNC_REWRITE) != 0);
+				    sync_flags);
 	if (ret <= 0) {
 		if (ret < 0)
 			mail_storage_set_index_error(&mbox->ibox);
diff -r 3d4344ad057c -r b25c9ca2142b src/lib-storage/list/index-mailbox-list-sync.c
--- a/src/lib-storage/list/index-mailbox-list-sync.c	Tue Jun 19 16:20:19 2007 +0300
+++ b/src/lib-storage/list/index-mailbox-list-sync.c	Tue Jun 19 16:33:05 2007 +0300
@@ -69,8 +69,7 @@ static int index_list_update_mail_index(
 
 	ret = mail_index_sync_begin(ilist->mail_index,
 				    &mail_sync_ctx, &view, &trans,
-				    ibox->log_seq, ibox->log_offset,
-				    FALSE, FALSE);
+				    ibox->log_seq, ibox->log_offset, 0);
 	if (ret <= 0)
 		return ret;
 


More information about the dovecot-cvs mailing list