]> git.ipfire.org Git - thirdparty/dovecot/core.git/commitdiff
global: Add mailbox_transaction_set_reason() calls
authorTimo Sirainen <timo.sirainen@dovecot.fi>
Sat, 1 Apr 2017 19:12:37 +0000 (22:12 +0300)
committerTimo Sirainen <timo.sirainen@dovecot.fi>
Mon, 3 Apr 2017 11:00:05 +0000 (14:00 +0300)
Added to the most important places.

18 files changed:
src/imap/cmd-append.c
src/imap/cmd-copy.c
src/imap/cmd-fetch.c
src/imap/cmd-select.c
src/imap/cmd-store.c
src/imap/cmd-thread.c
src/imap/imap-commands-util.c
src/imap/imap-commands-util.h
src/imap/imap-expunge.c
src/imap/imap-fetch.c
src/imap/imap-fetch.h
src/imap/imap-search.c
src/imap/imap-state.c
src/imap/imap-sync.c
src/indexer/master-connection.c
src/lib-storage/index/index-mailbox-size.c
src/lib-storage/mail-autoexpunge.c
src/plugins/quota/quota-storage.c

index 9fd9052617e9582db02d2d11154de0004e110fae..aae5fa3cbc99d503a26139b59380d404c11b0c39 100644 (file)
@@ -911,6 +911,7 @@ bool cmd_append(struct client_command_context *cmd)
                ctx->t = mailbox_transaction_begin(ctx->box,
                                        MAILBOX_TRANSACTION_FLAG_EXTERNAL |
                                        MAILBOX_TRANSACTION_FLAG_ASSIGN_UIDS);
+               imap_transaction_set_cmd_reason(ctx->t, cmd);
        }
 
        io_remove(&client->io);
index eefdb4e6e42dbafc59c30c96f24b525a35757904..b4b71b1a492b5f4cc580c4a901f170f065201012 100644 (file)
@@ -28,13 +28,14 @@ static void client_send_sendalive_if_needed(struct client *client)
        }
 }
 
