The same is done in logging during recovery. Here it at least lets you make a rough
time estimation.
} else if (row.type == IPROTO_OK) {
/*
* Current vclock. This is not used now,
diff --git a/src/box/lua/info.c b/src/box/lua/info.c
index 655768ec4..4c25255c0 100644
--- a/src/box/lua/info.c
+++ b/src/box/lua/info.c
@@ -119,8 +119,13 @@ static void
lbox_pushrelay(lua_State *L, struct relay *relay)
{
lua_newtable(L);
- lua_pushstring(L, "vclock");
- lbox_pushvclock(L, relay_vclock(relay));
+ if (relay_vclock(relay)->map == 0) {
+ lua_pushstring(L, "status");
+ lua_pushstring(L, "joining");
+ } else {
+ lua_pushstring(L, "vclock");
+ lbox_pushvclock(L, relay_vclock(relay));
+ }
This wouldn't work, because struct replica doesn't exist before initial
join is complete.
Yes, you’re correct. Removed this.
---
src/box/
applier.cc | 7 +++++++
1 file changed, 7 insertions(+)
diff --git a/src/box/
applier.cc b/src/box/
applier.ccindex 7da278e68..ba68c3d07 100644
--- a/src/box/
applier.cc+++ b/src/box/
applier.cc@@ -309,11 +309,15 @@ applier_join(struct applier *applier)
* Receive initial data.
*/
assert(applier->join_stream != NULL);
+
uint64_t row_count = 0;
while (true) {
coio_read_xrow(coio, ibuf, &row);
applier->last_row_time = ev_monotonic_now(loop());
if (iproto_type_is_dml(row.type)) {
xstream_write_xc(applier->join_stream, &row);
+
++row_count;
+
if (row_count % 100000 == 0)
+
say_info("%.1fM rows recieved", row_count / 1e6);
} else if (row.type == IPROTO_OK) {
if (applier->version_id < version_id(1, 7, 0)) {
/*
@@ -354,6 +358,9 @@ applier_join(struct applier *applier)
if (iproto_type_is_dml(row.type)) {
vclock_follow_xrow(&replicaset.vclock, &row);
xstream_write_xc(applier->subscribe_stream, &row);
+
++row_count;
+
if (row_count % 100000 == 0)
+
say_info("%.1fM rows recieved", row_count / 1e6);
} else if (row.type == IPROTO_OK) {
/*
* Current vclock. This is not used now,
--
2.17.1 (Apple Git-112)