From c71851495c96b75ee7ac44c3c6f222507951f209 Mon Sep 17 00:00:00 2001
From: Yuriy Vostrikov <vostrikov@corp.mail.ru>
Date: Thu, 11 Nov 2010 17:40:54 +0300
Subject: [PATCH] [box] now replica reports its lag

---
 core/log_io.c        | 3 +++
 core/log_io_remote.c | 1 +
 include/log_io.h     | 2 +-
 mod/silverbox/box.c  | 2 ++
 4 files changed, 7 insertions(+), 1 deletion(-)

diff --git a/core/log_io.c b/core/log_io.c
index 3fc16a11d9..cd1898b2c6 100644
--- a/core/log_io.c
+++ b/core/log_io.c
@@ -1177,6 +1177,9 @@ write_to_disk(void *_state, struct tbuf *t)
 	u32 result = 0;
 	int suffix = 0;
 
+	/* we're not running inside ev_loop, so update ev_now manually */
+	ev_now_update();
+
 	/* caller requested termination */
 	if (t == NULL) {
 		if (wal != NULL)
diff --git a/core/log_io_remote.c b/core/log_io_remote.c
index 264485fa7c..df85f1bd0c 100644
--- a/core/log_io_remote.c
+++ b/core/log_io_remote.c
@@ -129,6 +129,7 @@ pull_from_remote(void *state)
 	for (;;) {
 		row = remote_read_row(h->r->confirmed_lsn + 1);
 		h->r->recovery_lag = ev_now() - row_v11(row)->tm;
+		h->r->recovery_last_update_tstamp = ev_now();
 
 		if (h->handler(h->r, row) < 0)
 			continue;
diff --git a/include/log_io.h b/include/log_io.h
index 53d8d41bb0..fe20ccf40f 100644
--- a/include/log_io.h
+++ b/include/log_io.h
@@ -84,7 +84,7 @@ struct recovery_state {
 	   log_io_class->reader is responsible of converting data from old format */
 	row_handler *wal_row_handler, *snap_row_handler;
 	ev_timer wal_timer;
-	ev_tstamp recovery_lag;
+	ev_tstamp recovery_lag, recovery_last_update_tstamp;
 
 	int snap_io_rate_limit;
 
diff --git a/mod/silverbox/box.c b/mod/silverbox/box.c
index 6c758d3157..cc246d5aaa 100644
--- a/mod/silverbox/box.c
+++ b/mod/silverbox/box.c
@@ -1886,6 +1886,8 @@ mod_info(struct tbuf *out)
 	tbuf_printf(out, "  pid: %i\r\n", getpid());
 	tbuf_printf(out, "  wal_writer_pid: %" PRIi64 "\r\n", (i64)recovery_state->wal_writer->pid);
 	tbuf_printf(out, "  lsn: %" PRIi64 "\r\n", recovery_state->confirmed_lsn);
+	tbuf_printf(out, "  recovery_lag: %.3f\r\n", recovery_state->recovery_lag);
+	tbuf_printf(out, "  recovery_last_update: %.3f\r\n", recovery_state->recovery_last_update_tstamp);
 	tbuf_printf(out, "  status: %s\r\n", status);
 }
 
-- 
GitLab