From 40e9e02ee2d4772b9d9e082769189d9083f588be Mon Sep 17 00:00:00 2001 From: Denis Smirnov <sd@picodata.io> Date: Wed, 22 May 2024 15:53:28 +0700 Subject: [PATCH] fix: lua function signature in a case of errors --- sbroad-core/src/core-router.lua | 18 +++++++++++++++--- 1 file changed, 15 insertions(+), 3 deletions(-) diff --git a/sbroad-core/src/core-router.lua b/sbroad-core/src/core-router.lua index 889afcb2ff..a79d65a316 100644 --- a/sbroad-core/src/core-router.lua +++ b/sbroad-core/src/core-router.lua @@ -2,6 +2,8 @@ -- Function, described in this file are called from `vshard` Sbroad module. local vshard = require('vshard') +local lerror = require('vshard.error') +local vrs = require('vshard.replicaset') local helper = require('sbroad.helper') local fiber = require('fiber') local table = require('table') @@ -11,11 +13,11 @@ local DQL_MIN_TIMEOUT = 10 local function future_wait(cond, timeout) local f = function(cond, timeout) if timeout and timeout < 0 then - error("dql timeout exceeded") + return nil, lerror.make("dql timeout exceeded") end local res, err = cond:wait_result(timeout) if err then - error(err) + return nil, lerror.make(err) end return res end @@ -23,7 +25,7 @@ local function future_wait(cond, timeout) if ok then return res end - return nil, res + return nil, lerror.make(res) end -- @@ -80,6 +82,10 @@ local function multi_storage_dql(uuid_to_args, func, vtable_max_rows, opts) -- Nil checks are done explicitly here (== nil instead of 'not'), because -- netbox requests return box.NULL instead of nils. + -- Wait for all masters to connect. + vrs.wait_masters_connect(replicasets) + timeout = deadline - fiber.clock() + -- -- Ref stage: send. -- @@ -252,6 +258,9 @@ _G.dql_on_some = function(uuid_to_args, is_readonly, waiting_timeout, vtable_max if err ~= nil then helper.dql_error(err, err_uuid) end + if result == nil then + error("local execution returned nil") + end end return box.tuple.new{result} @@ -272,6 +281,9 @@ _G.dql_on_all = function(required, optional, waiting_timeout, vtable_max_rows) if err ~= nil then helper.dql_error(err, err_uuid) end + if result == nil then + error("local execution returned nil") + end return box.tuple.new{result} end -- GitLab