Mercurial > dovecot > core-2.2
changeset 10946:0cf62ad4c7bf HEAD
lib-storage: Moved index transaction/view from index_transaction to mailbox_transaction.
author | Timo Sirainen <tss@iki.fi> |
---|---|
date | Fri, 19 Mar 2010 15:13:24 +0200 |
parents | b13e01d82083 |
children | d133801d8e83 |
files | src/lib-storage/index/cydir/cydir-save.c src/lib-storage/index/dbox-multi/mdbox-save.c src/lib-storage/index/dbox-single/sdbox-save.c src/lib-storage/index/index-mail.c src/lib-storage/index/index-search.c src/lib-storage/index/index-sort-string.c src/lib-storage/index/index-storage.h src/lib-storage/index/index-transaction.c src/lib-storage/index/maildir/maildir-save.c src/lib-storage/index/mbox/mbox-mail.c src/lib-storage/index/mbox/mbox-save.c src/lib-storage/mail-storage-private.h src/plugins/expire/expire-plugin.c |
diffstat | 13 files changed, 77 insertions(+), 103 deletions(-) [+] |
line wrap: on
line diff
--- a/src/lib-storage/index/cydir/cydir-save.c Thu Mar 18 03:41:22 2010 +0000 +++ b/src/lib-storage/index/cydir/cydir-save.c Fri Mar 19 15:13:24 2010 +0200 @@ -58,8 +58,6 @@ struct mail_save_context * cydir_save_alloc(struct mailbox_transaction_context *t) { - struct index_transaction_context *it = - (struct index_transaction_context *)t; struct cydir_mailbox *mbox = (struct cydir_mailbox *)t->box; struct cydir_save_context *ctx = (struct cydir_save_context *)t->save_ctx; @@ -70,7 +68,7 @@ ctx = i_new(struct cydir_save_context, 1); ctx->ctx.transaction = t; ctx->mbox = mbox; - ctx->trans = it->trans; + ctx->trans = t->itrans; ctx->tmp_basename = cydir_generate_tmp_filename(); t->save_ctx = &ctx->ctx; }
--- a/src/lib-storage/index/dbox-multi/mdbox-save.c Thu Mar 18 03:41:22 2010 +0000 +++ b/src/lib-storage/index/dbox-multi/mdbox-save.c Fri Mar 19 15:13:24 2010 +0200 @@ -45,8 +45,6 @@ mdbox_copy_file_get_file(struct mailbox_transaction_context *t, uint32_t seq, uoff_t *offset_r) { - struct index_transaction_context *it = - (struct index_transaction_context *)t; struct mdbox_save_context *ctx = (struct mdbox_save_context *)t->save_ctx; const struct mdbox_mail_index_record *rec; @@ -54,7 +52,7 @@ bool expunged; uint32_t file_id; - mail_index_lookup_ext(it->trans_view, seq, ctx->mbox->ext_id, + mail_index_lookup_ext(t->view, seq, ctx->mbox->ext_id, &data, &expunged); rec = data; @@ -98,8 +96,6 @@ struct mail_save_context * mdbox_save_alloc(struct mailbox_transaction_context *t) { - struct index_transaction_context *it = - (struct index_transaction_context *)t; struct mdbox_mailbox *mbox = (struct mdbox_mailbox *)t->box; struct mdbox_save_context *ctx = (struct mdbox_save_context *)t->save_ctx; @@ -114,7 +110,7 @@ ctx = i_new(struct mdbox_save_context, 1); ctx->ctx.ctx.transaction = t; - ctx->ctx.trans = it->trans; + ctx->ctx.trans = t->itrans; ctx->mbox = mbox; ctx->append_ctx = dbox_map_append_begin(mbox->storage->map, 0); i_array_init(&ctx->mails, 32);
--- a/src/lib-storage/index/dbox-single/sdbox-save.c Thu Mar 18 03:41:22 2010 +0000 +++ b/src/lib-storage/index/dbox-single/sdbox-save.c Fri Mar 19 15:13:24 2010 +0200 @@ -49,8 +49,6 @@ struct mail_save_context * sdbox_save_alloc(struct mailbox_transaction_context *t) { - struct index_transaction_context *it = - (struct index_transaction_context *)t; struct sdbox_mailbox *mbox = (struct sdbox_mailbox *)t->box; struct sdbox_save_context *ctx = (struct sdbox_save_context *)t->save_ctx; @@ -65,7 +63,7 @@ ctx = i_new(struct sdbox_save_context, 1); ctx->ctx.ctx.transaction = t; - ctx->ctx.trans = it->trans; + ctx->ctx.trans = t->itrans; ctx->mbox = mbox; i_array_init(&ctx->files, 32); t->save_ctx = &ctx->ctx.ctx;
--- a/src/lib-storage/index/index-mail.c Thu Mar 18 03:41:22 2010 +0000 +++ b/src/lib-storage/index/index-mail.c Fri Mar 19 15:13:24 2010 +0200 @@ -124,17 +124,16 @@ size_r, sizeof(*size_r)); } -enum mail_flags index_mail_get_flags(struct mail *_mail) +enum mail_flags index_mail_get_flags(struct mail *mail) { - struct index_mail *mail = (struct index_mail *)_mail; const struct mail_index_record *rec; enum mail_flags flags; - rec = mail_index_lookup(mail->trans->trans_view, _mail->seq); + rec = mail_index_lookup(mail->transaction->view, mail->seq); flags = rec->flags & (MAIL_FLAGS_NONRECENT | MAIL_INDEX_MAIL_FLAG_BACKEND); - if (index_mailbox_is_recent(_mail->box, _mail->uid)) + if (index_mailbox_is_recent(mail->box, mail->uid)) flags |= MAIL_RECENT; return flags; @@ -149,7 +148,7 @@ mail_index_modseq_enable(_mail->box->index); mail->data.modseq = - mail_index_modseq_lookup(mail->trans->trans_view, _mail->seq); + mail_index_modseq_lookup(_mail->transaction->view, _mail->seq); return mail->data.modseq; } @@ -190,7 +189,7 @@ if (!array_is_created(&data->keyword_indexes)) { p_array_init(&data->keyword_indexes, mail->data_pool, 32); - mail_index_lookup_keywords(mail->trans->trans_view, + mail_index_lookup_keywords(_mail->transaction->view, mail->data.seq, &data->keyword_indexes); } @@ -1215,10 +1214,10 @@ data->seq = seq; mail->mail.mail.seq = seq; - mail_index_lookup_uid(mail->trans->trans_view, seq, + mail_index_lookup_uid(_mail->transaction->view, seq, &mail->mail.mail.uid); - if (mail_index_view_is_inconsistent(mail->trans->trans_view)) { + if (mail_index_view_is_inconsistent(_mail->transaction->view)) { mail_set_expunged(&mail->mail.mail); return; } @@ -1418,14 +1417,14 @@ (void)index_mail_parse_body_finish(mail, 0); } -static void index_mail_drop_recent_flag(struct index_mail *imail) +static void index_mail_drop_recent_flag(struct mail *mail) { const struct mail_index_header *hdr; - uint32_t first_recent_uid = imail->mail.mail.uid + 1; + uint32_t first_recent_uid = mail->uid + 1; - hdr = mail_index_get_header(imail->trans->trans_view); + hdr = mail_index_get_header(mail->transaction->view); if (hdr->first_recent_uid < first_recent_uid) { - mail_index_update_header(imail->trans->trans, + mail_index_update_header(mail->transaction->itrans, offsetof(struct mail_index_header, first_recent_uid), &first_recent_uid, sizeof(first_recent_uid), FALSE); } @@ -1434,15 +1433,13 @@ void index_mail_update_flags(struct mail *mail, enum modify_type modify_type, enum mail_flags flags) { - struct index_mail *imail = (struct index_mail *)mail; - if ((flags & MAIL_RECENT) == 0 && index_mailbox_is_recent(mail->box, mail->uid)) - index_mail_drop_recent_flag(imail); + index_mail_drop_recent_flag(mail); flags &= MAIL_FLAGS_NONRECENT | MAIL_INDEX_MAIL_FLAG_BACKEND; - mail_index_update_flags(imail->trans->trans, mail->seq, modify_type, - flags); + mail_index_update_flags(mail->transaction->itrans, mail->seq, + modify_type, flags); } void index_mail_update_keywords(struct mail *mail, enum modify_type modify_type, @@ -1462,35 +1459,31 @@ sizeof(imail->data.keywords)); } - mail_index_update_keywords(imail->trans->trans, mail->seq, modify_type, - keywords); + mail_index_update_keywords(mail->transaction->itrans, mail->seq, + modify_type, keywords); } void index_mail_update_modseq(struct mail *mail, uint64_t min_modseq) { - struct index_mail *imail = (struct index_mail *)mail; - - mail_index_update_modseq(imail->trans->trans, mail->seq, min_modseq); + mail_index_update_modseq(mail->transaction->itrans, mail->seq, + min_modseq); } void index_mail_update_uid(struct mail *mail, uint32_t new_uid) { - struct index_mail *imail = (struct index_mail *)mail; - - mail_index_update_uid(imail->trans->trans, mail->seq, new_uid); + mail_index_update_uid(mail->transaction->itrans, mail->seq, new_uid); } void index_mail_expunge(struct mail *mail) { - struct index_mail *imail = (struct index_mail *)mail; const char *value; uint8_t guid_128[MAIL_GUID_128_SIZE]; if (mail_get_special(mail, MAIL_FETCH_GUID, &value) < 0) - mail_index_expunge(imail->trans->trans, mail->seq); + mail_index_expunge(mail->transaction->itrans, mail->seq); else { mail_generate_guid_128_hash(value, guid_128); - mail_index_expunge_guid(imail->trans->trans, + mail_index_expunge_guid(mail->transaction->itrans, mail->seq, guid_128); } }
--- a/src/lib-storage/index/index-search.c Thu Mar 18 03:41:22 2010 +0000 +++ b/src/lib-storage/index/index-search.c Fri Mar 19 15:13:24 2010 +0200 @@ -1005,26 +1005,24 @@ } struct mail_search_context * -index_storage_search_init(struct mailbox_transaction_context *_t, +index_storage_search_init(struct mailbox_transaction_context *t, struct mail_search_args *args, const enum mail_sort_type *sort_program) { - struct index_transaction_context *t = - (struct index_transaction_context *)_t; struct index_search_context *ctx; struct mailbox_status status; ctx = i_new(struct index_search_context, 1); - ctx->mail_ctx.transaction = _t; - ctx->box = _t->box; - ctx->view = t->trans_view; + ctx->mail_ctx.transaction = t; + ctx->box = t->box; + ctx->view = t->view; ctx->mail_ctx.args = args; - ctx->mail_ctx.sort_program = index_sort_program_init(_t, sort_program); + ctx->mail_ctx.sort_program = index_sort_program_init(t, sort_program); ctx->next_time_check_cost = SEARCH_INITIAL_MAX_COST; if (gettimeofday(&ctx->last_nonblock_timeval, NULL) < 0) i_fatal("gettimeofday() failed: %m"); - mailbox_get_status(_t->box, STATUS_MESSAGES, &status); + mailbox_get_status(t->box, STATUS_MESSAGES, &status); ctx->mail_ctx.progress_max = status.messages; i_array_init(&ctx->mail_ctx.results, 5); @@ -1033,7 +1031,7 @@ mail_search_args_reset(ctx->mail_ctx.args->args, TRUE); if (args->have_inthreads) { - if (mail_thread_init(_t->box, NULL, &ctx->thread_ctx) < 0) + if (mail_thread_init(t->box, NULL, &ctx->thread_ctx) < 0) ctx->failed = TRUE; if (search_build_inthreads(ctx, args->args) < 0) ctx->failed = TRUE;
--- a/src/lib-storage/index/index-sort-string.c Thu Mar 18 03:41:22 2010 +0000 +++ b/src/lib-storage/index/index-sort-string.c Fri Mar 19 15:13:24 2010 +0200 @@ -159,14 +159,12 @@ static void index_sort_node_add(struct sort_string_context *ctx, struct mail_sort_node *node) { - struct index_transaction_context *t = - (struct index_transaction_context *)ctx->program->t; struct mail_index_map *map; const void *data; uint32_t reset_id; bool expunged; - mail_index_lookup_ext_full(t->trans_view, node->seq, + mail_index_lookup_ext_full(ctx->program->t->view, node->seq, ctx->ext_id, &map, &data, &expunged); if (expunged) { /* we don't want to update expunged messages' sort IDs */ @@ -196,7 +194,7 @@ if (node->sort_id != 0) { /* if reset ID increases, lookup all existing messages' sort IDs again. if it decreases, ignore the sort ID. */ - if (!mail_index_ext_get_reset_id(t->trans_view, map, + if (!mail_index_ext_get_reset_id(ctx->program->t->view, map, ctx->ext_id, &reset_id)) reset_id = 0; if (reset_id != ctx->highest_reset_id) { @@ -686,8 +684,7 @@ static void index_sort_write_changed_sort_ids(struct sort_string_context *ctx) { - struct index_transaction_context *t = - (struct index_transaction_context *)ctx->program->t; + struct mail_index_transaction *itrans = ctx->program->t->itrans; uint32_t ext_id = ctx->ext_id; const struct mail_sort_node *nodes; unsigned int i, count; @@ -698,7 +695,8 @@ return; } - mail_index_ext_reset_inc(t->trans, ext_id, ctx->highest_reset_id, FALSE); + mail_index_ext_reset_inc(itrans, ext_id, + ctx->highest_reset_id, FALSE); /* add the missing sort IDs to index */ nodes = array_get_modifiable(&ctx->sorted_nodes, &count); @@ -707,7 +705,7 @@ if (!nodes[i].sort_id_changed || nodes[i].no_update) continue; - mail_index_update_ext(t->trans, nodes[i].seq, ext_id, + mail_index_update_ext(itrans, nodes[i].seq, ext_id, &nodes[i].sort_id, NULL); } }
--- a/src/lib-storage/index/index-storage.h Thu Mar 18 03:41:22 2010 +0000 +++ b/src/lib-storage/index/index-storage.h Fri Mar 19 15:13:24 2010 +0200 @@ -23,8 +23,6 @@ struct mail_index_transaction_vfuncs super; int mail_ref_count; - struct mail_index_transaction *trans; - struct mail_index_view *trans_view; struct mail_cache_view *cache_view; struct mail_cache_transaction_ctx *cache_trans; };
--- a/src/lib-storage/index/index-transaction.c Thu Mar 18 03:41:22 2010 +0000 +++ b/src/lib-storage/index/index-transaction.c Fri Mar 19 15:13:24 2010 +0200 @@ -8,7 +8,7 @@ static void index_transaction_free(struct index_transaction_context *t) { mail_cache_view_close(t->cache_view); - mail_index_view_close(&t->trans_view); + mail_index_view_close(&t->mailbox_ctx.view); array_free(&t->mailbox_ctx.module_contexts); i_free(t); } @@ -32,9 +32,9 @@ i_assert(it->mail_ref_count == 0); if (ret < 0) - it->super.rollback(it->trans); + it->super.rollback(index_trans); else { - if (it->super.commit(it->trans, result_r) < 0) { + if (it->super.commit(index_trans, result_r) < 0) { mail_storage_set_index_error(t->box); ret = -1; } @@ -56,7 +56,7 @@ if (it->mailbox_ctx.save_ctx != NULL) ibox->save_rollback(it->mailbox_ctx.save_ctx); - it->super.rollback(it->trans); + it->super.rollback(t); index_transaction_free(it); } @@ -64,6 +64,7 @@ struct mailbox *box, enum mailbox_transaction_flags flags) { + struct mailbox_transaction_context *t = &it->mailbox_ctx; enum mail_index_transaction_flags trans_flags; i_assert(box->opened); @@ -76,22 +77,22 @@ if ((flags & MAILBOX_TRANSACTION_FLAG_REFRESH) != 0) (void)mail_index_refresh(box->index); - it->trans = mail_index_transaction_begin(box->view, trans_flags); - it->mailbox_ctx.box = box; + t->box = box; + t->itrans = mail_index_transaction_begin(box->view, trans_flags); + t->view = mail_index_transaction_open_updated_view(t->itrans); - array_create(&it->mailbox_ctx.module_contexts, default_pool, + array_create(&t->module_contexts, default_pool, sizeof(void *), 5); - it->trans_view = mail_index_transaction_open_updated_view(it->trans); - it->cache_view = mail_cache_view_open(box->cache, it->trans_view); - it->cache_trans = mail_cache_get_transaction(it->cache_view, it->trans); + it->cache_view = mail_cache_view_open(box->cache, t->view); + it->cache_trans = mail_cache_get_transaction(it->cache_view, t->itrans); /* set up after mail_cache_get_transaction(), so that we'll still have the cache_trans available in _index_commit() */ - it->super = it->trans->v; - it->trans->v.commit = index_transaction_index_commit; - it->trans->v.rollback = index_transaction_index_rollback; - MODULE_CONTEXT_SET(it->trans, mail_storage_mail_index_module, it); + it->super = t->itrans->v; + t->itrans->v.commit = index_transaction_index_commit; + t->itrans->v.rollback = index_transaction_index_rollback; + MODULE_CONTEXT_SET(t->itrans, mail_storage_mail_index_module, it); } struct mailbox_transaction_context * @@ -105,13 +106,11 @@ return &it->mailbox_ctx; } -int index_transaction_commit(struct mailbox_transaction_context *_t, +int index_transaction_commit(struct mailbox_transaction_context *t, struct mail_transaction_commit_changes *changes_r) { - struct index_transaction_context *t = - (struct index_transaction_context *)_t; - struct mailbox *box = _t->box; - struct mail_index_transaction *itrans = t->trans; + struct mailbox *box = t->box; + struct mail_index_transaction *itrans = t->itrans; struct mail_index_transaction_commit_result result; int ret; @@ -119,10 +118,10 @@ changes_r->pool = pool_alloconly_create(MEMPOOL_GROWING "transaction changes", 512); p_array_init(&changes_r->saved_uids, changes_r->pool, 32); - _t->changes = changes_r; + t->changes = changes_r; ret = mail_index_transaction_commit_full(&itrans, &result); - _t = NULL; + t = NULL; if (ret < 0 && mail_index_is_deleted(box->index)) mailbox_set_deleted(box); @@ -135,12 +134,10 @@ return ret; } -void index_transaction_rollback(struct mailbox_transaction_context *_t) +void index_transaction_rollback(struct mailbox_transaction_context *t) { - struct index_transaction_context *t = - (struct index_transaction_context *)_t; - struct mailbox *box = _t->box; - struct mail_index_transaction *itrans = t->trans; + struct mailbox *box = t->box; + struct mail_index_transaction *itrans = t->itrans; mail_index_transaction_rollback(&itrans); @@ -148,12 +145,9 @@ box->view->transactions == 0); } -void index_transaction_set_max_modseq(struct mailbox_transaction_context *_t, +void index_transaction_set_max_modseq(struct mailbox_transaction_context *t, uint64_t max_modseq, ARRAY_TYPE(seq_range) *seqs) { - struct index_transaction_context *t = - (struct index_transaction_context *)_t; - - mail_index_transaction_set_max_modseq(t->trans, max_modseq, seqs); + mail_index_transaction_set_max_modseq(t->itrans, max_modseq, seqs); }
--- a/src/lib-storage/index/maildir/maildir-save.c Thu Mar 18 03:41:22 2010 +0000 +++ b/src/lib-storage/index/maildir/maildir-save.c Fri Mar 19 15:13:24 2010 +0200 @@ -125,7 +125,7 @@ ctx->ctx.transaction = t; ctx->pool = pool; ctx->mbox = mbox; - ctx->trans = ((struct index_transaction_context *)t)->trans; + ctx->trans = t->itrans; ctx->files_tail = &ctx->files; ctx->fd = -1;
--- a/src/lib-storage/index/mbox/mbox-mail.c Thu Mar 18 03:41:22 2010 +0000 +++ b/src/lib-storage/index/mbox/mbox-mail.c Fri Mar 19 15:13:24 2010 +0200 @@ -84,7 +84,7 @@ if (mbox_file_open_stream(mbox) < 0) return -1; - ret = mbox_file_seek(mbox, mail->trans->trans_view, + ret = mbox_file_seek(mbox, _mail->transaction->view, _mail->seq, &deleted); if (ret > 0) { /* success */ @@ -157,8 +157,9 @@ if (mail->data.guid != NULL) return mail->data.guid; - mail_index_lookup_ext(mail->trans->trans_view, mail->mail.mail.seq, - mbox->md5hdr_ext_idx, &ext_data, NULL); + mail_index_lookup_ext(mail->mail.mail.transaction->view, + mail->mail.mail.seq, mbox->md5hdr_ext_idx, + &ext_data, NULL); if (ext_data != NULL && memcmp(ext_data, empty_md5, 16) != 0) { mail->data.guid = p_strdup(mail->data_pool, binary_to_hex(ext_data, 16)); @@ -230,7 +231,7 @@ int trailer_size; int ret = 1; - hdr = mail_index_get_header(mail->trans->trans_view); + hdr = mail_index_get_header(mail->mail.mail.transaction->view); if (mail->mail.mail.seq > hdr->messages_count) { /* we're appending a new message */ return 0;
--- a/src/lib-storage/index/mbox/mbox-save.c Thu Mar 18 03:41:22 2010 +0000 +++ b/src/lib-storage/index/mbox/mbox-save.c Fri Mar 19 15:13:24 2010 +0200 @@ -411,8 +411,6 @@ struct mail_save_context * mbox_save_alloc(struct mailbox_transaction_context *t) { - struct mbox_transaction_context *mt = - (struct mbox_transaction_context *)t; struct mbox_mailbox *mbox = (struct mbox_mailbox *)t->box; struct mbox_save_context *ctx; @@ -422,7 +420,7 @@ ctx = i_new(struct mbox_save_context, 1); ctx->ctx.transaction = t; ctx->mbox = mbox; - ctx->trans = mt->ictx.trans; + ctx->trans = t->itrans; ctx->append_offset = (uoff_t)-1; ctx->headers = str_new(default_pool, 512); ctx->mail_offset = (uoff_t)-1;
--- a/src/lib-storage/mail-storage-private.h Thu Mar 18 03:41:22 2010 +0000 +++ b/src/lib-storage/mail-storage-private.h Fri Mar 19 15:13:24 2010 +0200 @@ -361,6 +361,10 @@ struct mailbox *box; enum mailbox_transaction_flags flags; + struct mail_index_transaction *itrans; + /* view contains all changes done within this transaction */ + struct mail_index_view *view; + struct mail_transaction_commit_changes *changes; ARRAY_DEFINE(module_contexts, union mailbox_transaction_module_context *);
--- a/src/plugins/expire/expire-plugin.c Thu Mar 18 03:41:22 2010 +0000 +++ b/src/plugins/expire/expire-plugin.c Fri Mar 19 15:13:24 2010 +0200 @@ -64,17 +64,15 @@ return t; } -static void first_nonexpunged_timestamp(struct mailbox_transaction_context *_t, +static void first_nonexpunged_timestamp(struct mailbox_transaction_context *t, time_t *stamp_r) { - struct index_transaction_context *t = - (struct index_transaction_context *)_t; - struct mail_index_view *view = t->trans_view; + struct mail_index_view *view = t->view; const struct mail_index_header *hdr; struct mail *mail; uint32_t seq; - mail = mail_alloc(_t, 0, NULL); + mail = mail_alloc(t, 0, NULL); /* find the first non-expunged mail. we're here because the first mail was expunged, so don't bother checking it. */