[Tarantool-patches] [PATCH 0/1] fix box.info:memory()

Olga Arkhangelskaia arkholga at tarantool.org
Mon Jun 29 15:11:17 MSK 2020


The patch fixes the output of box.info:memory(). It used to return the same
table as the box.info().

box.info.memory() can be written as box.info[“memory”](), that later has the only
one argument on the stack - box.info.memory table we need to fill:
box.info.memory() -> getmetatable(box.info.memory).__call(box.info.memory)[1]
box.info:memory() call is the same as box.info[“memory”](box.info). So, it
results in extra argument on the stack[1].
box.info:mem()->getmetatable(box.info.memory).__call(box.info.memory, box.info).
When function tries to fill box.info table - __call metamethod of box.info is
trigged - resulting in box.info table returned as the result.

There are two options to get rid if extra box.info table:
1. Create new table in the beginning of the function(eg. box.info.gc).
Every time box.info.memory is called it will generate new table with the fresh
info.
2. The second way is to ignore box.info argument on the stack and fill
directly box.info.memory table, that was passed as an argument.

I have implemented the first approach because there is box.info.gc works
the same way and we only need to add one line of code.
However, I do not know why it was done in such a way on the first place.
So if you have pros for the second options, please share with me.

[1] https://www.lua.org/manual/5.1/manual.html#2.8

@Changelog:
To retrieve information about memory usage box.info:memory() can be used.
Olga Arkhangelskaia (1):
  box: fixed box.info:memory()

 src/box/lua/info.c                            |  1 +
 test/box-tap/gh-4668-box-info-memory.test.lua | 15 +++++++++++++++
 2 files changed, 16 insertions(+)
 create mode 100755 test/box-tap/gh-4668-box-info-memory.test.lua

-- 
2.20.1 (Apple Git-117)



More information about the Tarantool-patches mailing list