]> 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)
committerTimo Sirainen <timo.sirainen@dovecot.fi>
Wed, 17 Aug 2016 15:33:46 +0000 (18:33 +0300)
src/lib-dict/dict-client.c
src/lib-dict/dict-private.h
src/lib-dict/dict.c
src/lib-dict/dict.h

index b0f964bb3b0df064089d4ac814dcd7b2ee815727..78c2d153bbc10a43cfc2d56101d218b6357cecc8 100644 (file)
@@ -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)",
index f94e0552e7579838d6f688a9fdaa09f120f5d6be..43d768d87df08134a51a11e25870a2822cd539af 100644 (file)
@@ -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;
index f6d3f68eead05071d3ef2d16fa4d2cd72657460f..5b775396af3eed7bad276f8f0cf0aede51fe0889 100644 (file)
@@ -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;
index fe2604f5574384186f693117663eb2052df95d66..150834dba5be1ce7ed698065c764b258570e746c 100644 (file)
@@ -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);