doc effort

This commit is contained in:
NikVolf 2016-04-14 21:50:35 +03:00
parent 6f4a98333e
commit edb8f1fd7e
2 changed files with 15 additions and 0 deletions

View File

@ -21,6 +21,7 @@
pub mod service; pub mod service;
/// Default value for hypervisor ipc listener
pub const HYPERVISOR_IPC_URL: &'static str = "ipc:///tmp/parity-internal-hyper-status.ipc"; pub const HYPERVISOR_IPC_URL: &'static str = "ipc:///tmp/parity-internal-hyper-status.ipc";
use nanoipc; use nanoipc;
@ -46,10 +47,13 @@ impl Hypervisor {
Hypervisor::with_url(HYPERVISOR_IPC_URL) Hypervisor::with_url(HYPERVISOR_IPC_URL)
} }
/// Starts on the specified address for ipc listener
fn with_url(addr: &str) -> Hypervisor{ fn with_url(addr: &str) -> Hypervisor{
Hypervisor::with_url_and_service(addr, HypervisorService::new()) Hypervisor::with_url_and_service(addr, HypervisorService::new())
} }
/// Starts with the specified address for the ipc listener and
/// the specified list of modules in form of created service
fn with_url_and_service(addr: &str, service: Arc<HypervisorService>) -> Hypervisor { fn with_url_and_service(addr: &str, service: Arc<HypervisorService>) -> Hypervisor {
let worker = nanoipc::Worker::new(&service); let worker = nanoipc::Worker::new(&service);
Hypervisor{ Hypervisor{
@ -70,6 +74,7 @@ impl Hypervisor {
} }
} }
/// Creates IPC listener and starts all binaries
fn start(&self) { fn start(&self) {
let mut worker = self.ipc_worker.write().unwrap(); let mut worker = self.ipc_worker.write().unwrap();
worker.add_reqrep(&self.ipc_addr).unwrap_or_else(|e| panic!("Hypervisor ipc worker can not start - critical! ({:?})", e)); worker.add_reqrep(&self.ipc_addr).unwrap_or_else(|e| panic!("Hypervisor ipc worker can not start - critical! ({:?})", e));
@ -79,6 +84,9 @@ impl Hypervisor {
} }
} }
/// Start binary for the specified module
/// Does nothing when it is already started on module is inside the
/// main binary
fn start_module(&self, module_id: IpcModuleId) { fn start_module(&self, module_id: IpcModuleId) {
Self::match_module(&module_id).map(|binary_id| Self::match_module(&module_id).map(|binary_id|
{ {
@ -96,6 +104,7 @@ impl Hypervisor {
}); });
} }
/// Reports if all modules are checked in
pub fn modules_ready(&self) -> bool { pub fn modules_ready(&self) -> bool {
self.service.unchecked_count() == 0 self.service.unchecked_count() == 0
} }

View File

@ -21,8 +21,10 @@ use std::collections::HashMap;
pub type IpcModuleId = u64; pub type IpcModuleId = u64;
/// Blockhain database module id
pub const BLOCKCHAIN_MODULE_ID: IpcModuleId = 2000; pub const BLOCKCHAIN_MODULE_ID: IpcModuleId = 2000;
/// IPC service that handles module management
pub struct HypervisorService { pub struct HypervisorService {
check_list: RwLock<HashMap<IpcModuleId, bool>>, check_list: RwLock<HashMap<IpcModuleId, bool>>,
} }
@ -37,10 +39,12 @@ impl HypervisorService {
} }
impl HypervisorService { impl HypervisorService {
/// New service with the default list of modules
pub fn new() -> Arc<HypervisorService> { pub fn new() -> Arc<HypervisorService> {
HypervisorService::with_modules(vec![]) HypervisorService::with_modules(vec![])
} }
/// New service with list of modules that will report for being ready
pub fn with_modules(module_ids: Vec<IpcModuleId>) -> Arc<HypervisorService> { pub fn with_modules(module_ids: Vec<IpcModuleId>) -> Arc<HypervisorService> {
let mut check_list = HashMap::new(); let mut check_list = HashMap::new();
for module_id in module_ids { for module_id in module_ids {
@ -51,10 +55,12 @@ impl HypervisorService {
}) })
} }
/// Number of modules still being waited for check-in
pub fn unchecked_count(&self) -> usize { pub fn unchecked_count(&self) -> usize {
self.check_list.read().unwrap().iter().filter(|&(_, status)| !status).count() self.check_list.read().unwrap().iter().filter(|&(_, status)| !status).count()
} }
/// List of all modules within this service
pub fn module_ids(&self) -> Vec<IpcModuleId> { pub fn module_ids(&self) -> Vec<IpcModuleId> {
self.check_list.read().unwrap().iter().map(|(module_id, _)| module_id).cloned().collect() self.check_list.read().unwrap().iter().map(|(module_id, _)| module_id).cloned().collect()
} }