-static int fetch_and_copy(struct client *client, bool move,
+static int fetch_and_copy(struct client_command_context *cmd, bool move,
                          struct mailbox_transaction_context *t,
                          struct mailbox_transaction_context **src_trans_r,
                          struct mail_search_args *search_args,
                          const char **src_uidset_r,
                          unsigned int *copy_count_r)
 {
+       struct client *client = cmd->client;
        struct mail_search_context *search_ctx;
         struct mailbox_transaction_context *src_trans;
        struct mail_save_context *save_ctx;
@@ -48,6 +49,7 @@ static int fetch_and_copy(struct client *client, bool move,
        msgset_generator_init(&srcset_ctx, src_uidset);
 
        src_trans = mailbox_transaction_begin(client->mailbox, 0);
+       imap_transaction_set_cmd_reason(src_trans, cmd);
        search_ctx = mailbox_search_init(src_trans, search_args, NULL, 0, NULL);
 
        ret = 1;
@@ -133,7 +135,8 @@ static bool cmd_copy_full(struct client_command_context *cmd, bool move)
        t = mailbox_transaction_begin(destbox,
                                      MAILBOX_TRANSACTION_FLAG_EXTERNAL |
                                      MAILBOX_TRANSACTION_FLAG_ASSIGN_UIDS);
-       ret = fetch_and_copy(client, move, t, &src_trans, search_args,
+       imap_transaction_set_cmd_reason(t, cmd);
+       ret = fetch_and_copy(cmd, move, t, &src_trans, search_args,
                             &src_uidset, &copy_count);
        mail_search_args_unref(&search_args);
 
index 036ba1355011542b782814c77009f68e4ec04d96..96c2d70e59e4470e601a727ccca2ec1fc4846385 100644 (file)
@@ -309,7 +309,8 @@ bool cmd_fetch(struct client_command_context *cmd)
        if (ret <= 0)
                return ret < 0;
 
-       ctx = imap_fetch_alloc(client, cmd->pool);
+       ctx = imap_fetch_alloc(client, cmd->pool,
+                              t_strdup_printf("%s %s", cmd->name, cmd->args));
 
        if (!fetch_parse_args(ctx, cmd, &args[1], &next_arg) ||
            (imap_arg_get_list(next_arg, &list_arg) &&
index 73dab9a0e5dac6f4216a1de4584c6449154b4f48..0dea473cd5cd9adae9bc415eb663a8e350d7a0f4 100644 (file)
@@ -255,7 +255,8 @@ static int select_qresync(struct imap_select_context *ctx)
                return -1;
        }
 
-       fetch_ctx = imap_fetch_alloc(ctx->cmd->client, ctx->cmd->pool);
+       fetch_ctx = imap_fetch_alloc(ctx->cmd->client, ctx->cmd->pool,
+               t_strdup_printf("%s %s", ctx->cmd->name, ctx->cmd->args));
 
        imap_fetch_init_nofail_handler(fetch_ctx, imap_fetch_uid_init);
        imap_fetch_init_nofail_handler(fetch_ctx, imap_fetch_flags_init);
index e0adb9195fa7e8ccdf4f05bb55029ed7c5252179..41c08cc785f57bba56faa390d052bbeecf4990e0 100644 (file)
@@ -178,6 +178,7 @@ bool cmd_store(struct client_command_context *cmd)
        }
 
        t = mailbox_transaction_begin(client->mailbox, flags);
+       imap_transaction_set_cmd_reason(t, cmd);
        search_ctx = mailbox_search_init(t, search_args, NULL,
                                         MAIL_FETCH_FLAGS, NULL);
        mail_search_args_unref(&search_args);
index d1fe309668c3304dbebbf9a6d30390c099200c5d..5e7e28cc80f499c56fc59c605ee91e17e6150094 100644 (file)
@@ -187,6 +187,7 @@ static int imap_thread_orderedsubject(struct client_command_context *cmd,
        pool = pool_alloconly_create("orderedsubject thread", 1024);
        i_array_init(&threads, 128);
        trans = mailbox_transaction_begin(cmd->client->mailbox, 0);
+       imap_transaction_set_cmd_reason(trans, cmd);
        search_ctx = mailbox_search_init(trans, search_args, sort_program,
                                         0, NULL);
        while (mailbox_search_next(search_ctx, &mail)) {
index d18361e40d5fc5927047d4b9b3ac03084cadb799..0c525115512195daf9feec34f61f2c0928842121 100644 (file)
@@ -132,6 +132,13 @@ int client_open_save_dest_box(struct client_command_context *cmd,
        return 0;
 }
 
+void imap_transaction_set_cmd_reason(struct mailbox_transaction_context *trans,
+                                    struct client_command_context *cmd)
+{
+       mailbox_transaction_set_reason(trans, cmd->args[0] == '\0' ? cmd->name :
+               t_strdup_printf("%s %s", cmd->name, cmd->args));
+}
+
 const char *
 imap_get_error_string(struct client_command_context *cmd,
                      const char *error_string, enum mail_error error)
index 10680fe536a95bbdbc4b9dfb38d2a3b44431c2ec..6ebd65bd8bde5f3e5e1228a5d4dae7dd2c6623f7 100644 (file)
@@ -27,6 +27,9 @@ void imap_client_close_mailbox(struct client *client);
 int client_open_save_dest_box(struct client_command_context *cmd,
                              const char *name, struct mailbox **destbox_r);
 
+/* Set transaction's reason to the IMAP command name and parameters. */
+void imap_transaction_set_cmd_reason(struct mailbox_transaction_context *trans,
+                                    struct client_command_context *cmd);
 const char *
 imap_get_error_string(struct client_command_context *cmd,
                      const char *error_string, enum mail_error error);
index 2bca27596df91150690518e30c80630fb2a6853e..40d6c96665d5185ed30948243afce3766ab25204 100644 (file)
@@ -28,6 +28,7 @@ int imap_expunge(struct mailbox *box, struct mail_search_arg *next_search_arg,
        /* Refresh the flags so we'll expunge all messages marked as \Deleted
           by any session. */
        t = mailbox_transaction_begin(box, MAILBOX_TRANSACTION_FLAG_REFRESH);
+       mailbox_transaction_set_reason(t, "EXPUNGE");
        ctx = mailbox_search_init(t, search_args, NULL, 0, NULL);
        mail_search_args_unref(&search_args);
 
index 9d28c6583117f88cba108e7e255346f59e526068..eb877c0d920276530c7cd64b25123a68ea0e7578 100644 (file)
@@ -87,7 +87,7 @@ int imap_fetch_att_list_parse(struct client *client, pool_t pool,
        const char *str;
 
        i_zero(&init_ctx);
-       init_ctx.fetch_ctx = imap_fetch_alloc(client, pool);
+       init_ctx.fetch_ctx = imap_fetch_alloc(client, pool, "NOTIFY");
        init_ctx.pool = pool;
        init_ctx.args = list;
 
@@ -111,13 +111,14 @@ int imap_fetch_att_list_parse(struct client *client, pool_t pool,
 }
 
 struct imap_fetch_context *
-imap_fetch_alloc(struct client *client, pool_t pool)
+imap_fetch_alloc(struct client *client, pool_t pool, const char *reason)
 {
        struct imap_fetch_context *ctx;
 
        ctx = p_new(pool, struct imap_fetch_context, 1);
        ctx->client = client;
        ctx->ctx_pool = pool;
+       ctx->reason = p_strdup(pool, reason);
        pool_ref(pool);
 
        p_array_init(&ctx->all_headers, pool, 64);
@@ -231,6 +232,7 @@ get_expunges_fallback(struct mailbox *box,
        array_append_array(&search_args->args->value.seqset, uid_filter_arr);
 
        trans = mailbox_transaction_begin(box, 0);
+       mailbox_transaction_set_reason(trans, "FETCH send VANISHED");
        search_ctx = mailbox_search_init(trans, search_args, NULL, 0, NULL);
        mail_search_args_unref(&search_args);
 
@@ -371,6 +373,7 @@ void imap_fetch_begin(struct imap_fetch_context *ctx, struct mailbox *box,
        ctx->state.trans = mailbox_transaction_begin(box,
                MAILBOX_TRANSACTION_FLAG_HIDE |
                MAILBOX_TRANSACTION_FLAG_REFRESH);
+       mailbox_transaction_set_reason(ctx->state.trans, ctx->reason);
 
        mail_search_args_init(search_args, box, TRUE,
                              &ctx->client->search_saved_uidset);
index d688113e5c15da512140591d6e747ae219f91eac..ac5985b3468ea963bfb02ae99c20e9a7f00030d4 100644 (file)
@@ -78,6 +78,7 @@ struct imap_fetch_state {
 struct imap_fetch_context {
        struct client *client;
        pool_t ctx_pool;
+       const char *reason;
 
        enum mail_fetch_field fetch_data;
        ARRAY_TYPE(const_string) all_headers;
@@ -121,7 +122,7 @@ int imap_fetch_att_list_parse(struct client *client, pool_t pool,
                              const char **error_r);
 
 struct imap_fetch_context *
-imap_fetch_alloc(struct client *client, pool_t pool);
+imap_fetch_alloc(struct client *client, pool_t pool, const char *reason);
 void imap_fetch_free(struct imap_fetch_context **ctx);
 bool imap_fetch_init_handler(struct imap_fetch_init_context *init_ctx);
 void imap_fetch_init_nofail_handler(struct imap_fetch_context *ctx,
index 313d4c70c4b86b4ae29553e156c4921e667fe0c3..b0da519302edc8fac05a2681881b3635e94d6f6e 100644 (file)
@@ -581,6 +581,7 @@ bool imap_search_start(struct imap_search_context *ctx,
 
        ctx->box = cmd->client->mailbox;
        ctx->trans = mailbox_transaction_begin(ctx->box, 0);
+       imap_transaction_set_cmd_reason(ctx->trans, cmd);
        ctx->sargs = sargs;
        ctx->search_ctx =
                mailbox_search_init(ctx->trans, sargs, sort_program, 0, NULL);
index e8bccb3fc3c9c6d982fb3485b031a5bad66117f8..8e0afdd9b046fd8b7f6039568e7d59acfbc8b90b 100644 (file)
@@ -174,6 +174,7 @@ imap_state_export_mailbox_mails(buffer_t *dest, struct mailbox *box,
        mail_search_build_add_all(search_args);
 
        trans = mailbox_transaction_begin(box, 0);
+       mailbox_transaction_set_reason(trans, "unhibernate");
        search_ctx = mailbox_search_init(trans, search_args, NULL, 0, NULL);
        mail_search_args_unref(&search_args);
 
@@ -371,6 +372,7 @@ import_send_expunges(struct client *client,
        mail_search_build_add_all(search_args);
 
        trans = mailbox_transaction_begin(client->mailbox, 0);
+       mailbox_transaction_set_reason(trans, "unhibernate");
        search_ctx = mailbox_search_init(trans, search_args, NULL, 0, NULL);
        mail_search_args_unref(&search_args);
 
@@ -467,7 +469,7 @@ import_send_flag_changes(struct client *client,
        imap_search_add_changed_since(search_args, state->highest_modseq);
 
        pool = pool_alloconly_create("imap state flag changes", 1024);
-       fetch_ctx = imap_fetch_alloc(client, pool);
+       fetch_ctx = imap_fetch_alloc(client, pool, "unhibernate");
        pool_unref(&pool);
 
        imap_fetch_init_nofail_handler(fetch_ctx, imap_fetch_flags_init);
index 9fb4a444873b98adb7f7f6ad7609e0569ae98960..5d4e506b55534451849ffba593ffc75ff9a2ab1c 100644 (file)
@@ -228,6 +228,7 @@ imap_sync_init(struct client *client, struct mailbox *box,
 
        ctx->sync_ctx = mailbox_sync_init(box, flags);
        ctx->t = mailbox_transaction_begin(box, 0);
+       mailbox_transaction_set_reason(ctx->t, "Mailbox sync");
        ctx->mail = mail_alloc(ctx->t, MAIL_FETCH_FLAGS, NULL);
        ctx->messages_count = client->messages_count;
        i_array_init(&ctx->tmp_keywords, client->keywords.announce_count + 8);
index a1be841f77c7954261398afdb472d9572e39f4d6..a16866e01697f7d77f099a97dd4bbb65e35a3472 100644 (file)
@@ -84,6 +84,7 @@ index_mailbox_precache(struct master_connection *conn, struct mailbox *box)
        seq = status.last_cached_seq + 1;
 
        trans = mailbox_transaction_begin(box, MAILBOX_TRANSACTION_FLAG_NO_CACHE_DEC);
+       mailbox_transaction_set_reason(trans, "indexing");
        search_args = mail_search_build_init();
        mail_search_build_add_seqset(search_args, seq, status.messages);
        ctx = mailbox_search_init(trans, search_args, NULL,
index 7c06c2c37164e7d18870af96f944543882c27834..9d2f326a1b38ae1bae1c71740b8a0583bf714595 100644 (file)
@@ -313,6 +313,7 @@ index_mailbox_vsize_hdr_add_missing(struct mailbox_vsize_update *update,
        mail_search_build_add_seqset(search_args, seq1, seq2);
 
        trans = mailbox_transaction_begin(update->box, 0);
+       mailbox_transaction_set_reason(trans, "vsize update");
        search_ctx = mailbox_search_init(trans, search_args, NULL,
                                         MAIL_FETCH_VIRTUAL_SIZE, NULL);
        if (!require_result)
@@ -425,6 +426,7 @@ int index_mailbox_get_physical_size(struct mailbox *box,
                return -1;
 
        trans = mailbox_transaction_begin(box, 0);
+       mailbox_transaction_set_reason(trans, "mailbox physical size");
 
        search_args = mail_search_build_init();
        mail_search_build_add_all(search_args);
index 1c4a626692d29c1e3adf9cd43a8d88ec417610e4..e165f473b187e4f3d12265ccf495831ce51acc3f 100644 (file)
@@ -109,6 +109,7 @@ mailbox_autoexpunge(struct mailbox *box, unsigned int interval_time,
                last_rename_stamp = *(const uint32_t*)data;
 
        t = mailbox_transaction_begin(box, 0);
+       mailbox_transaction_set_reason(t, "autoexpunge");
        mail = mail_alloc(t, 0, NULL);
 
        hdr = mail_index_get_header(box->view);
index fe85f4ed295cb46a9de763ed251fd53426786a60..ed4453e56a09b15e1e38ba7992a93d0f807f2d71 100644 (file)
@@ -447,6 +447,7 @@ static void quota_mailbox_sync_notify(struct mailbox *box, uint32_t uid,
                if (box->tmp_sync_view != NULL)
                        box->view = box->tmp_sync_view;
                qbox->expunge_trans = mailbox_transaction_begin(box, 0);
+               mailbox_transaction_set_reason(qbox->expunge_trans, "quota");
                box->view = box_view;
                qbox->expunge_qt->tmp_mail =
                        mail_alloc(qbox->expunge_trans,