]> git.ipfire.org Git - thirdparty/dovecot/core.git/commitdiff
lib-dict: Added dict_transaction_no_slowness_warning()
authorTimo Sirainen <timo.sirainen@dovecot.fi>
Mon, 15 Aug 2016 20:40:59 +0000 (23:40 +0300)
committerGitLab <gitlab@git.dovecot.net>
Wed, 17 Aug 2016 15:05:47 +0000 (18:05 +0300)
src/lib-dict/dict-client.c
src/lib-dict/dict-private.h
src/lib-dict/dict.c
src/lib-dict/dict.h

index 0a679ec37b3674d87e905a81066409be5b0acc6d..e5643a9753b0e499ea99ef2b2d6f09755c1fd07c 100644 (file)
@@ -1045,7 +1045,7 @@ client_dict_transaction_commit_callback(struct client_dict_cmd *cmd,
                /* include timing info always in error messages */
                result.error = t_strdup_printf("%s (reply took %u.%03u secs)",
                        result.error, diff/1000, diff%1000);
-       } else if (!cmd->background &&
+       } else if (!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)",
index 2f922248e31a0f82e5f632a46c24b005e2112e52..9b416be514d515ad047671ffbedea7980cbab91c 100644 (file)
@@ -61,6 +61,7 @@ struct dict_transaction_context {
        struct dict *dict;
 
        bool changed:1;
+       bool no_slowness_warning:1;
 };
 
 void dict_transaction_commit_async_noop_callback(
index 52651c73184c9ddf056ddaabd46fb302a3b08ba4..3aadd67225d2b4743759fe47a18217f880cb36fd 100644 (file)
@@ -202,6 +202,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;
+}
+
 struct dict_commit_sync_result {
        int ret;
        char *error;
index 0cfebe6a3cb024f3b9ed102ed7dcb8fd9e7fcb1c..1a5b43c0ce885550ae859a5b1922973e1598400a 100644 (file)
@@ -120,6 +120,11 @@ int dict_iterate_deinit(struct dict_iterate_context **ctx, const char **error_r)
 
 /* 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,