[Tarantool-patches] [PATCH v2 06/19] txn: introduce various reasons for txn rollback

Vladislav Shpilevoy v.shpilevoy at tarantool.org
Tue Jun 30 02:15:25 MSK 2020


From: Serge Petrenko <sergepetrenko at tarantool.org>

Transaction on_rollback triggers will need to distinguish
txn_limbo-issued rollbacks from rollbacks that happened due to a failed
WAL write or memory error.

Prerequisite #4847
Prerequisite #4848
---
 src/box/txn.c |  6 +++---
 src/box/txn.h | 23 +++++++++++++++++++++++
 2 files changed, 26 insertions(+), 3 deletions(-)

diff --git a/src/box/txn.c b/src/box/txn.c
index 6cfa98212..9de72461b 100644
--- a/src/box/txn.c
+++ b/src/box/txn.c
@@ -222,7 +222,7 @@ txn_begin(void)
 	txn->flags = 0;
 	txn->in_sub_stmt = 0;
 	txn->id = ++tsn;
-	txn->signature = -1;
+	txn->signature = TXN_SIGNATURE_ROLLBACK;
 	txn->engine = NULL;
 	txn->engine_tx = NULL;
 	txn->fk_deferred_count = 0;
@@ -589,7 +589,7 @@ static bool
 txn_commit_nop(struct txn *txn)
 {
 	if (txn->n_new_rows + txn->n_applier_rows == 0) {
-		txn->signature = 0;
+		txn->signature = TXN_SIGNATURE_NOP;
 		txn_complete(txn);
 		fiber_set_txn(fiber(), NULL);
 		return true;
@@ -738,7 +738,7 @@ txn_rollback(struct txn *txn)
 	trigger_clear(&txn->fiber_on_stop);
 	if (!txn_has_flag(txn, TXN_CAN_YIELD))
 		trigger_clear(&txn->fiber_on_yield);
-	txn->signature = -1;
+	txn->signature = TXN_SIGNATURE_ROLLBACK;
 	txn_complete(txn);
 	fiber_set_txn(fiber(), NULL);
 }
diff --git a/src/box/txn.h b/src/box/txn.h
index 232cc07a8..8ec4a248c 100644
--- a/src/box/txn.h
+++ b/src/box/txn.h
@@ -83,6 +83,29 @@ enum {
 	TXN_SUB_STMT_MAX = 3
 };
 
+enum {
+	/** Signature set for empty transactions. */
+	TXN_SIGNATURE_NOP = 0,
+	/**
+	 * The default signature value for failed transactions.
+	 * Indicates either write failure or any other failure
+	 * not caused by synchronous transaction processing.
+	 */
+	TXN_SIGNATURE_ROLLBACK = -1,
+	/**
+	 * A value set for failed synchronous transactions
+	 * on master, when not enough acks were collected.
+	 */
+	TXN_SIGNATURE_QUORUM_TIMEOUT = -2,
+	/**
+	 * A value set for failed synchronous transactions
+	 * on replica (or any instance during recovery), when a
+	 * transaction is rolled back because ROLLBACK message was
+	 * read.
+	 */
+	TXN_SIGNATURE_SYNC_ROLLBACK = -3,
+};
+
 /**
  * A single statement of a multi-statement
  * transaction: undo and redo info.
-- 
2.21.1 (Apple Git-122.3)



More information about the Tarantool-patches mailing list