From: Timo Sirainen Date: Sat, 1 Apr 2017 19:12:37 +0000 (+0300) Subject: global: Add mailbox_transaction_set_reason() calls X-Git-Tag: 2.2.29.rc1~28 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=cbe889f7623b337c2996007a11fdf0bfe175764e;p=thirdparty%2Fdovecot%2Fcore.git global: Add mailbox_transaction_set_reason() calls Added to the most important places. --- diff --git a/src/imap/cmd-append.c b/src/imap/cmd-append.c index 9fd9052617..aae5fa3cbc 100644 --- a/src/imap/cmd-append.c +++ b/src/imap/cmd-append.c @@ -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); diff --git a/src/imap/cmd-copy.c b/src/imap/cmd-copy.c index eefdb4e6e4..b4b71b1a49 100644 --- a/src/imap/cmd-copy.c +++ b/src/imap/cmd-copy.c @@ -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, ©_count); mail_search_args_unref(&search_args); diff --git a/src/imap/cmd-fetch.c b/src/imap/cmd-fetch.c index 036ba13550..96c2d70e59 100644 --- a/src/imap/cmd-fetch.c +++ b/src/imap/cmd-fetch.c @@ -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) && diff --git a/src/imap/cmd-select.c b/src/imap/cmd-select.c index 73dab9a0e5..0dea473cd5 100644 --- a/src/imap/cmd-select.c +++ b/src/imap/cmd-select.c @@ -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); diff --git a/src/imap/cmd-store.c b/src/imap/cmd-store.c index e0adb9195f..41c08cc785 100644 --- a/src/imap/cmd-store.c +++ b/src/imap/cmd-store.c @@ -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); diff --git a/src/imap/cmd-thread.c b/src/imap/cmd-thread.c index d1fe309668..5e7e28cc80 100644 --- a/src/imap/cmd-thread.c +++ b/src/imap/cmd-thread.c @@ -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)) { diff --git a/src/imap/imap-commands-util.c b/src/imap/imap-commands-util.c index d18361e40d..0c52511551 100644 --- a/src/imap/imap-commands-util.c +++ b/src/imap/imap-commands-util.c @@ -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) diff --git a/src/imap/imap-commands-util.h b/src/imap/imap-commands-util.h index 10680fe536..6ebd65bd8b 100644 --- a/src/imap/imap-commands-util.h +++ b/src/imap/imap-commands-util.h @@ -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); diff --git a/src/imap/imap-expunge.c b/src/imap/imap-expunge.c index 2bca27596d..40d6c96665 100644 --- a/src/imap/imap-expunge.c +++ b/src/imap/imap-expunge.c @@ -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); diff --git a/src/imap/imap-fetch.c b/src/imap/imap-fetch.c index 9d28c65831..eb877c0d92 100644 --- a/src/imap/imap-fetch.c +++ b/src/imap/imap-fetch.c @@ -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); diff --git a/src/imap/imap-fetch.h b/src/imap/imap-fetch.h index d688113e5c..ac5985b346 100644 --- a/src/imap/imap-fetch.h +++ b/src/imap/imap-fetch.h @@ -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, diff --git a/src/imap/imap-search.c b/src/imap/imap-search.c index 313d4c70c4..b0da519302 100644 --- a/src/imap/imap-search.c +++ b/src/imap/imap-search.c @@ -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); diff --git a/src/imap/imap-state.c b/src/imap/imap-state.c index e8bccb3fc3..8e0afdd9b0 100644 --- a/src/imap/imap-state.c +++ b/src/imap/imap-state.c @@ -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); diff --git a/src/imap/imap-sync.c b/src/imap/imap-sync.c index 9fb4a44487..5d4e506b55 100644 --- a/src/imap/imap-sync.c +++ b/src/imap/imap-sync.c @@ -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); diff --git a/src/indexer/master-connection.c b/src/indexer/master-connection.c index a1be841f77..a16866e016 100644 --- a/src/indexer/master-connection.c +++ b/src/indexer/master-connection.c @@ -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, diff --git a/src/lib-storage/index/index-mailbox-size.c b/src/lib-storage/index/index-mailbox-size.c index 7c06c2c371..9d2f326a1b 100644 --- a/src/lib-storage/index/index-mailbox-size.c +++ b/src/lib-storage/index/index-mailbox-size.c @@ -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); diff --git a/src/lib-storage/mail-autoexpunge.c b/src/lib-storage/mail-autoexpunge.c index 1c4a626692..e165f473b1 100644 --- a/src/lib-storage/mail-autoexpunge.c +++ b/src/lib-storage/mail-autoexpunge.c @@ -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); diff --git a/src/plugins/quota/quota-storage.c b/src/plugins/quota/quota-storage.c index fe85f4ed29..ed4453e56a 100644 --- a/src/plugins/quota/quota-storage.c +++ b/src/plugins/quota/quota-storage.c @@ -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,