【问题标题】:Tarantool broadcast callTarantool 广播通话
【发布时间】:2020-05-30 09:06:17
【问题描述】:

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

【问题讨论】:

    标签: broadcast tarantool


    【解决方案1】:

    您可以使用模块cartridge.rpc 函数get_candidates 来获取所有具有某些角色的节点,然后使用模块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

    【讨论】:

      【解决方案2】:

      另一个提议。

      如果您使用 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
      

      【讨论】:

        猜你喜欢
        • 2021-09-16
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-11-21
        • 2018-01-06
        • 1970-01-01
        相关资源
        最近更新 更多