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