[Tarantool-patches] [PATCH 5/6] txn: stop using txn_has_flag

Cyrill Gorcunov gorcunov at gmail.com
Fri Jan 22 16:26:59 MSK 2021


Part-of #5128

Signed-off-by: Cyrill Gorcunov <gorcunov at 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



More information about the Tarantool-patches mailing list