From: Cyrill Gorcunov via Tarantool-patches <tarantool-patches@dev.tarantool.org> To: tml <tarantool-patches@dev.tarantool.org> Cc: Vladislav Shpilevoy <v.shpilevoy@tarantool.org> Subject: [Tarantool-patches] [PATCH v18 0/2] box: implement cmod Lua module Date: Wed, 17 Feb 2021 15:39:43 +0300 [thread overview] Message-ID: <20210217123945.396396-1-gorcunov@gmail.com> (raw) 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). v16: - internal v17: - drop idea of unifying box.schema.func and cmod functions cache, it brings more problems than solves due to too different context of execution; - make cmod self consistent, which shrink patch series size ~1/5 in compare with previous attempts; - improve tests to account internal states of modules and functions (tt_dev key in reports). v18: - implement pass-through cache for modules loading, for this sake 'struct module' uses cmod internally; - improve tests to cover sole cmod case and a mixture of box.schema.func and cmod to make sure the caches are not corrupted. branch gorcunov/gh-4642-func-ro-18 issue https://github.com/tarantool/tarantool/issues/4642 Cyrill Gorcunov (2): box/cmod: implement cmod Lua module test: box/cfunc -- add cmod test src/box/CMakeLists.txt | 1 + src/box/func.c | 237 ++++------ src/box/func.h | 7 +- src/box/lua/cmod.c | 925 ++++++++++++++++++++++++++++++++++++++++ src/box/lua/cmod.h | 123 ++++++ src/box/lua/init.c | 2 + test/box/CMakeLists.txt | 4 + test/box/cfunc1.c | 58 +++ test/box/cfunc2.c | 137 ++++++ test/box/cfunc3.c | 25 ++ test/box/cfunc4.c | 28 ++ test/box/cmod.result | 527 +++++++++++++++++++++++ test/box/cmod.test.lua | 200 +++++++++ test/box/suite.ini | 2 +- 14 files changed, 2116 insertions(+), 160 deletions(-) create mode 100644 src/box/lua/cmod.c create mode 100644 src/box/lua/cmod.h create mode 100644 test/box/cfunc1.c create mode 100644 test/box/cfunc2.c create mode 100644 test/box/cfunc3.c create mode 100644 test/box/cfunc4.c create mode 100644 test/box/cmod.result create mode 100644 test/box/cmod.test.lua base-commit: 4299daf7df12a67748e28969446c8e8a7530bce1 -- 2.29.2
next reply other threads:[~2021-02-17 12:39 UTC|newest] Thread overview: 8+ messages / expand[flat|nested] mbox.gz Atom feed top 2021-02-17 12:39 Cyrill Gorcunov via Tarantool-patches [this message] 2021-02-17 12:39 ` [Tarantool-patches] [PATCH v18 1/2] box/cmod: " Cyrill Gorcunov via Tarantool-patches 2021-02-17 12:39 ` [Tarantool-patches] [PATCH v18 2/2] test: box/cfunc -- add cmod test Cyrill Gorcunov via Tarantool-patches 2021-02-17 20:15 ` [Tarantool-patches] [PATCH 0/4] cmod: refactor box/func Cyrill Gorcunov via Tarantool-patches 2021-02-17 20:15 ` [Tarantool-patches] [PATCH 1/4] box/func: drop redundant module argument Cyrill Gorcunov via Tarantool-patches 2021-02-17 20:15 ` [Tarantool-patches] [PATCH 2/4] box/func: update module cache in one pass Cyrill Gorcunov via Tarantool-patches 2021-02-17 20:15 ` [Tarantool-patches] [PATCH 3/4] cmod: export cmod_call helper Cyrill Gorcunov via Tarantool-patches 2021-02-17 20:15 ` [Tarantool-patches] [PATCH 4/4] box/func: simplify func_c_call Cyrill Gorcunov via Tarantool-patches
Reply instructions: You may reply publicly to this message via plain-text email using any one of the following methods: * Save the following mbox file, import it into your mail client, and reply-to-all from there: mbox Avoid top-posting and favor interleaved quoting: https://en.wikipedia.org/wiki/Posting_style#Interleaved_style * Reply using the --to, --cc, and --in-reply-to switches of git-send-email(1): git send-email \ --in-reply-to=20210217123945.396396-1-gorcunov@gmail.com \ --to=tarantool-patches@dev.tarantool.org \ --cc=gorcunov@gmail.com \ --cc=v.shpilevoy@tarantool.org \ --subject='Re: [Tarantool-patches] [PATCH v18 0/2] box: implement cmod Lua module' \ /path/to/YOUR_REPLY https://kernel.org/pub/software/scm/git/docs/git-send-email.html * If your mail client supports setting the In-Reply-To header via mailto: links, try the mailto: link
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox