diff --git a/core/log_io.c b/core/log_io.c index 3fc16a11d9d852fe4323d550de32a5c477935080..cd1898b2c69f9e898fe84d619bf244e9af4644b2 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 264485fa7ca5e65043db89b81a0144d61a379ecf..df85f1bd0caf27c00b3eb5726f9ca25cc880a2a7 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 53d8d41bb080daad0d0cccbd91ad39a107ffe14a..fe20ccf40f22638281f636ac9e3a1f18fa43bb65 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 6c758d3157c0464f40572b43d0ae9a0222d239fa..cc246d5aaaae6a239f1f058c3251e994396c6528 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); }