From ec772515607fc420df1cc30f6dca60f551af37cc Mon Sep 17 00:00:00 2001
From: Kurdakov Alexander <kusancho12@gmail.com>
Date: Fri, 6 Sep 2024 13:31:27 +0300
Subject: [PATCH] fix: public lua functions should fail with error

Previously some public lua functions in core-router.lua failed
returning nil instead of an error. As a result in a case of error
rust code treated it as success, but failed to pop expected results
from lua stack. So, instead of a real error user got lua reading
errors. Fixed.

Co-authored-by: Denis Smirnov <sd@picodata.io>
---
 sbroad-core/src/core-router.lua | 10 +++++++---
 1 file changed, 7 insertions(+), 3 deletions(-)

diff --git a/sbroad-core/src/core-router.lua b/sbroad-core/src/core-router.lua
index 5b89dd853..9c85a76c8 100644
--- a/sbroad-core/src/core-router.lua
+++ b/sbroad-core/src/core-router.lua
@@ -308,7 +308,11 @@ local function multi_storage_dql(uuid_to_args, func, handler, opts, tier_name)
             f:discard()
         end
     end
-    return nil, err, err_uuid
+    local msg = "Unknown error"
+    if err ~= nil and err.message ~= nil then
+        msg = err.message
+    end
+    error(lerror.make("Error on replicaset " .. err_uuid .. ": " .. msg))
 end
 
 _G.group_buckets_by_replicasets = function(buckets, tier_name)
@@ -317,7 +321,7 @@ _G.group_buckets_by_replicasets = function(buckets, tier_name)
     for _, bucket_id in pairs(buckets) do
         local rs, err = router:route(bucket_id)
         if err ~= nil then
-            return nil, err
+            error(err)
         end
         local uuid = rs.uuid
         if map[uuid] then
@@ -336,7 +340,7 @@ _G.get_replicasets_from_buckets = function(buckets, tier_name)
     for _, bucket_id in pairs(buckets) do
         local rs, err = router:route(bucket_id)
         if err ~= nil then
-            return nil, err
+            error(err)
         end
         local uuid = rs.uuid
         if not map[uuid] then
-- 
GitLab