From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mail-lf1-f68.google.com (mail-lf1-f68.google.com [209.85.167.68]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by dev.tarantool.org (Postfix) with ESMTPS id 7970A469719 for ; Mon, 2 Nov 2020 15:15:09 +0300 (MSK) Received: by mail-lf1-f68.google.com with SMTP id l28so17122554lfp.10 for ; Mon, 02 Nov 2020 04:15:09 -0800 (PST) Date: Mon, 2 Nov 2020 15:15:06 +0300 From: Cyrill Gorcunov Message-ID: <20201102121506.GB2339@grain> References: <07914e287ba121ab735959bcf3bfd6794c591359.1604166646.git.v.shpilevoy@tarantool.org> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <07914e287ba121ab735959bcf3bfd6794c591359.1604166646.git.v.shpilevoy@tarantool.org> Subject: Re: [Tarantool-patches] [PATCH 2/3] txn: split complete into success and fail paths List-Id: Tarantool development patches List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: Vladislav Shpilevoy Cc: tarantool-patches@dev.tarantool.org On Sat, Oct 31, 2020 at 07:01:41PM +0100, Vladislav Shpilevoy wrote: > txn_complete used to handle all the transaction outcomes: > - manual rollback; > - error at WAL write; > - successful WAL write and commit; > - successful WAL write and wait for synchronization with replicas. Looks ok to me. Ack. Here is a diff on top of the patch I would add, but up to you, feel free to ignore. --- src/box/txn.c | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) Index: tarantool.git/src/box/txn.c =================================================================== --- tarantool.git.orig/src/box/txn.c +++ tarantool.git/src/box/txn.c @@ -533,7 +533,7 @@ txn_complete_fail(struct txn *txn) stailq_reverse(&txn->stmts); stailq_foreach_entry(stmt, &txn->stmts, next) txn_rollback_one_stmt(txn, stmt); - if (txn->engine) + if (txn->engine != NULL) engine_rollback(txn->engine, txn); if (txn_has_flag(txn, TXN_HAS_TRIGGERS)) txn_run_rollback_triggers(txn, &txn->on_rollback); @@ -544,12 +544,12 @@ void txn_complete_success(struct txn *txn) { double stop_tm = ev_monotonic_now(loop()); - if (stop_tm - txn->start_tm > too_long_threshold) { + double delta = stop_tm - txn->start_tm; + if (delta > too_long_threshold) { int n_rows = txn->n_new_rows + txn->n_applier_rows; say_warn_ratelimited("too long WAL write: %d rows at LSN %lld: " "%.3f sec", n_rows, - txn->signature - n_rows + 1, - stop_tm - txn->start_tm); + txn->signature - n_rows + 1, delta); } assert(!txn_has_flag(txn, TXN_IS_DONE)); assert(!txn_has_flag(txn, TXN_WAIT_SYNC));