From 879cdfdd6b78df58c0a89a78698ca4b0fc05d97d Mon Sep 17 00:00:00 2001 From: librelois <elois@ifee.fr> Date: Sat, 11 May 2019 20:50:48 +0200 Subject: [PATCH] [feat] conf: add method default_sync_module() & use it for sync command --- lib/core/conf/src/lib.rs | 10 +++- lib/core/core/src/lib.rs | 115 ++++++++++++++++++++----------------- lib/core/module/src/lib.rs | 2 + 3 files changed, 72 insertions(+), 55 deletions(-) diff --git a/lib/core/conf/src/lib.rs b/lib/core/conf/src/lib.rs index 85910f6e..061f15a2 100644 --- a/lib/core/conf/src/lib.rs +++ b/lib/core/conf/src/lib.rs @@ -221,20 +221,26 @@ pub enum DuRsGlobalConf { } impl DursGlobalConfTrait for DuRsGlobalConf { - /// Get currency fn currency(&self) -> CurrencyName { match *self { DuRsGlobalConf::V1(ref conf_v1) => conf_v1.currency.clone(), DuRsGlobalConf::V2(ref conf_v2) => conf_v2.currency.clone(), } } - /// Get node id fn my_node_id(&self) -> u32 { match *self { DuRsGlobalConf::V1(ref conf_v1) => conf_v1.my_node_id, DuRsGlobalConf::V2(ref conf_v2) => conf_v2.my_node_id, } } + fn default_sync_module(&self) -> ModuleName { + match *self { + DuRsGlobalConf::V1(_) => { + fatal_error!("Feature default_sync_module not exist in durs conf v1 !") + } + DuRsGlobalConf::V2(ref conf_v2) => conf_v2.default_sync_module.clone(), + } + } } impl Default for DuRsConf { diff --git a/lib/core/core/src/lib.rs b/lib/core/core/src/lib.rs index 0890fbe0..32826c32 100644 --- a/lib/core/core/src/lib.rs +++ b/lib/core/core/src/lib.rs @@ -347,56 +347,68 @@ impl DursCore<DuRsConf> { if enabled { self.network_modules_count += 1; if let Some(ServerMode::_Sync(ref network_sync)) = self.server_command { - // Start module in a new thread - let router_sender = self - .router_sender - .clone() - .expect("Try to start a core without router_sender !"); - let soft_meta_datas = self.soft_meta_datas.clone(); - let module_conf_json = self - .soft_meta_datas - .conf - .clone() - .modules() - .get(&NM::name().to_string().as_str()) - .cloned(); - let keypairs = self.keypairs; - - // Load module conf and keys - let ((module_conf, _), required_keys) = get_module_conf_and_keys::<NM>( - &soft_meta_datas.conf.get_global_conf(), - module_conf_json, - keypairs, - )?; - - let sync_params = network_sync.clone(); - let thread_builder = thread::Builder::new().name(NM::name().0.into()); - self.threads.insert( - NM::name(), - thread_builder - .spawn(move || { - NM::sync( - &soft_meta_datas, - required_keys, - module_conf, - router_sender, - sync_params, - ) - .unwrap_or_else(|_| { - fatal_error!( - "Fatal error : fail to load module '{}' !", - NM::name().to_string() + if NM::name().0 + == self + .soft_meta_datas + .conf + .get_global_conf() + .default_sync_module() + .0 + { + // Start module in a new thread + let router_sender = self + .router_sender + .clone() + .expect("Try to start a core without router_sender !"); + let soft_meta_datas = self.soft_meta_datas.clone(); + let module_conf_json = self + .soft_meta_datas + .conf + .clone() + .modules() + .get(&NM::name().to_string().as_str()) + .cloned(); + let keypairs = self.keypairs; + + // Load module conf and keys + let ((module_conf, _), required_keys) = get_module_conf_and_keys::<NM>( + &soft_meta_datas.conf.get_global_conf(), + module_conf_json, + keypairs, + )?; + + let sync_params = network_sync.clone(); + let thread_builder = thread::Builder::new().name(NM::name().0.into()); + self.threads.insert( + NM::name(), + thread_builder + .spawn(move || { + NM::sync( + &soft_meta_datas, + required_keys, + module_conf, + router_sender, + sync_params, ) - }); - }) - .map_err(|e| PlugModuleError::FailSpawnModuleThread { - module_name: NM::name(), - error: e, - })?, - ); - self.modules_names.push(NM::name()); - info!("Success to load {} module.", NM::name().to_string()); - Ok(()) + .unwrap_or_else(|_| { + fatal_error!( + "Fatal error : fail to load module '{}' !", + NM::name().to_string() + ) + }); + }) + .map_err(|e| PlugModuleError::FailSpawnModuleThread { + module_name: NM::name(), + error: e, + })?, + ); + self.modules_names.push(NM::name()); + info!("Success to load {} module.", NM::name().to_string()); + Ok(()) + } else { + debug!("Module '{}' not used for sync.", NM::name()); + Ok(()) + } } else { self.plug_::<NM>(true) } @@ -453,11 +465,8 @@ impl DursCore<DuRsConf> { required_keys, module_conf, router_sender_clone, - false, ) - .unwrap_or_else(|_| { - fatal_error!("Fail to load module '{}' !", M::name()) - }); + .unwrap_or_else(|e| fatal_error!("Module '{}': {}", M::name(), e)); }) .map_err(|e| PlugModuleError::FailSpawnModuleThread { module_name: M::name(), diff --git a/lib/core/module/src/lib.rs b/lib/core/module/src/lib.rs index 47472f6c..ff44aba4 100644 --- a/lib/core/module/src/lib.rs +++ b/lib/core/module/src/lib.rs @@ -108,6 +108,8 @@ pub trait DursGlobalConfTrait: fn currency(&self) -> CurrencyName; /// Get node id fn my_node_id(&self) -> u32; + /// Get default sync module + fn default_sync_module(&self) -> ModuleName; } /// Durs configuration trait -- GitLab