dovecot: mail_index_view_sync_begin() can now sync only all or a...

dovecot at dovecot.org dovecot at dovecot.org
Mon Jun 18 00:34:26 EEST 2007


details:   http://hg.dovecot.org/dovecot/rev/4dcb14706561
changeset: 5764:4dcb14706561
user:      Timo Sirainen <tss at iki.fi>
date:      Mon Jun 18 00:34:20 2007 +0300
description:
mail_index_view_sync_begin() can now sync only all or all but expunges.
Changed sync_type to be flags.

diffstat:

4 files changed, 14 insertions(+), 35 deletions(-)
src/lib-index/mail-index-view-sync.c      |   26 ++++++--------------------
src/lib-index/mail-index.h                |   10 +++-------
src/lib-storage/index/index-sync.c        |   10 ++++------
src/lib-storage/list/index-mailbox-list.c |    3 +--

diffs (145 lines):

diff -r 2f0d30828c14 -r 4dcb14706561 src/lib-index/mail-index-view-sync.c
--- a/src/lib-index/mail-index-view-sync.c	Mon Jun 18 00:29:00 2007 +0300
+++ b/src/lib-index/mail-index-view-sync.c	Mon Jun 18 00:34:20 2007 +0300
@@ -259,7 +259,7 @@ static void mail_index_view_check(struct
 	 (hdr)->log_file_head_offset == (tail_offset))
 
 int mail_index_view_sync_begin(struct mail_index_view *view,
-                               enum mail_index_view_sync_type sync_type,
+                               enum mail_index_view_sync_flags flags,
 			       struct mail_index_view_sync_ctx **ctx_r)
 {
 	struct mail_index_view_sync_ctx *ctx;
@@ -268,7 +268,6 @@ int mail_index_view_sync_begin(struct ma
 	uoff_t tail_offset;
 	enum mail_transaction_type visible_mask = 0;
 	ARRAY_TYPE(seq_range) expunges = ARRAY_INIT;
-	bool drop_appends;
 
 	i_assert(!view->syncing);
 	i_assert(view->transactions == 0);
@@ -276,25 +275,14 @@ int mail_index_view_sync_begin(struct ma
 	if (mail_index_view_lock_head(view) < 0)
 		return -1;
 
-	if (sync_type == MAIL_INDEX_VIEW_SYNC_TYPE_ALL) {
+	if ((flags & MAIL_INDEX_VIEW_SYNC_FLAG_NOEXPUNGES) == 0) {
 		/* get list of all expunges first */
 		if (view_sync_get_expunges(view, &expunges) < 0)
 			return -1;
-	}
-
-	/* only flags, appends and expunges can be left to be synced later */
-	switch (sync_type) {
-	case MAIL_INDEX_VIEW_SYNC_TYPE_ALL:
 		visible_mask = MAIL_TRANSACTION_VISIBLE_SYNC_MASK;
-		break;
-	case MAIL_INDEX_VIEW_SYNC_TYPE_NOAPPENDS_NOEXPUNGES:
-		visible_mask = MAIL_TRANSACTION_VISIBLE_SYNC_MASK &
-			~(MAIL_TRANSACTION_EXPUNGE | MAIL_TRANSACTION_APPEND);
-		break;
-	case MAIL_INDEX_VIEW_SYNC_TYPE_NOEXPUNGES:
+	} else {
 		visible_mask = MAIL_TRANSACTION_VISIBLE_SYNC_MASK &
 			~MAIL_TRANSACTION_EXPUNGE;
-		break;
 	}
 
 	if (view_sync_set_log_view_range(view) < 0) {
@@ -310,7 +298,7 @@ int mail_index_view_sync_begin(struct ma
 	mail_index_sync_map_init(&ctx->sync_map_ctx, view,
 				 MAIL_INDEX_SYNC_HANDLER_VIEW);
 
-	if (sync_type == MAIL_INDEX_VIEW_SYNC_TYPE_ALL) {
+	if ((flags & MAIL_INDEX_VIEW_SYNC_FLAG_NOEXPUNGES) == 0) {
 		view->sync_new_map = view->index->map;
 		view->sync_new_map->refcount++;
 
@@ -352,9 +340,7 @@ int mail_index_view_sync_begin(struct ma
 			!VIEW_IS_SYNCED_TO_SAME(&view->map->hdr,
 						tail_seq, tail_offset);
 
-		drop_appends = ctx->sync_map_update || sync_type ==
-			MAIL_INDEX_VIEW_SYNC_TYPE_NOAPPENDS_NOEXPUNGES;
-		if (drop_appends) {
+		if (ctx->sync_map_update) {
 			/* Copy only the mails that we see currently, since
 			   we're going to append the new ones when we see
 			   their transactions. */
@@ -376,7 +362,7 @@ int mail_index_view_sync_begin(struct ma
 		mail_index_unmap(view->index, &view->map);
 		view->map = map;
 
-		if (drop_appends) {
+		if (ctx->sync_map_update) {
 			/* Start the sync using our old view's header.
 			   The old view->hdr may differ from map->hdr if
 			   another view sharing the map with us had synced
diff -r 2f0d30828c14 -r 4dcb14706561 src/lib-index/mail-index.h
--- a/src/lib-index/mail-index.h	Mon Jun 18 00:29:00 2007 +0300
+++ b/src/lib-index/mail-index.h	Mon Jun 18 00:34:20 2007 +0300
@@ -107,13 +107,9 @@ enum mail_index_sync_type {
 	MAIL_INDEX_SYNC_TYPE_KEYWORD_RESET	= 0x20
 };
 
-enum mail_index_view_sync_type {
-	/* Sync everything */
-	MAIL_INDEX_VIEW_SYNC_TYPE_ALL,
-	/* Don't sync appends or expunges */
-	MAIL_INDEX_VIEW_SYNC_TYPE_NOAPPENDS_NOEXPUNGES,
+enum mail_index_view_sync_flags {
 	/* Don't sync expunges */
-	MAIL_INDEX_VIEW_SYNC_TYPE_NOEXPUNGES
+	MAIL_INDEX_VIEW_SYNC_FLAG_NOEXPUNGES
 };
 
 struct mail_index_sync_rec {
@@ -264,7 +260,7 @@ int mail_index_fsck(struct mail_index *i
    will be marked inconsistent. Only sync_mask type records are
    synchronized. */
 int mail_index_view_sync_begin(struct mail_index_view *view,
-                               enum mail_index_view_sync_type sync_type,
+                               enum mail_index_view_sync_flags flags,
 			       struct mail_index_view_sync_ctx **ctx_r);
 /* Returns -1 if error, 0 if sync is finished, 1 if record was filled. */
 int mail_index_view_sync_next(struct mail_index_view_sync_ctx *ctx,
diff -r 2f0d30828c14 -r 4dcb14706561 src/lib-storage/index/index-sync.c
--- a/src/lib-storage/index/index-sync.c	Mon Jun 18 00:29:00 2007 +0300
+++ b/src/lib-storage/index/index-sync.c	Mon Jun 18 00:34:20 2007 +0300
@@ -135,7 +135,7 @@ index_mailbox_sync_init(struct mailbox *
 {
 	struct index_mailbox *ibox = (struct index_mailbox *)box;
         struct index_mailbox_sync_context *ctx;
-	enum mail_index_view_sync_type sync_type;
+	enum mail_index_view_sync_flags sync_flags = 0;
 
 	ctx = i_new(struct index_mailbox_sync_context, 1);
 	ctx->ctx.box = box;
@@ -149,11 +149,9 @@ index_mailbox_sync_init(struct mailbox *
 	ctx->messages_count = mail_index_view_get_messages_count(ibox->view);
 
 	if ((flags & MAILBOX_SYNC_FLAG_NO_EXPUNGES) != 0)
-		sync_type = MAIL_INDEX_VIEW_SYNC_TYPE_NOEXPUNGES;
-	else
-		sync_type = MAIL_INDEX_VIEW_SYNC_TYPE_ALL;
-
-	if (mail_index_view_sync_begin(ibox->view, sync_type,
+		sync_flags = MAIL_INDEX_VIEW_SYNC_FLAG_NOEXPUNGES;
+
+	if (mail_index_view_sync_begin(ibox->view, sync_flags,
 				       &ctx->sync_ctx) < 0) {
 		mail_storage_set_index_error(ibox);
 		ctx->failed = TRUE;
diff -r 2f0d30828c14 -r 4dcb14706561 src/lib-storage/list/index-mailbox-list.c
--- a/src/lib-storage/list/index-mailbox-list.c	Mon Jun 18 00:29:00 2007 +0300
+++ b/src/lib-storage/list/index-mailbox-list.c	Mon Jun 18 00:34:20 2007 +0300
@@ -29,8 +29,7 @@ index_mailbox_view_sync(struct index_mai
 	struct mail_index_view_sync_rec sync_rec;
 	int ret;
 
-	if (mail_index_view_sync_begin(ctx->mail_view,
-				       MAIL_INDEX_VIEW_SYNC_TYPE_ALL,
+	if (mail_index_view_sync_begin(ctx->mail_view, 0,
 				       &sync_ctx) < 0) {
 		mailbox_list_set_internal_error(ctx->ctx.list);
 		return -1;


More information about the dovecot-cvs mailing list