doc effort
This commit is contained in:
parent
6f4a98333e
commit
edb8f1fd7e
@ -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
|
||||||
}
|
}
|
||||||
|
@ -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()
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user