Tarantool 广播调用

Tarantool broadcast call

我有几个副本集的集群。我想在所有节点上调用一些存储函数而不计算 bucket_id,然后映射结果。我应该怎么做?

您可以使用模块 cartridge.rpc function get_candidates for getting all nodes with some role, which you want to call and after to use module cartridge.pool 函数 map_call 来调用您的函数和映射结果。此功能从 1.2.0-17 版本的墨盒可用。所以你的代码可能是这样的:

local cartridge = require('cartridge')
local nodes = cartridge.rpc_get_candidates('my_role_name', { leaders_only = true, healthy_only = true })
local pool = require('cartridge.pool')
local results, err = pool.map_call('_G.my_function_name', { func_args }, { uri_list = nodes, timeout = 10 })
if (err ~= nil) then
    #your error handling#
end

所有函数响应都将保存到 results 变量并映射到每个 URI。所有错误都将保存到 err 变量作为映射键:line, class_name, err, file, suberrors, str

另一个提议。

如果您使用 vshard 并希望对存储执行 map-reduce:

    local replicaset, err = vshard.router.routeall()
    for _, replica in pairs(replicaset) do
        local _, err = replica:callrw('function', { args })
        if err ~= nil then
            return nil, err
        end
    end