From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: From: Serge Petrenko Subject: [PATCH] replication: downstream status reporting in box.info Date: Wed, 6 Feb 2019 13:47:17 +0300 Message-Id: <20190206104717.29583-1-sergepetrenko@tarantool.org> To: vdavydov.dev@gmail.com Cc: tarantool-patches@freelists.org, Serge Petrenko List-ID: Start showing downstream status for relays in "follow" state. Also refactor lbox_pushrelay to unify code for different relay states. Closes #3904 --- https://github.com/tarantool/tarantool/issues/3904 https://github.com/tarantool/tarantool/tree/sp/gh-3904-downstream-status src/box/lua/info.c | 46 ++++++++++++++++++-------------- test/replication/status.result | 4 +++ test/replication/status.test.lua | 1 + 3 files changed, 31 insertions(+), 20 deletions(-) diff --git a/src/box/lua/info.c b/src/box/lua/info.c index f1950deeb..70672f271 100644 --- a/src/box/lua/info.c +++ b/src/box/lua/info.c @@ -115,9 +115,31 @@ static void lbox_pushrelay(lua_State *L, struct relay *relay) { lua_newtable(L); - lua_pushstring(L, "vclock"); - lbox_pushvclock(L, relay_vclock(relay)); - lua_settable(L, -3); + lua_pushstring(L, "status"); + + switch(relay_get_state(relay)) { + case RELAY_FOLLOW: + lua_pushstring(L, "follow"); + lua_settable(L, -3); + lua_pushstring(L, "vclock"); + lbox_pushvclock(L, relay_vclock(relay)); + lua_settable(L, -3); + break; + case RELAY_STOPPED: + { + lua_pushstring(L, "stopped"); + lua_settable(L, -3); + + struct error *e = diag_last_error(relay_get_diag(relay)); + if (e != NULL) { + lua_pushstring(L, "message"); + lua_pushstring(L, e->errmsg); + lua_settable(L, -3); + } + break; + } + default: unreachable(); + } } static void @@ -147,25 +169,9 @@ lbox_pushreplica(lua_State *L, struct replica *replica) lua_settable(L, -3); } - if (relay_get_state(relay) == RELAY_FOLLOW) { + if (relay_get_state(relay) != RELAY_OFF) { lua_pushstring(L, "downstream"); lbox_pushrelay(L, relay); - lua_settable(L, -3); - } else if (relay_get_state(relay) == RELAY_STOPPED) { - lua_pushstring(L, "downstream"); - - lua_newtable(L); - lua_pushstring(L, "status"); - lua_pushstring(L, "stopped"); - lua_settable(L, -3); - - struct error *e = diag_last_error(relay_get_diag(relay)); - if (e != NULL) { - lua_pushstring(L, "message"); - lua_pushstring(L, e->errmsg); - lua_settable(L, -3); - } - lua_settable(L, -3); } } diff --git a/test/replication/status.result b/test/replication/status.result index 9e69f2478..a408d7eb2 100644 --- a/test/replication/status.result +++ b/test/replication/status.result @@ -172,6 +172,10 @@ replica.upstream == nil --- - true ... +replica.downstream.status == 'follow' +--- +- true +... replica.downstream.vclock[master_id] == box.info.vclock[master_id] --- - true diff --git a/test/replication/status.test.lua b/test/replication/status.test.lua index cfdf6acdb..8a82fe9ae 100644 --- a/test/replication/status.test.lua +++ b/test/replication/status.test.lua @@ -64,6 +64,7 @@ replica.uuid == box.space._cluster:get(replica_id)[2] -- replica.lsn == box.info.vclock[replica_id] replica.lsn == 0 replica.upstream == nil +replica.downstream.status == 'follow' replica.downstream.vclock[master_id] == box.info.vclock[master_id] replica.downstream.vclock[replica_id] == box.info.vclock[replica_id] -- 2.17.2 (Apple Git-113)