From: Timo Sirainen Date: Mon, 15 Aug 2016 20:40:59 +0000 (+0300) Subject: lib-dict: Added dict_transaction_no_slowness_warning() X-Git-Tag: 2.2.26~333 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=e53c3da9b50a7054b2b797b58d0311516c60cc6e;p=thirdparty%2Fdovecot%2Fcore.git lib-dict: Added dict_transaction_no_slowness_warning() --- diff --git a/src/lib-dict/dict-client.c b/src/lib-dict/dict-client.c index b0f964bb3b..78c2d153bb 100644 --- a/src/lib-dict/dict-client.c +++ b/src/lib-dict/dict-client.c @@ -1045,6 +1045,7 @@ client_dict_transaction_commit_callback(struct client_dict_cmd *cmd, } if (ret >= 0 && !cmd->background && + !cmd->trans->ctx.no_slowness_warning && diff >= DICT_CLIENT_REQUEST_WARN_TIMEOUT_MSECS) { i_warning("read(%s): dict commit took %u.%03u seconds: " "%s (%u commands, first: %s)", diff --git a/src/lib-dict/dict-private.h b/src/lib-dict/dict-private.h index f94e0552e7..43d768d87d 100644 --- a/src/lib-dict/dict-private.h +++ b/src/lib-dict/dict-private.h @@ -60,6 +60,7 @@ struct dict_transaction_context { struct dict *dict; unsigned int changed:1; + unsigned int no_slowness_warning:1; }; extern struct dict dict_driver_client; diff --git a/src/lib-dict/dict.c b/src/lib-dict/dict.c index f6d3f68eea..5b775396af 100644 --- a/src/lib-dict/dict.c +++ b/src/lib-dict/dict.c @@ -206,6 +206,11 @@ struct dict_transaction_context *dict_transaction_begin(struct dict *dict) return dict->v.transaction_init(dict); } +void dict_transaction_no_slowness_warning(struct dict_transaction_context *ctx) +{ + ctx->no_slowness_warning = TRUE; +} + int dict_transaction_commit(struct dict_transaction_context **_ctx) { struct dict_transaction_context *ctx = *_ctx; diff --git a/src/lib-dict/dict.h b/src/lib-dict/dict.h index fe2604f557..150834dba5 100644 --- a/src/lib-dict/dict.h +++ b/src/lib-dict/dict.h @@ -118,6 +118,11 @@ int dict_iterate_deinit(struct dict_iterate_context **ctx); /* Start a new dictionary transaction. */ struct dict_transaction_context *dict_transaction_begin(struct dict *dict); +/* Don't log a warning if the transaction commit took a long time. + This is needed if there are no guarantees that an asynchronous commit will + finish up anytime soon. Mainly useful for transactions which aren't + especially important whether they finish or not. */ +void dict_transaction_no_slowness_warning(struct dict_transaction_context *ctx); /* Commit the transaction. Returns 1 if ok, 0 if dict_atomic_inc() was used on a nonexistent key, -1 if failed. */ int dict_transaction_commit(struct dict_transaction_context **ctx);