From: Cyrill Gorcunov via Tarantool-patches <tarantool-patches@dev.tarantool.org> To: tml <tarantool-patches@dev.tarantool.org> Cc: Vladislav Shpilevoy <v.shpilevoy@tarantool.org> Subject: [Tarantool-patches] [PATCH 5/6] txn: stop using txn_has_flag Date: Fri, 22 Jan 2021 16:26:59 +0300 [thread overview] Message-ID: <20210122132700.272816-6-gorcunov@gmail.com> (raw) In-Reply-To: <20210122132700.272816-1-gorcunov@gmail.com> Part-of #5128 Signed-off-by: Cyrill Gorcunov <gorcunov@gmail.com> --- src/box/txn.c | 39 +++++++++++++++++++-------------------- src/box/txn.h | 2 +- src/box/txn_limbo.c | 26 +++++++++++++------------- 3 files changed, 33 insertions(+), 34 deletions(-) diff --git a/src/box/txn.c b/src/box/txn.c index 6197cf012..d1964b5f7 100644 --- a/src/box/txn.c +++ b/src/box/txn.c @@ -526,7 +526,7 @@ txn_free_or_wakeup(struct txn *txn) void txn_complete_fail(struct txn *txn) { - assert(!txn_has_flag(txn, TXN_IS_DONE)); + assert(!(txn->flags & TXN_IS_DONE)); assert(txn->signature < 0); txn->status = TXN_ABORTED; struct txn_stmt *stmt; @@ -535,7 +535,7 @@ txn_complete_fail(struct txn *txn) txn_rollback_one_stmt(txn, stmt); if (txn->engine != NULL) engine_rollback(txn->engine, txn); - if (txn_has_flag(txn, TXN_HAS_TRIGGERS)) + if (txn->flags & TXN_HAS_TRIGGERS) txn_run_rollback_triggers(txn, &txn->on_rollback); txn_free_or_wakeup(txn); } @@ -543,13 +543,12 @@ txn_complete_fail(struct txn *txn) void txn_complete_success(struct txn *txn) { - assert(!txn_has_flag(txn, TXN_IS_DONE)); - assert(!txn_has_flag(txn, TXN_WAIT_SYNC)); + assert(!(txn->flags & (TXN_IS_DONE | TXN_WAIT_SYNC))); assert(txn->signature >= 0); txn->status = TXN_COMMITTED; if (txn->engine != NULL) engine_commit(txn->engine, txn); - if (txn_has_flag(txn, TXN_HAS_TRIGGERS)) + if (txn->flags & TXN_HAS_TRIGGERS) txn_run_commit_triggers(txn, &txn->on_commit); txn_free_or_wakeup(txn); } @@ -587,9 +586,9 @@ txn_on_journal_write(struct journal_entry *entry) "%.3f sec", n_rows, txn->signature - n_rows + 1, delta); } - if (txn_has_flag(txn, TXN_HAS_TRIGGERS)) + if (txn->flags & TXN_HAS_TRIGGERS) txn_run_wal_write_triggers(txn); - if (!txn_has_flag(txn, TXN_WAIT_SYNC)) + if (!(txn->flags & TXN_WAIT_SYNC)) txn_complete_success(txn); else if (txn->fiber != NULL && txn->fiber != fiber()) fiber_wakeup(txn->fiber); @@ -640,7 +639,7 @@ txn_journal_entry_new(struct txn *txn) * space can't be synchronous. So if there is at least one * synchronous space, the transaction is not local. */ - if (!txn_has_flag(txn, TXN_FORCE_ASYNC)) { + if (!(txn->flags & TXN_FORCE_ASYNC)) { if (is_sync) { txn->flags |= TXN_WAIT_SYNC | TXN_WAIT_ACK; } else if (!txn_limbo_is_empty(&txn_limbo)) { @@ -692,8 +691,8 @@ 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)); + if (txn->flags & TXN_IS_ABORTED_BY_YIELD) { + assert(!(txn->flags & TXN_CAN_YIELD)); diag_set(ClientError, ER_TRANSACTION_YIELD); diag_log(); return -1; @@ -747,7 +746,7 @@ txn_prepare(struct txn *txn) assert(rlist_empty(&txn->conflicted_by_list)); trigger_clear(&txn->fiber_on_stop); - if (!txn_has_flag(txn, TXN_CAN_YIELD)) + if (!(txn->flags & TXN_CAN_YIELD)) trigger_clear(&txn->fiber_on_yield); txn->start_tm = ev_monotonic_now(loop()); @@ -814,7 +813,7 @@ txn_commit_async(struct txn *txn) if (req == NULL) goto rollback; - bool is_sync = txn_has_flag(txn, TXN_WAIT_SYNC); + bool is_sync = txn->flags & TXN_WAIT_SYNC; struct txn_limbo_entry *limbo_entry; if (is_sync) { /* @@ -837,7 +836,7 @@ txn_commit_async(struct txn *txn) if (limbo_entry == NULL) goto rollback; - if (txn_has_flag(txn, TXN_WAIT_ACK)) { + if (txn->flags & TXN_WAIT_ACK) { int64_t lsn = req->rows[txn->n_applier_rows - 1]->lsn; /* * Can't tell whether it is local or not - @@ -894,7 +893,7 @@ txn_commit(struct txn *txn) if (req == NULL) goto rollback; - bool is_sync = txn_has_flag(txn, TXN_WAIT_SYNC); + bool is_sync = txn->flags & TXN_WAIT_SYNC; if (is_sync) { /* * Remote rows, if any, come before local rows, so @@ -921,7 +920,7 @@ txn_commit(struct txn *txn) goto rollback; } if (is_sync) { - if (txn_has_flag(txn, TXN_WAIT_ACK)) { + if (txn->flags & TXN_WAIT_ACK) { int64_t lsn = req->rows[req->n_rows - 1]->lsn; /* * Use local LSN assignment. Because @@ -936,7 +935,7 @@ txn_commit(struct txn *txn) if (txn_limbo_wait_complete(&txn_limbo, limbo_entry) < 0) goto rollback; } - assert(txn_has_flag(txn, TXN_IS_DONE)); + assert(txn->flags & TXN_IS_DONE); assert(txn->signature >= 0); /* Synchronous transactions are freed by the calling fiber. */ @@ -945,7 +944,7 @@ txn_commit(struct txn *txn) rollback: assert(txn->fiber != NULL); - if (!txn_has_flag(txn, TXN_IS_DONE)) { + if (!(txn->flags & TXN_IS_DONE)) { fiber_set_txn(fiber(), txn); txn_rollback(txn); } else { @@ -970,7 +969,7 @@ txn_rollback(struct txn *txn) assert(txn == in_txn()); txn->status = TXN_ABORTED; trigger_clear(&txn->fiber_on_stop); - if (!txn_has_flag(txn, TXN_CAN_YIELD)) + if (!(txn->flags & TXN_CAN_YIELD)) trigger_clear(&txn->fiber_on_yield); txn->signature = TXN_SIGNATURE_ROLLBACK; txn_complete_fail(txn); @@ -991,7 +990,7 @@ bool txn_can_yield(struct txn *txn, bool set) { assert(txn == in_txn()); - bool could = txn_has_flag(txn, TXN_CAN_YIELD); + bool could = txn->flags & TXN_CAN_YIELD; if (set && !could) { txn->flags |= TXN_CAN_YIELD; trigger_clear(&txn->fiber_on_yield); @@ -1226,7 +1225,7 @@ txn_on_yield(struct trigger *trigger, void *event) (void) event; struct txn *txn = in_txn(); assert(txn != NULL); - assert(!txn_has_flag(txn, TXN_CAN_YIELD)); + assert(!(txn->flags & TXN_CAN_YIELD)); txn_rollback_to_svp(txn, NULL); txn->flags |= TXN_IS_ABORTED_BY_YIELD; return 0; diff --git a/src/box/txn.h b/src/box/txn.h index 201564000..36a413167 100644 --- a/src/box/txn.h +++ b/src/box/txn.h @@ -487,7 +487,7 @@ txn_commit_async(struct txn *txn); static inline void txn_init_triggers(struct txn *txn) { - if (!txn_has_flag(txn, TXN_HAS_TRIGGERS)) { + if (!(txn->flags & TXN_HAS_TRIGGERS)) { rlist_create(&txn->on_commit); rlist_create(&txn->on_rollback); rlist_create(&txn->on_wal_write); diff --git a/src/box/txn_limbo.c b/src/box/txn_limbo.c index d418530ad..86b3bc580 100644 --- a/src/box/txn_limbo.c +++ b/src/box/txn_limbo.c @@ -60,7 +60,7 @@ txn_limbo_last_synchro_entry(struct txn_limbo *limbo) { struct txn_limbo_entry *entry; rlist_foreach_entry_reverse(entry, &limbo->queue, in_queue) { - if (txn_has_flag(entry->txn, TXN_WAIT_ACK)) + if (entry->txn->flags & TXN_WAIT_ACK) return entry; } return NULL; @@ -69,7 +69,7 @@ txn_limbo_last_synchro_entry(struct txn_limbo *limbo) struct txn_limbo_entry * txn_limbo_append(struct txn_limbo *limbo, uint32_t id, struct txn *txn) { - assert(txn_has_flag(txn, TXN_WAIT_SYNC)); + assert(txn->flags & TXN_WAIT_SYNC); assert(limbo == &txn_limbo); /* * Transactions should be added to the limbo before WAL write. Limbo @@ -168,7 +168,7 @@ txn_limbo_assign_remote_lsn(struct txn_limbo *limbo, assert(limbo->owner_id != instance_id); assert(entry->lsn == -1); assert(lsn > 0); - assert(txn_has_flag(entry->txn, TXN_WAIT_ACK)); + assert(entry->txn->flags & TXN_WAIT_ACK); (void) limbo; entry->lsn = lsn; } @@ -181,7 +181,7 @@ txn_limbo_assign_local_lsn(struct txn_limbo *limbo, assert(limbo->owner_id == instance_id); assert(entry->lsn == -1); assert(lsn > 0); - assert(txn_has_flag(entry->txn, TXN_WAIT_ACK)); + assert(entry->txn->flags & TXN_WAIT_ACK); entry->lsn = lsn; /* @@ -215,14 +215,14 @@ txn_limbo_write_rollback(struct txn_limbo *limbo, int64_t lsn); int txn_limbo_wait_complete(struct txn_limbo *limbo, struct txn_limbo_entry *entry) { - assert(entry->lsn > 0 || !txn_has_flag(entry->txn, TXN_WAIT_ACK)); + assert(entry->lsn > 0 || !(entry->txn->flags & TXN_WAIT_ACK)); bool cancellable = fiber_set_cancellable(false); if (txn_limbo_entry_is_complete(entry)) goto complete; - assert(!txn_has_flag(entry->txn, TXN_IS_DONE)); - assert(txn_has_flag(entry->txn, TXN_WAIT_SYNC)); + assert(!(entry->txn->flags & TXN_IS_DONE)); + assert(entry->txn->flags & TXN_WAIT_SYNC); double start_time = fiber_clock(); while (true) { double deadline = start_time + replication_synchro_timeout; @@ -288,7 +288,7 @@ txn_limbo_wait_complete(struct txn_limbo *limbo, struct txn_limbo_entry *entry) * installed the commit/rollback flag. */ assert(rlist_empty(&entry->in_queue)); - assert(txn_has_flag(entry->txn, TXN_IS_DONE)); + assert(entry->txn->flags & TXN_IS_DONE); fiber_set_cancellable(cancellable); /* * The first tx to be rolled back already performed all @@ -384,7 +384,7 @@ txn_limbo_read_confirm(struct txn_limbo *limbo, int64_t lsn) * it is last, it does not depend on a not finished sync * transaction anymore and can be confirmed right away. */ - if (txn_has_flag(e->txn, TXN_WAIT_ACK)) { + if (e->txn->flags & TXN_WAIT_ACK) { /* Sync transaction not covered by the confirmation. */ if (e->lsn > lsn) break; @@ -444,7 +444,7 @@ txn_limbo_read_rollback(struct txn_limbo *limbo, int64_t lsn) struct txn_limbo_entry *e, *tmp; struct txn_limbo_entry *last_rollback = NULL; rlist_foreach_entry_reverse(e, &limbo->queue, in_queue) { - if (!txn_has_flag(e->txn, TXN_WAIT_ACK)) + if (!(e->txn->flags & TXN_WAIT_ACK)) continue; if (e->lsn < lsn) break; @@ -527,7 +527,7 @@ txn_limbo_ack(struct txn_limbo *limbo, uint32_t replica_id, int64_t lsn) * transactions are automatically committed right * after all the previous sync transactions are. */ - if (!txn_has_flag(e->txn, TXN_WAIT_ACK)) { + if (!(e->txn->flags & TXN_WAIT_ACK)) { assert(e->lsn == -1); if (confirm_lsn == -1) continue; @@ -661,7 +661,7 @@ txn_limbo_force_empty(struct txn_limbo *limbo, int64_t confirm_lsn) struct txn_limbo_entry *e, *last_quorum = NULL; struct txn_limbo_entry *rollback = NULL; rlist_foreach_entry(e, &limbo->queue, in_queue) { - if (txn_has_flag(e->txn, TXN_WAIT_ACK)) { + if (e->txn->flags & TXN_WAIT_ACK) { if (e->lsn <= confirm_lsn) { last_quorum = e; } else { @@ -690,7 +690,7 @@ txn_limbo_on_parameters_change(struct txn_limbo *limbo) int64_t confirm_lsn = -1; rlist_foreach_entry(e, &limbo->queue, in_queue) { assert(e->ack_count <= VCLOCK_MAX); - if (!txn_has_flag(e->txn, TXN_WAIT_ACK)) { + if (!(e->txn->flags & TXN_WAIT_ACK)) { assert(e->lsn == -1); if (confirm_lsn == -1) continue; -- 2.29.2
next prev parent reply other threads:[~2021-01-22 13:29 UTC|newest] Thread overview: 14+ messages / expand[flat|nested] mbox.gz Atom feed top 2021-01-22 13:26 [Tarantool-patches] [PATCH 0/6] txn: drop txn_X_flag helpers Cyrill Gorcunov via Tarantool-patches 2021-01-22 13:26 ` [Tarantool-patches] [PATCH 1/6] txn: convert flags to explicit bitfield Cyrill Gorcunov via Tarantool-patches 2021-01-22 13:26 ` [Tarantool-patches] [PATCH 2/6] txn: stop using txn_set_flag Cyrill Gorcunov via Tarantool-patches 2021-01-22 13:26 ` [Tarantool-patches] [PATCH 3/6] test/unit: snap_quorum_delay -- " Cyrill Gorcunov via Tarantool-patches 2021-01-30 19:17 ` Vladislav Shpilevoy via Tarantool-patches 2021-01-31 10:40 ` Cyrill Gorcunov via Tarantool-patches 2021-01-22 13:26 ` [Tarantool-patches] [PATCH 4/6] txn: stop using txn_clear_flag Cyrill Gorcunov via Tarantool-patches 2021-01-22 13:26 ` Cyrill Gorcunov via Tarantool-patches [this message] 2021-01-30 19:17 ` [Tarantool-patches] [PATCH 5/6] txn: stop using txn_has_flag Vladislav Shpilevoy via Tarantool-patches 2021-01-31 22:13 ` Cyrill Gorcunov via Tarantool-patches 2021-02-03 19:47 ` Vladislav Shpilevoy via Tarantool-patches 2021-02-03 22:02 ` Cyrill Gorcunov via Tarantool-patches 2021-01-22 13:27 ` [Tarantool-patches] [PATCH 6/6] txn: drop unused txn_x_flag helpers Cyrill Gorcunov via Tarantool-patches 2021-01-27 12:08 ` [Tarantool-patches] [PATCH 0/6] txn: drop txn_X_flag helpers Serge Petrenko via Tarantool-patches
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=20210122132700.272816-6-gorcunov@gmail.com \ --to=tarantool-patches@dev.tarantool.org \ --cc=gorcunov@gmail.com \ --cc=v.shpilevoy@tarantool.org \ --subject='Re: [Tarantool-patches] [PATCH 5/6] txn: stop using txn_has_flag' \ /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