From 0c672453941757567fc5dfd0cca1c104bd85f4d6 Mon Sep 17 00:00:00 2001 From: Yaroslav Dynnikov <yaroslav.dynnikov@gmail.com> Date: Wed, 26 Oct 2022 01:58:24 +0300 Subject: [PATCH] refactor: postpone requiring vshard Do it only when the governor tells to. When `_G.vshard == nil`, it's more alike `traft::node::global()` which reurns either `Ok` or `Err(Uninitialized)`. --- src/main.rs | 6 ++---- src/traft/rpc/sharding.rs | 16 ++++++++++++---- 2 files changed, 14 insertions(+), 8 deletions(-) diff --git a/src/main.rs b/src/main.rs index e99f55fb9e..0cb3d23b7f 100644 --- a/src/main.rs +++ b/src/main.rs @@ -349,7 +349,7 @@ fn picolib_setup(args: &args::Run) { ); } -fn init_vshard() { +fn preload_vshard() { let lua = ::tarantool::lua_state(); macro_rules! preload { @@ -382,8 +382,6 @@ fn init_vshard() { preload!("vshard.storage.sched", "vshard/storage/sched.lua"); preload!("vshard.util", "vshard/util.lua"); preload!("vshard.version", "vshard/version.lua"); - - lua.exec("vshard = require 'vshard'").unwrap(); } fn init_handlers() { @@ -616,7 +614,7 @@ fn init_common(args: &args::Run, cfg: &tarantool::Cfg) -> Storage { std::fs::create_dir_all(&args.data_dir).unwrap(); tarantool::set_cfg(cfg); - init_vshard(); + preload_vshard(); init_handlers(); traft::event::init(); Storage::new().expect("Storage initialization failed") diff --git a/src/traft/rpc/sharding.rs b/src/traft/rpc/sharding.rs index 18659f245e..ea14944296 100644 --- a/src/traft/rpc/sharding.rs +++ b/src/traft/rpc/sharding.rs @@ -18,11 +18,19 @@ fn proc_sharding(req: Request) -> Result<Response, Error> { // TODO: fix user's permissions lua.exec("box.session.su('admin')")?; // TODO: only done on instances with corresponding roles - lua.exec_with("vshard.storage.cfg(..., box.info.uuid)", &cfg) - .map_err(tlua::LuaError::from)?; + lua.exec_with( + "vshard = require('vshard') + vshard.storage.cfg(..., box.info.uuid)", + &cfg, + ) + .map_err(tlua::LuaError::from)?; // TODO: only done on instances with corresponding roles - lua.exec_with("vshard.router.cfg(...)", &cfg) - .map_err(tlua::LuaError::from)?; + lua.exec_with( + "vshard = require('vshard') + vshard.router.cfg(...)", + &cfg, + ) + .map_err(tlua::LuaError::from)?; if req.bootstrap { lua.exec("vshard.router.bootstrap()")?; -- GitLab