From: Vladislav Shpilevoy via Tarantool-patches <tarantool-patches@dev.tarantool.org> To: tarantool-patches@dev.tarantool.org, olegrok@tarantool.org Subject: [Tarantool-patches] [PATCH vshard 3/4] router: support msgpack object args Date: Wed, 9 Feb 2022 01:32:33 +0100 [thread overview] Message-ID: <bdddc93804b432093b9ef732b91c4528551ea0e1.1644366575.git.v.shpilevoy@tarantool.org> (raw) In-Reply-To: <cover.1644366575.git.v.shpilevoy@tarantool.org> Msgpack object allows to represent scalar values and tables with them as a raw MessagePack buffer. It will be introduced after 2.10.0-beta2. It can be used in most of the places which used to take arguments for further encoding into MessagePack anyway. Including netbox API. Usage of msgpack object allows not to decode the buffer if it was received from a remote instance for further proxying. It is simply memcpy-ed into a next call. VShard.router almost supported this feature. Only needed to change the arguments type check. But even better - simply drop it and trust netbox to do the type check. Part of #312 --- test/instances/router.lua | 1 + test/router-luatest/router_test.lua | 47 +++++++++++++++++++++++++++++ vshard/replicaset.lua | 4 --- vshard/util.lua | 9 ++++++ 4 files changed, 57 insertions(+), 4 deletions(-) diff --git a/test/instances/router.lua b/test/instances/router.lua index ccec6c1..921ac73 100755 --- a/test/instances/router.lua +++ b/test/instances/router.lua @@ -1,5 +1,6 @@ #!/usr/bin/env tarantool local helpers = require('test.luatest_helpers') +_G.msgpack = require('msgpack') -- Do not load entire vshard into the global namespace to catch errors when code -- relies on that. _G.vshard = { diff --git a/test/router-luatest/router_test.lua b/test/router-luatest/router_test.lua index 621794a..13ab74d 100644 --- a/test/router-luatest/router_test.lua +++ b/test/router-luatest/router_test.lua @@ -1,5 +1,6 @@ local t = require('luatest') local vtest = require('test.luatest_helpers.vtest') +local vutil = require('vshard.util') local wait_timeout = 120 local g = t.group('router') @@ -52,3 +53,49 @@ g.test_basic = function(g) t.assert(not err, 'no error') t.assert_equals(res, 1, 'good result') end + +if vutil.feature.msgpack_object then + +g.test_msgpack_args = function(g) + local router = g.router + -- + -- Normal call ro. + -- + local res, err = router:exec(function(timeout) + local args = msgpack.object({100}) + return vshard.router.callrw(1, 'echo', args, {timeout = timeout}) + end, {wait_timeout}) + t.assert(not err, 'no error') + t.assert_equals(res, 100, 'good result') + -- + -- Normal call rw. + -- + res, err = router:exec(function(timeout) + local args = msgpack.object({100}) + return vshard.router.callro(1, 'echo', args, {timeout = timeout}) + end, {wait_timeout}) + t.assert(not err, 'no error') + t.assert_equals(res, 100, 'good result') + -- + -- Direct call ro. + -- + res, err = router:exec(function(timeout) + local args = msgpack.object({100}) + local route = vshard.router.route(1) + return route:callro('echo', args, {timeout = timeout}) + end, {wait_timeout}) + t.assert(err == nil, 'no error') + t.assert_equals(res, 100, 'good result') + -- + -- Direct call rw. + -- + res, err = router:exec(function(timeout) + local args = msgpack.object({100}) + local route = vshard.router.route(1) + return route:callrw('echo', args, {timeout = timeout}) + end, {wait_timeout}) + t.assert(err == nil, 'no error') + t.assert_equals(res, 100, 'good result') +end + +end -- vutil.feature.msgpack_object diff --git a/vshard/replicaset.lua b/vshard/replicaset.lua index 8e5526a..16b89aa 100644 --- a/vshard/replicaset.lua +++ b/vshard/replicaset.lua @@ -408,8 +408,6 @@ end -- local function replicaset_master_call(replicaset, func, args, opts) assert(opts == nil or type(opts) == 'table') - assert(type(func) == 'string', 'function name') - assert(args == nil or type(args) == 'table', 'function arguments') local master = replicaset.master if not master then opts = opts and table.copy(opts) or {} @@ -552,8 +550,6 @@ local function replicaset_template_multicallro(prefer_replica, balance) return function(replicaset, func, args, opts) assert(opts == nil or type(opts) == 'table') - assert(type(func) == 'string', 'function name') - assert(args == nil or type(args) == 'table', 'function arguments') opts = opts and table.copy(opts) or {} local timeout = opts.timeout or consts.CALL_TIMEOUT_MAX local net_status, storage_status, retval, err, replica diff --git a/vshard/util.lua b/vshard/util.lua index 9e0212a..72176f7 100644 --- a/vshard/util.lua +++ b/vshard/util.lua @@ -230,6 +230,14 @@ local function fiber_is_self_canceled() return not pcall(fiber.testcancel) end +-- +-- Dictionary of supported core features on the given instance. Try to use it +-- in all the other code rather than direct version check. +-- +local feature = { + msgpack_object = version_is_at_least(2, 10, 0, 'beta', 2, 86), +} + return { tuple_extract_key = tuple_extract_key, reloadable_fiber_create = reloadable_fiber_create, @@ -241,4 +249,5 @@ return { table_minus_yield = table_minus_yield, fiber_cond_wait = fiber_cond_wait, fiber_is_self_canceled = fiber_is_self_canceled, + feature = feature, } -- 2.24.3 (Apple Git-128)
next prev parent reply other threads:[~2022-02-09 0:34 UTC|newest] Thread overview: 20+ messages / expand[flat|nested] mbox.gz Atom feed top 2022-02-09 0:32 [Tarantool-patches] [PATCH vshard 0/4] Router msgpack object and netbox return_raw Vladislav Shpilevoy via Tarantool-patches 2022-02-09 0:32 ` [Tarantool-patches] [PATCH vshard 1/4] test: support luatest Vladislav Shpilevoy via Tarantool-patches 2022-02-09 17:53 ` Oleg Babin via Tarantool-patches 2022-02-10 22:32 ` Vladislav Shpilevoy via Tarantool-patches 2022-02-11 16:38 ` Oleg Babin via Tarantool-patches 2022-02-09 0:32 ` [Tarantool-patches] [PATCH vshard 2/4] util: introduce Tarantool's semver parser Vladislav Shpilevoy via Tarantool-patches 2022-02-09 17:53 ` Oleg Babin via Tarantool-patches 2022-02-10 22:33 ` Vladislav Shpilevoy via Tarantool-patches 2022-02-11 16:38 ` Oleg Babin via Tarantool-patches 2022-02-09 0:32 ` Vladislav Shpilevoy via Tarantool-patches [this message] 2022-02-09 17:53 ` [Tarantool-patches] [PATCH vshard 3/4] router: support msgpack object args Oleg Babin via Tarantool-patches 2022-02-10 22:33 ` Vladislav Shpilevoy via Tarantool-patches 2022-02-11 16:38 ` Oleg Babin via Tarantool-patches 2022-02-09 0:32 ` [Tarantool-patches] [PATCH vshard 4/4] router: support netbox return_raw Vladislav Shpilevoy via Tarantool-patches 2022-02-09 17:53 ` Oleg Babin via Tarantool-patches 2022-02-10 22:34 ` Vladislav Shpilevoy via Tarantool-patches 2022-02-11 16:38 ` Oleg Babin via Tarantool-patches 2022-02-11 23:05 ` [Tarantool-patches] [PATCH vshard 0/4] Router msgpack object and " Vladislav Shpilevoy via Tarantool-patches 2022-02-15 16:55 ` Oleg Babin via Tarantool-patches 2022-02-15 21:16 ` Vladislav Shpilevoy 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=bdddc93804b432093b9ef732b91c4528551ea0e1.1644366575.git.v.shpilevoy@tarantool.org \ --to=tarantool-patches@dev.tarantool.org \ --cc=olegrok@tarantool.org \ --cc=v.shpilevoy@tarantool.org \ --subject='Re: [Tarantool-patches] [PATCH vshard 3/4] router: support msgpack object args' \ /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