From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from smtp50.i.mail.ru (smtp50.i.mail.ru [94.100.177.110]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by dev.tarantool.org (Postfix) with ESMTPS id 602E64429E1 for ; Tue, 23 Jun 2020 11:33:41 +0300 (MSK) References: <1a6094cfafb763decde38534e3095cc3b96e5cb2.1591701695.git.sergepetrenko@tarantool.org> From: Serge Petrenko Message-ID: <89eb0d78-1545-8d8b-2c53-fe22de30042e@tarantool.org> Date: Tue, 23 Jun 2020 11:33:39 +0300 MIME-Version: 1.0 In-Reply-To: <1a6094cfafb763decde38534e3095cc3b96e5cb2.1591701695.git.sergepetrenko@tarantool.org> Content-Type: text/plain; charset="utf-8"; format="flowed" Content-Transfer-Encoding: 8bit Content-Language: en-GB Subject: Re: [Tarantool-patches] [PATCH 7/8] xrow: introduce CONFIRM entry List-Id: Tarantool development patches List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: v.shpilevoy@tarantool.org, sergos@tarantool.org, gorcunov@gmail.com Cc: tarantool-patches@dev.tarantool.org 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 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