From: Aleksandr Lyapunov <alyapunov@tarantool.org> To: tarantool-patches@dev.tarantool.org Subject: [Tarantool-patches] [PATCH v4 04/12] txm: introduce prepare sequence number Date: Tue, 8 Sep 2020 13:22:04 +0300 [thread overview] Message-ID: <1599560532-27089-5-git-send-email-alyapunov@tarantool.org> (raw) In-Reply-To: <1599560532-27089-1-git-send-email-alyapunov@tarantool.org> Prepare sequence number is a monotonically increasing ID that is assigned to any prepared transaction. This ID is suitable for serialization order resolution: the bigger is ID - the later the transaction exists in the serialization order of transactions. Note that id of transactions has quite different order in case when transaction could yield - an younger (bigger id) transaction can prepare/commit first (lower psn) while older tx sleeps in vain. Also it should be mentioned that LSN has the same order as PSN, but it has two general differences: 1. The LSN sequence has no holes, i.e. it is a natural number sequence. This property is useless for transaction engine. 2. The LSN sequence is provided by WAL writer and thus LSN is not available for TX thas was prepared and haven't been committed yet. That feature makes psn more suitable sequence for transactions as it allows to order prepared but not committed transaction and allows, for example, to create a read view between prepared transactions. Part of #4897 --- src/box/txn.c | 6 ++++++ src/box/txn.h | 8 ++++++++ 2 files changed, 14 insertions(+) diff --git a/src/box/txn.c b/src/box/txn.c index d9fbb51..1dfe59f 100644 --- a/src/box/txn.c +++ b/src/box/txn.c @@ -40,6 +40,9 @@ double too_long_threshold; +/** Last prepare-sequence-number that was assigned to prepared TX. */ +int64_t txn_last_psn = 0; + /* Txn cache. */ static struct stailq txn_cache = {NULL, &txn_cache.first}; @@ -225,6 +228,7 @@ txn_begin(void) txn->flags = 0; txn->in_sub_stmt = 0; txn->id = ++tsn; + txn->psn = 0; txn->status = TXN_INPROGRESS; txn->signature = TXN_SIGNATURE_ROLLBACK; txn->engine = NULL; @@ -648,6 +652,8 @@ txn_journal_entry_new(struct txn *txn) static int txn_prepare(struct txn *txn) { + txn->psn = ++txn_last_psn; + if (txn_has_flag(txn, TXN_IS_ABORTED_BY_YIELD)) { assert(!txn_has_flag(txn, TXN_CAN_YIELD)); diag_set(ClientError, ER_TRANSACTION_YIELD); diff --git a/src/box/txn.h b/src/box/txn.h index 007284f..d7e77e5 100644 --- a/src/box/txn.h +++ b/src/box/txn.h @@ -44,6 +44,9 @@ extern "C" { /** box statistics */ extern struct rmean *rmean_box; +/** Last prepare-sequence-number that was assigned to prepared TX. */ +extern int64_t txn_last_psn; + struct journal_entry; struct engine; struct space; @@ -264,6 +267,11 @@ struct txn { * Valid IDs start from 1. */ int64_t id; + /** + * A sequential ID that is assigned when the TX becomes prepared. + * Transactions are committed in that order. + */ + int64_t psn; /** Status of the TX */ enum txn_status status; /** List of statements in a transaction. */ -- 2.7.4
next prev parent reply other threads:[~2020-09-08 10:22 UTC|newest] Thread overview: 26+ messages / expand[flat|nested] mbox.gz Atom feed top 2020-09-08 10:22 [Tarantool-patches] [PATCH v4 00/12] Transaction engine for memtx engine Aleksandr Lyapunov 2020-09-08 10:22 ` [Tarantool-patches] [PATCH v4 01/12] vinyl: rename tx_manager -> vy_tx_manager Aleksandr Lyapunov 2020-09-08 10:22 ` [Tarantool-patches] [PATCH v4 02/12] txm: add TX status Aleksandr Lyapunov 2020-09-08 10:22 ` [Tarantool-patches] [PATCH v4 03/12] txm: save does_require_old_tuple flag in txn_stmt Aleksandr Lyapunov 2020-09-08 10:22 ` Aleksandr Lyapunov [this message] 2020-09-08 10:22 ` [Tarantool-patches] [PATCH v4 05/12] txm: introduce memtx tx manager Aleksandr Lyapunov 2020-09-08 10:22 ` [Tarantool-patches] [PATCH v4 06/12] txm: introduce conflict tracker Aleksandr Lyapunov 2020-09-14 16:36 ` Nikita Pettik 2020-09-08 10:22 ` [Tarantool-patches] [PATCH v4 07/12] txm: introduce memtx_story Aleksandr Lyapunov 2020-09-15 14:33 ` Nikita Pettik 2020-09-22 17:51 ` Aleksandr Lyapunov 2020-09-23 10:25 ` Nikita Pettik 2020-09-23 11:09 ` Aleksandr Lyapunov 2020-09-08 10:22 ` [Tarantool-patches] [PATCH v4 08/12] txm: introduce snapshot cleaner Aleksandr Lyapunov 2020-09-08 10:22 ` [Tarantool-patches] [PATCH v4 09/12] txm: clarify all fetched tuples Aleksandr Lyapunov 2020-09-08 10:22 ` [Tarantool-patches] [PATCH v4 10/12] txm: use new tx manager in memtx Aleksandr Lyapunov 2020-09-15 17:59 ` Nikita Pettik 2020-09-22 17:53 ` Aleksandr Lyapunov 2020-09-23 10:26 ` Nikita Pettik 2020-09-08 10:22 ` [Tarantool-patches] [PATCH v4 11/12] test: move txn_proxy.lua to box/lua Aleksandr Lyapunov 2020-09-08 10:22 ` [Tarantool-patches] [PATCH v4 12/12] txm: add a test Aleksandr Lyapunov 2020-09-15 18:05 ` Nikita Pettik 2020-09-22 17:58 ` Aleksandr Lyapunov 2020-09-23 11:07 ` Nikita Pettik 2020-09-23 11:12 ` Aleksandr Lyapunov 2020-09-23 12:18 ` [Tarantool-patches] [PATCH v4 00/12] Transaction engine for memtx engine Kirill Yukhin
Reply instructions: You may reply publicly to this message via plain-text email using any one of the following methods: * Save the following mbox file, import it into your mail client, and reply-to-all from there: mbox Avoid top-posting and favor interleaved quoting: https://en.wikipedia.org/wiki/Posting_style#Interleaved_style * Reply using the --to, --cc, and --in-reply-to switches of git-send-email(1): git send-email \ --in-reply-to=1599560532-27089-5-git-send-email-alyapunov@tarantool.org \ --to=alyapunov@tarantool.org \ --cc=tarantool-patches@dev.tarantool.org \ --subject='Re: [Tarantool-patches] [PATCH v4 04/12] txm: introduce prepare sequence number' \ /path/to/YOUR_REPLY https://kernel.org/pub/software/scm/git/docs/git-send-email.html * If your mail client supports setting the In-Reply-To header via mailto: links, try the mailto: link
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox