[Tarantool-patches] [PATCH v15 00/11] box: implement cmod Lua module
Cyrill Gorcunov
gorcunov at gmail.com
Fri Feb 5 21:54:25 MSK 2021
The series implements a bare minimum. Please take a look
once time permit.
v1-v3 are development ones and not sent.
v5 (by vlad):
- drop exists, list methods: they are redundant
- rename cfunc to cbox
- when create a function make it callable Lua object
- initialize cbox out of modules
- fix error in passing module name for reloading
- make api been cbox.func.[create|drop] and
cbox.module.reload
- fix test for OSX sake
v6 (by vlad):
- move module handling into module_cache file.
v7:
- development
v8:
- use rbtree for function instance storage, since
i don't like the idea of unexpected rehashing of
values in case of massive number of functions
allocated
- use reference counter and free function instance
if only load/unload are coupled
- keep a pointer to the function inside Lua object
so we don't need to lookup on every function call.
this force us to implement __gc method
- use new API and update docs
v9:
- development
v10:
- use hashes for function names lookup
- simply function loads counting
- use luaL_register_module and luaL_register_type for
easier methods registering
- carry functions as userdata object
v11:
- development
v12:
- switch to new API as been discussed in
https://lists.tarantool.org/tarantool-patches/e186c454-6765-4776-6433-f3f791ff4c27@tarantool.org/
v13:
- development
v14:
- switch to refs to carry module usage
- drop func_name structure renaming
- carry two hashes for backward compatibility with
functions created via box.schema.func help
- complete rework of cmod and most parts of
module_cache
- account for file statistics to invalidate
module cache
- new API for cmod, no more :reload, the :load
procedure uses cache invalidation
- update test cases
- still there is no GC test since I didn't
manage to deal with it
v15:
- report module state cached/orphan
- update test cases
- do not prevent functions lookup in orphan modules
- there was an idea to use box.shema.func cache as on
top of cmod's one, but this doesn't work because in case
if module doesnt exist in any caches we would put it into
into cmod's one as well but there wont be a module on
cmod level which would clean it up later (which makes
code a way more comple if we choose to track state
of modules).
branch gorcunov/gh-4642-func-ro-15
issue https://github.com/tarantool/tarantool/issues/4642
Cyrill Gorcunov (11):
box/func: factor out c function entry structure
module_cache: move module handling into own subsystem
module_cache: direct update a cache value on reload
module_cache: rename calls to ref in module structure
module_cache: add comment about weird resolving
module_cache: module_reload - drop redundant parameter
module_cache: use references as a main usage counter
module_cache: make module to carry hash it belongs to
module_cache: use own hash for box.schema.func requests
box/cmod: implement cmod Lua module
test: box/cfunc -- add cmod test
src/box/CMakeLists.txt | 2 +
src/box/call.c | 10 +-
src/box/func.c | 491 +-------------------------
src/box/func.h | 41 +--
src/box/func_def.h | 14 -
src/box/lua/cmod.c | 610 ++++++++++++++++++++++++++++++++
src/box/lua/cmod.h | 24 ++
src/box/lua/init.c | 2 +
src/box/module_cache.c | 756 ++++++++++++++++++++++++++++++++++++++++
src/box/module_cache.h | 178 ++++++++++
test/box/CMakeLists.txt | 2 +
test/box/cfunc1.c | 58 +++
test/box/cfunc2.c | 137 ++++++++
test/box/cmod.result | 336 ++++++++++++++++++
test/box/cmod.test.lua | 130 +++++++
test/box/suite.ini | 2 +-
16 files changed, 2248 insertions(+), 545 deletions(-)
create mode 100644 src/box/lua/cmod.c
create mode 100644 src/box/lua/cmod.h
create mode 100644 src/box/module_cache.c
create mode 100644 src/box/module_cache.h
create mode 100644 test/box/cfunc1.c
create mode 100644 test/box/cfunc2.c
create mode 100644 test/box/cmod.result
create mode 100644 test/box/cmod.test.lua
base-commit: 7722a81c6a5a3c57c27a688c957fb187d81850f0
--
2.29.2
More information about the Tarantool-patches
mailing list