[Tarantool-patches] [PATCH 7/8] xrow: introduce CONFIRM entry
Serge Petrenko
sergepetrenko at tarantool.org
Tue Jun 23 11:33:39 MSK 2020
09.06.2020 15:20, Serge Petrenko пишет:
> Add methods to encode/decode CONFIRM entry.
> A CONFIRM entry will be written to WAL by synchronous replication master
> as soon as it finds that the transaction was applied on a quorum of
> replicas.
> CONFIRM rows share the same header with other rows in WAL,but their body
> differs: it's just a map containing replica_id and lsn of the last
> confirmed transaction.
>
> Part-of #4847
New commit:
commit b6ff1a633655edf2c4285e699a757adfcd8926d0
Author: Serge Petrenko <sergepetrenko at tarantool.org>
Date: Mon Jun 22 21:45:55 2020 +0300
txn: introduce various reasons for txn rollback
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
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.
--
Serge Petrenko
More information about the Tarantool-patches
mailing list