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