From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from smtpng3.m.smailru.net (smtpng3.m.smailru.net [94.100.177.149]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by dev.tarantool.org (Postfix) with ESMTPS id 96D9B446442 for ; Wed, 30 Sep 2020 01:12:01 +0300 (MSK) From: Vladislav Shpilevoy Date: Wed, 30 Sep 2020 00:11:31 +0200 Message-Id: <15fc84496f340c643f0bd9c9d2ea3e98e02b715b.1601417273.git.v.shpilevoy@tarantool.org> In-Reply-To: References: MIME-Version: 1.0 Content-Transfer-Encoding: 8bit Subject: [Tarantool-patches] [PATCH v3 09/10] raft: introduce box.info.election List-Id: Tarantool development patches List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: tarantool-patches@dev.tarantool.org, sergepetrenko@tarantool.org Box.info.election returns a table of form: { state: , term: , vote: , leader: } The fields correspond to the same named Raft concepts one to one. This info dump is supposed to help with the tests, first of all. And with investigation of problems in a real cluster. The API doesn't mention 'Raft' on purpose, to keep it not depending specifically on Raft, and not to confuse users who don't know anything about Raft (even that it is about leader election and synchronous replication). Part of #1146 --- src/box/lua/info.c | 17 +++++++++++++++++ test/box/info.result | 1 + 2 files changed, 18 insertions(+) diff --git a/src/box/lua/info.c b/src/box/lua/info.c index 1c131caec..cac3fd475 100644 --- a/src/box/lua/info.c +++ b/src/box/lua/info.c @@ -49,6 +49,7 @@ #include "main.h" #include "version.h" #include "box/box.h" +#include "box/raft.h" #include "lua/utils.h" #include "fiber.h" #include "tt_static.h" @@ -577,6 +578,21 @@ lbox_info_listen(struct lua_State *L) return 1; } +static int +lbox_info_election(struct lua_State *L) +{ + lua_createtable(L, 0, 4); + lua_pushstring(L, raft_state_strs[raft.state]); + lua_setfield(L, -2, "state"); + luaL_pushuint64(L, raft.volatile_term); + lua_setfield(L, -2, "term"); + lua_pushinteger(L, raft.volatile_vote); + lua_setfield(L, -2, "vote"); + lua_pushinteger(L, raft.leader); + lua_setfield(L, -2, "leader"); + return 1; +} + static const struct luaL_Reg lbox_info_dynamic_meta[] = { {"id", lbox_info_id}, {"uuid", lbox_info_uuid}, @@ -595,6 +611,7 @@ static const struct luaL_Reg lbox_info_dynamic_meta[] = { {"vinyl", lbox_info_vinyl}, {"sql", lbox_info_sql}, {"listen", lbox_info_listen}, + {"election", lbox_info_election}, {NULL, NULL} }; diff --git a/test/box/info.result b/test/box/info.result index 40eeae069..c8037818b 100644 --- a/test/box/info.result +++ b/test/box/info.result @@ -75,6 +75,7 @@ table.sort(t) t --- - - cluster + - election - gc - id - listen -- 2.21.1 (Apple Git-122.3)