changeset 20668:44c049b65011

lib-dict: Added dict_transaction_no_slowness_warning()
author Timo Sirainen <timo.sirainen@dovecot.fi>
date Mon, 15 Aug 2016 23:40:59 +0300
parents af50b2cdc40c
children 7225abbbc344
files src/lib-dict/dict-client.c src/lib-dict/dict-private.h src/lib-dict/dict.c src/lib-dict/dict.h
diffstat 4 files changed, 12 insertions(+), 0 deletions(-) [+]
line wrap: on
line diff
--- a/src/lib-dict/dict-client.c	Mon Aug 15 23:36:13 2016 +0300
+++ b/src/lib-dict/dict-client.c	Mon Aug 15 23:40:59 2016 +0300
@@ -1045,6 +1045,7 @@
 	}
 
 	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)",
--- a/src/lib-dict/dict-private.h	Mon Aug 15 23:36:13 2016 +0300
+++ b/src/lib-dict/dict-private.h	Mon Aug 15 23:40:59 2016 +0300
@@ -60,6 +60,7 @@
 	struct dict *dict;
 
 	unsigned int changed:1;
+	unsigned int no_slowness_warning:1;
 };
 
 extern struct dict dict_driver_client;
--- a/src/lib-dict/dict.c	Mon Aug 15 23:36:13 2016 +0300
+++ b/src/lib-dict/dict.c	Mon Aug 15 23:40:59 2016 +0300
@@ -206,6 +206,11 @@
 	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;
--- a/src/lib-dict/dict.h	Mon Aug 15 23:36:13 2016 +0300
+++ b/src/lib-dict/dict.h	Mon Aug 15 23:40:59 2016 +0300
@@ -118,6 +118,11 @@
 
 /* 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);