From c329e7031be79505d67425f7c9c5b464c0a6ce8f Mon Sep 17 00:00:00 2001
From: Georgiy Lebedev <g.lebedev@tarantool.org>
Date: Tue, 17 Jan 2023 16:42:25 +0300
Subject: [PATCH] box: reset transaction's PSN if transaction preparation fails
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

Currently, if transaction preparation fails, the transaction is left in an
inconsistent state: it has a PSN assigned to it, but its status is not
'prepared' — fix this by resetting its PSN.

Needed for #7930

NO_CHANGELOG=refactoring
NO_DOC=refactoring
NO_TEST=refactoring
---
 src/box/txn.c | 4 +++-
 1 file changed, 3 insertions(+), 1 deletion(-)

diff --git a/src/box/txn.c b/src/box/txn.c
index 75dacff390..daf6264fca 100644
--- a/src/box/txn.c
+++ b/src/box/txn.c
@@ -988,8 +988,10 @@ txn_prepare(struct txn *txn)
 	 * we have a bunch of IPROTO_NOP statements.
 	 */
 	if (txn->engine != NULL) {
-		if (engine_prepare(txn->engine, txn) != 0)
+		if (engine_prepare(txn->engine, txn) != 0) {
+			txn->psn = 0;
 			return -1;
+		}
 	}
 
 	trigger_clear(&txn->fiber_on_stop);
-- 
GitLab