/* 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)",
struct dict *dict;
bool changed:1;
+ bool no_slowness_warning:1;
};
void dict_transaction_commit_async_noop_callback(
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;
/* 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,