[PATCH] lua: make box.stat.net.CONNECTIONS a table

Alexander Turenko alexander.turenko at tarantool.org
Wed Mar 27 20:39:44 MSK 2019


The primary reason of this change is to keep compatibility of 1.10
release series with tarantool/stat-0.3.1, which expects that each
box.stat.net.<...> and box.stat.net().<...> item is a table.

This commit changes CONNECTIONS metric to be a table with 'current'
field, which in turn contains current number of connections.

Fixes #4039.

@TarantoolBot document
Title: box.stat.net.CONNECTIONS becomes a table

The format of box.stat.net.CONNECTIONS and box.stat.net().CONNECTIONS is
changed in order to keep all items being tables, because
tarantool/stat-0.3.1 expects them to be tables (see [1] for more
information).

Example of box.stat.net() **before** this commit:

```
tarantool> box.stat.net()
---
- SENT:
    total: 0
    rps: 0
  CONNECTIONS: 0
  RECEIVED:
    total: 0
    rps: 0
...
```

And after:

```
tarantool> box.stat.net()
---
- SENT:
    total: 0
    rps: 0
  CONNECTIONS:
    current: 0
  RECEIVED:
    total: 0
    rps: 0
...
```

Look at the comment to lbox_stat_net_call() (see the linked commit) for
meaning of total/rps/current fields.

[1]: https://github.com/tarantool/tarantool/issues/4039
---

https://github.com/tarantool/tarantool/issues/4039
https://github.com/tarantool/tarantool/tree/Totktonada/gh-4039-box-stat-net-connections-as-table

 src/box/lua/stat.c         | 31 +++++++++++++++++++++++++++++--
 test/box/stat_net.result   |  8 ++++----
 test/box/stat_net.test.lua |  8 ++++----
 3 files changed, 37 insertions(+), 10 deletions(-)

diff --git a/src/box/lua/stat.c b/src/box/lua/stat.c
index 1015253f4..f6b2812d6 100644
--- a/src/box/lua/stat.c
+++ b/src/box/lua/stat.c
@@ -136,26 +136,53 @@ lbox_stat_reset(struct lua_State *L)
 	return 0;
 }
 
+/**
+ * Push a table with a network metric to a Lua stack.
+ *
+ * Expects one argument with a name of a needed metric. The pushed
+ * table contains some subset of 'total', 'rps', 'current' fields.
+ *
+ * Metrics are the same as in lbox_stat_net_call().
+ */
 static int
 lbox_stat_net_index(struct lua_State *L)
 {
 	luaL_checkstring(L, -1);
 	if (strcmp("CONNECTIONS", lua_tostring(L, -1)) == 0) {
+		lua_newtable(L);
 		lua_pushnumber(L, iproto_connection_count());
+		lua_setfield(L, -2, "current");
 		return 1;
 	}
 	return rmean_foreach(rmean_net, seek_stat_item, L);
 }
 
+/**
+ * Push a table of network metrics to a Lua stack.
+ *
+ * Metrics and their fields are:
+ *
+ * - SENT (packets): total, rps;
+ * - RECEIVED (packets): total, rps;
+ * - CONNECTIONS: current.
+ *
+ * These fields have the following meaning:
+ *
+ * - total -- amount of events since start;
+ * - rps -- amount of events per second, mean over last 5 seconds;
+ * - current -- amount of resources currently hold (say, number of
+ *   open connections).
+ */
 static int
 lbox_stat_net_call(struct lua_State *L)
 {
 	lua_newtable(L);
 	rmean_foreach(rmean_net, set_stat_item, L);
 
-	lua_pushstring(L, "CONNECTIONS");
+	lua_newtable(L); /* box.stat.net().CONNECTIONS */
 	lua_pushnumber(L, iproto_connection_count());
-	lua_settable(L, -3);
+	lua_setfield(L, -2, "current");
+	lua_setfield(L, -2, "CONNECTIONS");
 
 	return 1;
 }
diff --git a/test/box/stat_net.result b/test/box/stat_net.result
index 639a830d8..36a78a8a6 100644
--- a/test/box/stat_net.result
+++ b/test/box/stat_net.result
@@ -55,7 +55,7 @@ box.stat.net.RECEIVED.total > 0
 ---
 - true
 ...
-box.stat.net.CONNECTIONS == 4
+box.stat.net.CONNECTIONS.current == 4
 ---
 - true
 ...
@@ -70,14 +70,14 @@ cn1:close()
 cn2:close()
 ---
 ...
-test_run:wait_cond(function() return box.stat.net.CONNECTIONS == 2 end, WAIT_COND_TIMEOUT)
+test_run:wait_cond(function() return box.stat.net.CONNECTIONS.current == 2 end, WAIT_COND_TIMEOUT)
 ---
 - true
 ...
 cn3:close()
 ---
 ...
-test_run:wait_cond(function() return box.stat.net.CONNECTIONS == 1 end, WAIT_COND_TIMEOUT)
+test_run:wait_cond(function() return box.stat.net.CONNECTIONS.current == 1 end, WAIT_COND_TIMEOUT)
 ---
 - true
 ...
@@ -93,7 +93,7 @@ box.stat.net.RECEIVED.total
 ---
 - 0
 ...
-box.stat.net.CONNECTIONS
+box.stat.net.CONNECTIONS.current
 ---
 - 1
 ...
diff --git a/test/box/stat_net.test.lua b/test/box/stat_net.test.lua
index 997376997..24ecf1386 100644
--- a/test/box/stat_net.test.lua
+++ b/test/box/stat_net.test.lua
@@ -21,7 +21,7 @@ cn.space.tweedledum:select() --small request
 
 box.stat.net.SENT.total > 0
 box.stat.net.RECEIVED.total > 0
-box.stat.net.CONNECTIONS == 4
+box.stat.net.CONNECTIONS.current == 4
 -- box.stat.net.EVENTS.total > 0
 -- box.stat.net.LOCKS.total > 0
 
@@ -29,15 +29,15 @@ WAIT_COND_TIMEOUT = 10
 
 cn1:close()
 cn2:close()
-test_run:wait_cond(function() return box.stat.net.CONNECTIONS == 2 end, WAIT_COND_TIMEOUT)
+test_run:wait_cond(function() return box.stat.net.CONNECTIONS.current == 2 end, WAIT_COND_TIMEOUT)
 cn3:close()
-test_run:wait_cond(function() return box.stat.net.CONNECTIONS == 1 end, WAIT_COND_TIMEOUT)
+test_run:wait_cond(function() return box.stat.net.CONNECTIONS.current == 1 end, WAIT_COND_TIMEOUT)
 
 -- reset
 box.stat.reset()
 box.stat.net.SENT.total
 box.stat.net.RECEIVED.total
-box.stat.net.CONNECTIONS
+box.stat.net.CONNECTIONS.current
 
 space:drop() -- tweedledum
 cn:close()
-- 
2.20.1




More information about the Tarantool-patches mailing list