From: Martti Rannanjärvi Date: Wed, 20 Sep 2017 14:15:32 +0000 (+0300) Subject: lib-storage: Add reason to mailbox.transaction_begin() X-Git-Tag: 2.3.0.rc1~964 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=c6ce2e251ac75fa650c7fbfa52150eae69386293;p=thirdparty%2Fdovecot%2Fcore.git lib-storage: Add reason to mailbox.transaction_begin() --- diff --git a/src/lib-lda/mail-deliver.c b/src/lib-lda/mail-deliver.c index 9eb23e0d19..c43ecfc4fc 100644 --- a/src/lib-lda/mail-deliver.c +++ b/src/lib-lda/mail-deliver.c @@ -600,7 +600,8 @@ mail_deliver_cache_update_post_commit(struct mailbox *orig_box, uint32_t uid) static struct mailbox_transaction_context * mail_deliver_transaction_begin(struct mailbox *box, - enum mailbox_transaction_flags flags) + enum mailbox_transaction_flags flags, + const char *reason) { struct mail_deliver_mailbox *mbox = MAIL_DELIVER_STORAGE_CONTEXT(box); struct mail_deliver_user *muser = @@ -611,7 +612,7 @@ mail_deliver_transaction_begin(struct mailbox *box, i_assert(muser != NULL); i_assert(muser->deliver_ctx != NULL); - t = mbox->module_ctx.super.transaction_begin(box, flags); + t = mbox->module_ctx.super.transaction_begin(box, flags, reason); dt = p_new(muser->deliver_ctx->pool, struct mail_deliver_transaction, 1); MODULE_CONTEXT_SET(t, mail_deliver_storage_module, dt); diff --git a/src/lib-storage/fail-mailbox.c b/src/lib-storage/fail-mailbox.c index 83364b6291..d9829a0fb6 100644 --- a/src/lib-storage/fail-mailbox.c +++ b/src/lib-storage/fail-mailbox.c @@ -140,7 +140,8 @@ static void fail_mailbox_notify_changes(struct mailbox *box ATTR_UNUSED) static struct mailbox_transaction_context * fail_mailbox_transaction_begin(struct mailbox *box, - enum mailbox_transaction_flags flags) + enum mailbox_transaction_flags flags, + const char *reason ATTR_UNUSED) { struct mailbox_transaction_context *ctx; diff --git a/src/lib-storage/index/index-storage.h b/src/lib-storage/index/index-storage.h index e4b74dcaa4..77b2d1d30d 100644 --- a/src/lib-storage/index/index-storage.h +++ b/src/lib-storage/index/index-storage.h @@ -143,10 +143,12 @@ bool index_storage_search_next_update_seq(struct mail_search_context *ctx); struct mailbox_transaction_context * index_transaction_begin(struct mailbox *box, - enum mailbox_transaction_flags flags); + enum mailbox_transaction_flags flags, + const char *reason); void index_transaction_init(struct mailbox_transaction_context *t, struct mailbox *box, - enum mailbox_transaction_flags flags); + enum mailbox_transaction_flags flags, + const char *reason); void index_transaction_init_pvt(struct mailbox_transaction_context *t); int index_transaction_commit(struct mailbox_transaction_context *t, struct mail_transaction_commit_changes *changes_r); diff --git a/src/lib-storage/index/index-transaction.c b/src/lib-storage/index/index-transaction.c index 924669ba95..92b1796e92 100644 --- a/src/lib-storage/index/index-transaction.c +++ b/src/lib-storage/index/index-transaction.c @@ -149,7 +149,8 @@ void index_transaction_init_pvt(struct mailbox_transaction_context *t) void index_transaction_init(struct mailbox_transaction_context *t, struct mailbox *box, - enum mailbox_transaction_flags flags) + enum mailbox_transaction_flags flags, + const char *reason) { enum mail_index_transaction_flags itrans_flags; @@ -160,6 +161,7 @@ void index_transaction_init(struct mailbox_transaction_context *t, mail_index_refresh(box->index); t->box = box; + t->reason = i_strdup(reason); t->itrans = mail_index_transaction_begin(box->view, itrans_flags); t->view = mail_index_transaction_open_updated_view(t->itrans); @@ -182,12 +184,13 @@ void index_transaction_init(struct mailbox_transaction_context *t, struct mailbox_transaction_context * index_transaction_begin(struct mailbox *box, - enum mailbox_transaction_flags flags) + enum mailbox_transaction_flags flags, + const char *reason) { struct mailbox_transaction_context *t; t = i_new(struct mailbox_transaction_context, 1); - index_transaction_init(t, box, flags); + index_transaction_init(t, box, flags, reason); return t; } diff --git a/src/lib-storage/index/mbox/mbox-storage.c b/src/lib-storage/index/mbox/mbox-storage.c index 808266bb1b..cff08840fa 100644 --- a/src/lib-storage/index/mbox/mbox-storage.c +++ b/src/lib-storage/index/mbox/mbox-storage.c @@ -726,7 +726,8 @@ static void mbox_storage_add_list(struct mail_storage *storage, static struct mailbox_transaction_context * mbox_transaction_begin(struct mailbox *box, - enum mailbox_transaction_flags flags) + enum mailbox_transaction_flags flags, + const char *reason) { struct mbox_mailbox *mbox = MBOX_MAILBOX(box); struct mbox_transaction_context *mt; @@ -735,7 +736,7 @@ mbox_transaction_begin(struct mailbox *box, mbox->external_transactions++; mt = i_new(struct mbox_transaction_context, 1); - index_transaction_init(&mt->t, box, flags); + index_transaction_init(&mt->t, box, flags, reason); return &mt->t; } diff --git a/src/lib-storage/mail-storage-private.h b/src/lib-storage/mail-storage-private.h index 29f74ddd00..5c0293e7ae 100644 --- a/src/lib-storage/mail-storage-private.h +++ b/src/lib-storage/mail-storage-private.h @@ -254,7 +254,8 @@ struct mailbox_vfuncs { struct mailbox_transaction_context * (*transaction_begin)(struct mailbox *box, - enum mailbox_transaction_flags flags); + enum mailbox_transaction_flags flags, + const char *reason); int (*transaction_commit)(struct mailbox_transaction_context *t, struct mail_transaction_commit_changes *changes_r); void (*transaction_rollback)(struct mailbox_transaction_context *t); diff --git a/src/lib-storage/mail-storage.c b/src/lib-storage/mail-storage.c index d05ff22d5a..3c7db1fc8e 100644 --- a/src/lib-storage/mail-storage.c +++ b/src/lib-storage/mail-storage.c @@ -2069,11 +2069,10 @@ mailbox_transaction_begin(struct mailbox *box, (box->flags & MAILBOX_FLAG_USE_STUBS) != 0); i_assert(box->opened); - i_assert(reason != NULL); box->transaction_count++; - trans = box->v.transaction_begin(box, flags); - trans->reason = i_strdup(reason); + trans = box->v.transaction_begin(box, flags, reason); + i_assert(trans->reason != NULL); trans->flags = flags; return trans; } diff --git a/src/plugins/expire/expire-plugin.c b/src/plugins/expire/expire-plugin.c index 88f235958b..fd925075d7 100644 --- a/src/plugins/expire/expire-plugin.c +++ b/src/plugins/expire/expire-plugin.c @@ -59,13 +59,14 @@ static MODULE_CONTEXT_DEFINE_INIT(expire_mail_user_module, static struct mailbox_transaction_context * expire_mailbox_transaction_begin(struct mailbox *box, - enum mailbox_transaction_flags flags) + enum mailbox_transaction_flags flags, + const char *reason) { struct expire_mailbox *xpr_box = EXPIRE_CONTEXT(box); struct mailbox_transaction_context *t; struct expire_transaction_context *xt; - t = xpr_box->module_ctx.super.transaction_begin(box, flags); + t = xpr_box->module_ctx.super.transaction_begin(box, flags, reason); xt = i_new(struct expire_transaction_context, 1); MODULE_CONTEXT_SET(t, expire_storage_module, xt); diff --git a/src/plugins/fts/fts-storage.c b/src/plugins/fts/fts-storage.c index 91d0b72471..4a04b2b20c 100644 --- a/src/plugins/fts/fts-storage.c +++ b/src/plugins/fts/fts-storage.c @@ -551,7 +551,8 @@ void fts_mail_allocated(struct mail *_mail) static struct mailbox_transaction_context * fts_transaction_begin(struct mailbox *box, - enum mailbox_transaction_flags flags) + enum mailbox_transaction_flags flags, + const char *reason) { struct fts_mailbox *fbox = FTS_CONTEXT(box); struct mailbox_transaction_context *t; @@ -559,7 +560,7 @@ fts_transaction_begin(struct mailbox *box, ft = i_new(struct fts_transaction_context, 1); - t = fbox->module_ctx.super.transaction_begin(box, flags); + t = fbox->module_ctx.super.transaction_begin(box, flags, reason); MODULE_CONTEXT_SET(t, fts_storage_module, ft); return t; } diff --git a/src/plugins/lazy-expunge/lazy-expunge-plugin.c b/src/plugins/lazy-expunge/lazy-expunge-plugin.c index 8a15f0c1b0..30dfd3257a 100644 --- a/src/plugins/lazy-expunge/lazy-expunge-plugin.c +++ b/src/plugins/lazy-expunge/lazy-expunge-plugin.c @@ -375,7 +375,8 @@ static int lazy_expunge_copy(struct mail_save_context *ctx, struct mail *_mail) static struct mailbox_transaction_context * lazy_expunge_transaction_begin(struct mailbox *box, - enum mailbox_transaction_flags flags) + enum mailbox_transaction_flags flags, + const char *reason) { struct lazy_expunge_mail_user *luser = LAZY_EXPUNGE_USER_CONTEXT(box->list->ns->user); @@ -383,7 +384,7 @@ lazy_expunge_transaction_begin(struct mailbox *box, struct mailbox_transaction_context *t; struct lazy_expunge_transaction *lt; - t = mbox->super.transaction_begin(box, flags); + t = mbox->super.transaction_begin(box, flags, reason); lt = i_new(struct lazy_expunge_transaction, 1); lt->copy_only_last_instance = luser->copy_only_last_instance; diff --git a/src/plugins/notify/notify-storage.c b/src/plugins/notify/notify-storage.c index 8d79aca0ab..3617e9dc72 100644 --- a/src/plugins/notify/notify-storage.c +++ b/src/plugins/notify/notify-storage.c @@ -125,12 +125,13 @@ notify_save_finish(struct mail_save_context *ctx) static struct mailbox_transaction_context * notify_transaction_begin(struct mailbox *box, - enum mailbox_transaction_flags flags) + enum mailbox_transaction_flags flags, + const char *reason) { union mailbox_module_context *lbox = NOTIFY_CONTEXT(box); struct mailbox_transaction_context *t; - t = lbox->super.transaction_begin(box, flags); + t = lbox->super.transaction_begin(box, flags, reason); if ((t->flags & MAILBOX_TRANSACTION_FLAG_NO_NOTIFY) == 0) notify_contexts_mail_transaction_begin(t); diff --git a/src/plugins/quota/quota-storage.c b/src/plugins/quota/quota-storage.c index a66ee34f12..fff294af21 100644 --- a/src/plugins/quota/quota-storage.c +++ b/src/plugins/quota/quota-storage.c @@ -141,13 +141,14 @@ quota_get_status(struct mailbox *box, enum mailbox_status_items items, static struct mailbox_transaction_context * quota_mailbox_transaction_begin(struct mailbox *box, - enum mailbox_transaction_flags flags) + enum mailbox_transaction_flags flags, + const char *reason) { struct quota_mailbox *qbox = QUOTA_CONTEXT(box); struct mailbox_transaction_context *t; struct quota_transaction_context *qt; - t = qbox->module_ctx.super.transaction_begin(box, flags); + t = qbox->module_ctx.super.transaction_begin(box, flags, reason); qt = quota_transaction_begin(box); qt->sync_transaction = (flags & MAILBOX_TRANSACTION_FLAG_SYNC) != 0; diff --git a/src/plugins/stats/stats-plugin.c b/src/plugins/stats/stats-plugin.c index a406980c83..b5c77f8935 100644 --- a/src/plugins/stats/stats-plugin.c +++ b/src/plugins/stats/stats-plugin.c @@ -146,14 +146,15 @@ static void session_stats_refresh(struct mail_user *user) static struct mailbox_transaction_context * stats_transaction_begin(struct mailbox *box, - enum mailbox_transaction_flags flags) + enum mailbox_transaction_flags flags, + const char *reason) { struct stats_user *suser = STATS_USER_CONTEXT(box->storage->user); struct stats_mailbox *sbox = STATS_CONTEXT(box); struct mailbox_transaction_context *trans; struct stats_transaction_context *strans; - trans = sbox->module_ctx.super.transaction_begin(box, flags); + trans = sbox->module_ctx.super.transaction_begin(box, flags, reason); trans->stats_track = TRUE; strans = i_new(struct stats_transaction_context, 1); diff --git a/src/plugins/virtual/virtual-transaction.c b/src/plugins/virtual/virtual-transaction.c index 057836a462..83bed5c6e4 100644 --- a/src/plugins/virtual/virtual-transaction.c +++ b/src/plugins/virtual/virtual-transaction.c @@ -27,7 +27,8 @@ virtual_transaction_get(struct mailbox_transaction_context *trans, struct mailbox_transaction_context * virtual_transaction_begin(struct mailbox *box, - enum mailbox_transaction_flags flags) + enum mailbox_transaction_flags flags, + const char *reason) { struct virtual_mailbox *mbox = (struct virtual_mailbox *)box; struct virtual_transaction_context *vt; @@ -35,7 +36,7 @@ virtual_transaction_begin(struct mailbox *box, vt = i_new(struct virtual_transaction_context, 1); i_array_init(&vt->backend_transactions, array_count(&mbox->backend_boxes)); - index_transaction_init(&vt->t, box, flags); + index_transaction_init(&vt->t, box, flags, reason); return &vt->t; } diff --git a/src/plugins/virtual/virtual-transaction.h b/src/plugins/virtual/virtual-transaction.h index ce979a3a66..a950fcb65b 100644 --- a/src/plugins/virtual/virtual-transaction.h +++ b/src/plugins/virtual/virtual-transaction.h @@ -15,7 +15,8 @@ virtual_transaction_get(struct mailbox_transaction_context *trans, struct mailbox_transaction_context * virtual_transaction_begin(struct mailbox *box, - enum mailbox_transaction_flags flags); + enum mailbox_transaction_flags flags, + const char *reason); int virtual_transaction_commit(struct mailbox_transaction_context *t, struct mail_transaction_commit_changes *changes_r); void virtual_transaction_rollback(struct mailbox_transaction_context *t);