]> git.ipfire.org Git - thirdparty/dovecot/core.git/commitdiff
lib-storage: Add reason to mailbox.transaction_begin()
authorMartti Rannanjärvi <martti.rannanjarvi@dovecot.fi>
Wed, 20 Sep 2017 14:15:32 +0000 (17:15 +0300)
committerMartti Rannanjärvi <martti.rannanjarvi@dovecot.fi>
Fri, 22 Sep 2017 11:07:24 +0000 (14:07 +0300)
15 files changed:
src/lib-lda/mail-deliver.c
src/lib-storage/fail-mailbox.c
src/lib-storage/index/index-storage.h
src/lib-storage/index/index-transaction.c
src/lib-storage/index/mbox/mbox-storage.c
src/lib-storage/mail-storage-private.h
src/lib-storage/mail-storage.c
src/plugins/expire/expire-plugin.c
src/plugins/fts/fts-storage.c
src/plugins/lazy-expunge/lazy-expunge-plugin.c
src/plugins/notify/notify-storage.c
src/plugins/quota/quota-storage.c
src/plugins/stats/stats-plugin.c
src/plugins/virtual/virtual-transaction.c
src/plugins/virtual/virtual-transaction.h

index 9eb23e0d1917a5e2e1203a68dbf9259d8bdc362a..c43ecfc4fc6fc01b8bb5d8a06b8a9f14041aa395 100644 (file)
@@ -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);
index 83364b6291809524e95d4cdf1460215aca057b1a..d9829a0fb60661dbf23bf9aa02376431fae5038e 100644 (file)
@@ -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;
 
index e4b74dcaa4e2c138d01d9bf2e0c2fa71d93a35b1..77b2d1d30d0fea641ec603072283e6da68f4549d 100644 (file)
@@ -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);
index 924669ba95302dd870bd0b09efc763e4823c6315..92b1796e92dd13634d158518a71a0fbdf5b8dd4a 100644 (file)
@@ -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;
 }
 
index 808266bb1bbb2f80d6360913728d6b58bb72ec32..cff08840fa7c8fe72a4a10575c249d67bb5970a2 100644 (file)
@@ -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;
 }
 
index 29f74ddd0032e3ea415a93fbe55578c942ae02ee..5c0293e7ae8d82ec1f2e2db4d511671355c6ee73 100644 (file)
@@ -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);
index d05ff22d5a3a674ec167562840d87e61deb71258..3c7db1fc8ee008b20ffafff193ec1ecaf3d6ed17 100644 (file)
@@ -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;
 }
index 88f235958bbfad90692b5494ad284b736cb4d8b2..fd925075d7227873572eeef3039254240149d97d 100644 (file)
@@ -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);
index 91d0b72471d90fe14d8570d1a0e0f1031c892d32..4a04b2b20cbd35c465585320577dfd7b9c367d49 100644 (file)
@@ -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;
 }
index 8a15f0c1b0d658f884bce03ad63cd650f4c528b2..30dfd3257a4445c661df07c0afa4968b67136f7e 100644 (file)
@@ -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;
 
index 8d79aca0ab9935a353e73004fe1038d02d92e81c..3617e9dc72664a785ec907a69d87901bea5fca8b 100644 (file)
@@ -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);
index a66ee34f12d38489d3fa3c187272e92cf53210ad..fff294af21a66c8553b6766cdb42dde0b2c7e97f 100644 (file)
@@ -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;
 
index a406980c83fcadca56e8c02378ebf8a1e5f4a7d5..b5c77f893551820a559b2d590fef3dc286701a3a 100644 (file)
@@ -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);
index 057836a4620fe16ad77b34a5ca733afd07e9afd1..83bed5c6e4e663d707dea59751ec3480dd537ac2 100644 (file)
@@ -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;
 }
 
index ce979a3a667976ce45fe9f6935b54cc28ef5081a..a950fcb65b7ec0eed67b71d4ef77f091d0df0d2a 100644 (file)
@@ -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);