[Tarantool-patches] [PATCH v8 6/9] applier: add shorthands to queue access
Cyrill Gorcunov
gorcunov at gmail.com
Mon Aug 17 16:39:15 MSK 2020
We need to access first and last xrow in a queue
frenquently and opencoded variants are too ugly.
Lets provide shorthands.
Part-of #5129
Signed-off-by: Cyrill Gorcunov <gorcunov at gmail.com>
---
src/box/applier.cc | 36 +++++++++++++++++++++++++-----------
1 file changed, 25 insertions(+), 11 deletions(-)
diff --git a/src/box/applier.cc b/src/box/applier.cc
index 98fb87375..860a18681 100644
--- a/src/box/applier.cc
+++ b/src/box/applier.cc
@@ -648,6 +648,26 @@ struct applier_tx_row {
struct xrow_header row;
};
+/**
+ * Get first xrow from a list.
+ */
+static inline struct xrow_header *
+applier_first_row(struct stailq *rows)
+{
+ return &stailq_first_entry(rows,
+ struct applier_tx_row, next)->row;
+}
+
+/**
+ * Get last xrow from a list.
+ */
+static inline struct xrow_header *
+applier_last_row(struct stailq *rows)
+{
+ return &stailq_last_entry(rows,
+ struct applier_tx_row, next)->row;
+}
+
static struct applier_tx_row *
applier_read_tx_row(struct applier *applier)
{
@@ -749,8 +769,7 @@ applier_read_tx(struct applier *applier, struct stailq *rows)
}
stailq_add_tail(rows, &tx_row->next);
- } while (!stailq_last_entry(rows, struct applier_tx_row,
- next)->row.is_commit);
+ } while (!applier_last_row(rows)->is_commit);
}
static int
@@ -807,10 +826,8 @@ applier_txn_wal_write_cb(struct trigger *trigger, void *event)
static int
applier_apply_tx(struct stailq *rows)
{
- struct xrow_header *first_row = &stailq_first_entry(rows,
- struct applier_tx_row, next)->row;
- struct xrow_header *last_row;
- last_row = &stailq_last_entry(rows, struct applier_tx_row, next)->row;
+ struct xrow_header *first_row = applier_first_row(rows);
+ struct xrow_header *last_row = applier_last_row(rows);
struct replica *replica = replica_by_id(first_row->replica_id);
/*
* In a full mesh topology, the same set of changes
@@ -834,9 +851,7 @@ applier_apply_tx(struct stailq *rows)
*/
struct xrow_header *tmp;
while (true) {
- tmp = &stailq_first_entry(rows,
- struct applier_tx_row,
- next)->row;
+ tmp = applier_first_row(rows);
if (tmp->lsn <= vclock_get(&replicaset.applier.vclock,
tmp->replica_id)) {
stailq_shift(rows);
@@ -1122,8 +1137,7 @@ applier_subscribe(struct applier *applier)
* In case of an heartbeat message wake a writer up
* and check applier state.
*/
- if (stailq_first_entry(&rows, struct applier_tx_row,
- next)->row.lsn == 0)
+ if (applier_first_row(&rows)->lsn == 0)
applier_signal_ack(applier);
else if (applier_apply_tx(&rows) != 0)
diag_raise();
--
2.26.2
More information about the Tarantool-patches
mailing list