diff --git a/sbroad-cartridge/cartridge/roles/sbroad-router.lua b/sbroad-cartridge/cartridge/roles/sbroad-router.lua index 517f26d26b914e9e37150d7ed372e3922b4f6faf..522c12834deb076cdbcd91e4e49a3301576c2449 100644 --- a/sbroad-cartridge/cartridge/roles/sbroad-router.lua +++ b/sbroad-cartridge/cartridge/roles/sbroad-router.lua @@ -1,3 +1,4 @@ +local sbroad_common = require('sbroad.init') local sbroad_router = require('sbroad.router') local function init(opts) -- luacheck: no unused args @@ -6,12 +7,13 @@ local function init(opts) -- luacheck: no unused args rawset(_G, 'sbroad', {}) end - _G.sbroad.calculate_bucket_id = sbroad_router.calculate_bucket_id + _G.sbroad.calculate_bucket_id = sbroad_common.calculate_bucket_id _G.sbroad.execute = sbroad_router.execute _G.sbroad.trace = sbroad_router.trace sbroad_router.init() - sbroad_router.init_statistics() + sbroad_common.init() + sbroad_common.init_statistics() return true end @@ -25,5 +27,5 @@ return { role_name = 'sbroad-router', init = init, apply_config = apply_config, - dependencies = {'cartridge.roles.vshard-router'}, + dependencies = {'cartridge.roles.vshard-router'} } diff --git a/sbroad-cartridge/cartridge/roles/sbroad-storage.lua b/sbroad-cartridge/cartridge/roles/sbroad-storage.lua index 2bc8aa3ffdd6de0719a25ff5252cf29ce5dd4c8a..2a409b8f00558c0daf076442ed2cabb90acbc38f 100644 --- a/sbroad-cartridge/cartridge/roles/sbroad-storage.lua +++ b/sbroad-cartridge/cartridge/roles/sbroad-storage.lua @@ -1,8 +1,17 @@ +local sbroad_common = require('sbroad.init') local sbroad_storage = require('sbroad.storage') local function init(opts) -- luacheck: no unused args + if rawget(_G, 'sbroad') == nil then + rawset(_G, 'sbroad', {}) + end + + _G.sbroad.calculate_bucket_id = sbroad_common.calculate_bucket_id + + sbroad_common.init() + sbroad_common.init_statistics() sbroad_storage.init() - sbroad_storage.init_statistics() + return true end @@ -16,6 +25,7 @@ return { init = init, apply_config = apply_config, dependencies = { - "cartridge.roles.vshard-storage", + 'cartridge.roles.vshard-storage', + 'cartridge.roles.vshard-router', }, } diff --git a/sbroad-cartridge/src/init.lua b/sbroad-cartridge/src/init.lua index 9b2df1740438fdfa21e0cc82c9f67802abe9f9f1..cdb7178ce8f4b22e6f0fc0e2133cb3ab64ec8912 100644 --- a/sbroad-cartridge/src/init.lua +++ b/sbroad-cartridge/src/init.lua @@ -1,5 +1,70 @@ -require 'sbroad.core' +require('sbroad.core') + local cartridge = require('cartridge') +local checks = require('checks') + +local function init () + box.schema.func.create( + 'libsbroad.calculate_bucket_id', + { if_not_exists = true, language = 'C' } + ) + + box.schema.func.create("BUCKET_ID", { + language = "Lua", + body = [[ + function(x) + return box.func["libsbroad.calculate_bucket_id"]:call({ x }) + end + ]], + if_not_exists = true, + param_list = {"string"}, + returns = "unsigned", + aggregate = "none", + exports = {"SQL"}, + }) + + box.schema.func.create( + 'libsbroad.calculate_bucket_id_by_dict', + { if_not_exists = true, language = 'C' } + ) + + box.schema.func.create( + 'libsbroad.init_statistics', + { if_not_exists = true, language = 'C' } + ) +end + +local function calculate_bucket_id(values, space_name) -- luacheck: no unused args + checks('string|table', '?string') + + local has_err, result = pcall(function () + if type(values) == 'table' and space_name == nil then + return false, error("space_name is required") + end + + return true + end) + + if has_err == false then + return nil, result + end + + has_err, result = pcall( + function() + return box.func["libsbroad.calculate_bucket_id"]:call({ values, space_name }) + end + ) + + if has_err == false then + return nil, result + end + + return result +end + +local function init_statistics () + box.func["libsbroad.init_statistics"]:call({}) +end _G.get_jaeger_agent_host = function() local cfg = cartridge.config_get_readonly() @@ -20,3 +85,9 @@ _G.get_jaeger_agent_port = function() return cfg["jaeger_agent_port"] end + +return { + init = init, + init_statistics = init_statistics, + calculate_bucket_id = calculate_bucket_id, +} diff --git a/sbroad-cartridge/src/router.lua b/sbroad-cartridge/src/router.lua index 25375da36cb6a485c665ba4b36b7827bbc790109..211039e1260b9ca042e26c14491839b4badc2112 100644 --- a/sbroad-cartridge/src/router.lua +++ b/sbroad-cartridge/src/router.lua @@ -3,7 +3,6 @@ require('sbroad') local vshard = require('vshard') local cartridge = require('cartridge') -local checks = require('checks') _G.get_schema = function() return cartridge.get_schema() @@ -203,64 +202,16 @@ local function init() { if_not_exists = true, language = 'C' } ) - box.schema.func.create( - 'libsbroad.calculate_bucket_id', - { if_not_exists = true, language = 'C' } - ) - - box.schema.func.create( - 'libsbroad.calculate_bucket_id_by_dict', - { if_not_exists = true, language = 'C' } - ) - box.schema.func.create( 'libsbroad.dispatch_query', { if_not_exists = true, language = 'C' } ) - - box.schema.func.create( - 'libsbroad.init_statistics', - { if_not_exists = true, language = 'C' } - ) - -end - -local function calculate_bucket_id(values, space_name) -- luacheck: no unused args - checks('string|table', '?string') - - local has_err, result = pcall(function () - if type(values) == 'table' and space_name == nil then - return false, error("space_name is required") - end - - return true - end) - - if has_err == false then - return nil, result - end - - has_err, result = pcall( - function() - return box.func["libsbroad.calculate_bucket_id"]:call({ values, space_name }) - end - ) - - if has_err == false then - return nil, result - end - - return result end local function invalidate_cache () box.func["libsbroad.invalidate_coordinator_cache"]:call({}) end -local function init_statistics () - box.func["libsbroad.init_statistics"]:call({}) -end - local function trace(query, params, context, id) local has_err, parser_res = pcall( function() @@ -284,6 +235,4 @@ return { invalidate_cache = invalidate_cache, execute = execute, trace = trace, - calculate_bucket_id = calculate_bucket_id, - init_statistics = init_statistics } diff --git a/sbroad-cartridge/src/storage.lua b/sbroad-cartridge/src/storage.lua index 648d8d0513a530c708752c78d12257440ad736c2..3610c48d31337f0e36cf1753cf1b04185f5b7cdb 100644 --- a/sbroad-cartridge/src/storage.lua +++ b/sbroad-cartridge/src/storage.lua @@ -87,23 +87,13 @@ local function init() 'libsbroad.invalidate_segment_cache', { if_not_exists = true, language = 'C' } ) - - box.schema.func.create( - 'libsbroad.init_statistics', - { if_not_exists = true, language = 'C' } - ) end local function invalidate_cache() box.func["libsbroad.invalidate_segment_cache"]:call({}) end -local function init_statistics() - box.func["libsbroad.init_statistics"]:call({}) -end - return { init = init, invalidate_cache = invalidate_cache, - init_statistics = init_statistics }