[Tarantool-patches] [PATCH 2/3] txn: split complete into success and fail paths

Cyrill Gorcunov gorcunov at gmail.com
Mon Nov 2 15:15:06 MSK 2020


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));


More information about the Tarantool-patches mailing list