[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