From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from [87.239.111.99] (localhost [127.0.0.1]) by dev.tarantool.org (Postfix) with ESMTP id 94F336C7D3; Fri, 5 Feb 2021 21:54:40 +0300 (MSK) DKIM-Filter: OpenDKIM Filter v2.11.0 dev.tarantool.org 94F336C7D3 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=tarantool.org; s=dev; t=1612551280; bh=xFL6pnYQWiy3bKJyHDkfAvAUZH/qkyw2Z3C1iS6IIrs=; h=To:Date:Subject:List-Id:List-Unsubscribe:List-Archive:List-Post: List-Help:List-Subscribe:From:Reply-To:Cc:From; b=f8/IbE3h6a/dQ8G1jV3dENmJNo629p3l63X4CKm/60ZZI8c5bLK359//77GSSjpQX oJQTkc3FPCTPcoHSfiulOgLc8KWg9H+SEAPF9pOT5ZfU898R9BJ8sMOAnuZahZQVer dOfU7YdN6ipU1GAlKO+rTcir2nkzhBCceX4zdPh4= Received: from mail-lf1-f52.google.com (mail-lf1-f52.google.com [209.85.167.52]) (using TLSv1.3 with cipher TLS_AES_128_GCM_SHA256 (128/128 bits) key-exchange X25519 server-signature RSA-PSS (2048 bits) server-digest SHA256) (No client certificate requested) by dev.tarantool.org (Postfix) with ESMTPS id B26526C7D3 for ; Fri, 5 Feb 2021 21:54:39 +0300 (MSK) DKIM-Filter: OpenDKIM Filter v2.11.0 dev.tarantool.org B26526C7D3 Received: by mail-lf1-f52.google.com with SMTP id v24so11336327lfr.7 for ; Fri, 05 Feb 2021 10:54:39 -0800 (PST) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:mime-version :content-transfer-encoding; bh=joco7GWxudbvHuj/3nHEwmYWyKXipNIyxQ3GMqo8MwU=; b=PIXuASehFROr4uivDQcacTfWp6u2a8mX1k2wFREhIlj5MOfN9tpkoeSDBD+dhM728K uTj8s/vrsfuEb3ytLKJYBKbzkepYyl+aGs0j/53XQ9JOW/1H/nXQY0GHOgPC7vyoEpcJ tDSrx5M8SXcOe0LUOOo+j2DO13NfORPGG6TpXFIBgvJQJaKMpfymemsjkwopYYkV0sfi esD+KlYV7NJRrMbBw6J+NcGgGKyxeo2rEg9pzld1/vjMz36sG9Hi3oF1W70wwVxiaNJr XhQzfVZyfL2q4vc2YQKK9b0DcI/hXtxDGf6BSdN7c+I7E2sDWexRrAX1jpvMG58cODjv qoug== X-Gm-Message-State: AOAM531cLxVI+oLd2SIIDDs/OZI8LUSWeLxDhP2TTtCD6vZS8XjJyhk7 CmoXTmnnLarVhD3BCAA6vvE= X-Google-Smtp-Source: ABdhPJw3EzbS1S7Qq4MJAsQdo75Qrhdm4gfTs+iSJIxEak6iI96C2uS9iYZ7gO0cTmf0haYujsc91w== X-Received: by 2002:a19:b01:: with SMTP id 1mr3038595lfl.643.1612551279164; Fri, 05 Feb 2021 10:54:39 -0800 (PST) Received: from grain.localdomain ([5.18.103.226]) by smtp.gmail.com with ESMTPSA id 2sm1070408lfm.22.2021.02.05.10.54.37 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 05 Feb 2021 10:54:38 -0800 (PST) Received: by grain.localdomain (Postfix, from userid 1000) id 778BB56008A; Fri, 5 Feb 2021 21:54:37 +0300 (MSK) To: tml Date: Fri, 5 Feb 2021 21:54:25 +0300 Message-Id: <20210205185436.638894-1-gorcunov@gmail.com> X-Mailer: git-send-email 2.29.2 MIME-Version: 1.0 Content-Transfer-Encoding: 8bit Subject: [Tarantool-patches] [PATCH v15 00/11] box: implement cmod Lua module X-BeenThere: tarantool-patches@dev.tarantool.org X-Mailman-Version: 2.1.34 Precedence: list List-Id: Tarantool development patches List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , From: Cyrill Gorcunov via Tarantool-patches Reply-To: Cyrill Gorcunov Cc: Mons Anderson , Vladislav Shpilevoy Errors-To: tarantool-patches-bounces@dev.tarantool.org Sender: "Tarantool-patches" 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