[Tarantool-patches] [PATCH v2 1/3] applier: encode timestamp into vclock message

Cyrill Gorcunov gorcunov at gmail.com
Mon Feb 1 13:00:35 MSK 2021


The vclock message sent by "applierw" fiber to the replication
master node operates not only for tracking status of applied data
but also as a heartbeat packets (after 1.7.7).

To track downstream node lag we can put realtime value here.
This won't break any existing instances without the patch
because the field is unused anywhere yet.

Part-of #5447

Signed-off-by: Cyrill Gorcunov <gorcunov at gmail.com>
---
 src/box/applier.cc |  3 ++-
 src/box/xrow.c     |  5 ++++-
 src/box/xrow.h     | 21 +++++++++++++++++++--
 3 files changed, 25 insertions(+), 4 deletions(-)

diff --git a/src/box/applier.cc b/src/box/applier.cc
index 553db76fc..a418edef0 100644
--- a/src/box/applier.cc
+++ b/src/box/applier.cc
@@ -183,7 +183,8 @@ applier_writer_f(va_list ap)
 		try {
 			applier->has_acks_to_send = false;
 			struct xrow_header xrow;
-			xrow_encode_vclock(&xrow, &replicaset.vclock);
+			xrow_encode_vclock_timed(&xrow, &replicaset.vclock,
+						 ev_now(loop()));
 			coio_write_xrow(&io, &xrow);
 			ERROR_INJECT(ERRINJ_APPLIER_SLOW_ACK, {
 				fiber_sleep(0.01);
diff --git a/src/box/xrow.c b/src/box/xrow.c
index bc06738ad..b7b522820 100644
--- a/src/box/xrow.c
+++ b/src/box/xrow.c
@@ -1629,7 +1629,9 @@ xrow_encode_join(struct xrow_header *row, const struct tt_uuid *instance_uuid)
 }
 
 int
-xrow_encode_vclock(struct xrow_header *row, const struct vclock *vclock)
+xrow_encode_vclock_timed(struct xrow_header *row,
+			 const struct vclock *vclock,
+			 double tm)
 {
 	memset(row, 0, sizeof(*row));
 
@@ -1648,6 +1650,7 @@ xrow_encode_vclock(struct xrow_header *row, const struct vclock *vclock)
 	row->body[0].iov_base = buf;
 	row->body[0].iov_len = (data - buf);
 	row->bodycnt = 1;
+	row->tm = tm;
 	row->type = IPROTO_OK;
 	return 0;
 }
diff --git a/src/box/xrow.h b/src/box/xrow.h
index fde8f9474..8b91a3241 100644
--- a/src/box/xrow.h
+++ b/src/box/xrow.h
@@ -478,6 +478,20 @@ xrow_decode_register(struct xrow_header *row, struct tt_uuid *instance_uuid,
 				     NULL, NULL);
 }
 
+/**
+ * Encode vector clock with timestamp.
+ * @param row[out] Row to encode into.
+ * @param vclock vector clock to encode.
+ * @param tm timestamp.
+ *
+ * @retval  0 Success.
+ * @retval -1 Memory error.
+ */
+int
+xrow_encode_vclock_timed(struct xrow_header *row,
+			 const struct vclock *vclock,
+			 double tm);
+
 /**
  * Encode end of stream command (a response to JOIN command).
  * @param row[out] Row to encode into.
@@ -486,8 +500,11 @@ xrow_decode_register(struct xrow_header *row, struct tt_uuid *instance_uuid,
  * @retval  0 Success.
  * @retval -1 Memory error.
  */
-int
-xrow_encode_vclock(struct xrow_header *row, const struct vclock *vclock);
+static inline int
+xrow_encode_vclock(struct xrow_header *row, const struct vclock *vclock)
+{
+	return xrow_encode_vclock_timed(row, vclock, 0);
+}
 
 /**
  * Decode end of stream command (a response to JOIN command).
-- 
2.29.2



More information about the Tarantool-patches mailing list