Mercurial > dovecot > original-hg > dovecot-1.2
changeset 5764:4dcb14706561 HEAD
mail_index_view_sync_begin() can now sync only all or all but expunges.
Changed sync_type to be flags.
author | Timo Sirainen <tss@iki.fi> |
---|---|
date | Mon, 18 Jun 2007 00:34:20 +0300 |
parents | 2f0d30828c14 |
children | 401710b07708 |
files | src/lib-index/mail-index-view-sync.c src/lib-index/mail-index.h src/lib-storage/index/index-sync.c src/lib-storage/list/index-mailbox-list.c |
diffstat | 4 files changed, 13 insertions(+), 34 deletions(-) [+] |
line wrap: on
line diff
--- 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 @@ (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 @@ 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 @@ 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 @@ 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 @@ !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 @@ 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
--- 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 @@ 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 @@ 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,
--- 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 @@ { 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 @@ 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; + sync_flags = MAIL_INDEX_VIEW_SYNC_FLAG_NOEXPUNGES; - if (mail_index_view_sync_begin(ibox->view, sync_type, + if (mail_index_view_sync_begin(ibox->view, sync_flags, &ctx->sync_ctx) < 0) { mail_storage_set_index_error(ibox); ctx->failed = TRUE;
--- 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 @@ 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;