From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from smtp36.i.mail.ru (smtp36.i.mail.ru [94.100.177.96]) (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 432B042EF68 for ; Tue, 30 Jun 2020 02:15:55 +0300 (MSK) From: Vladislav Shpilevoy Date: Tue, 30 Jun 2020 01:15:25 +0200 Message-Id: In-Reply-To: References: MIME-Version: 1.0 Content-Transfer-Encoding: 8bit Subject: [Tarantool-patches] [PATCH v2 06/19] txn: introduce various reasons for txn rollback List-Id: Tarantool development patches List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: tarantool-patches@dev.tarantool.org, sergepetrenko@tarantool.org From: Serge Petrenko 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)