[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