diff --git a/Cargo.toml b/Cargo.toml index ad6d4824..ea2f288d 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -39,7 +39,6 @@ maintenance = { status = "actively-developed" } #ctrlc = "3.1.3" #ego-tree = "0.6.0" #env_logger = "0.6.1" -#futures = "0.1.28" futures-preview = { version = "=0.3.0-alpha.19", features = ["async-await"] } fxhash = "0.2" lazy_static = "1.4" diff --git a/src/children.rs b/src/children.rs index e7c63d72..72ccf49c 100644 --- a/src/children.rs +++ b/src/children.rs @@ -70,8 +70,6 @@ impl Children { loop { match poll!(&mut self.bcast.next()) { Poll::Ready(Some(msg)) => { - let id = self.bcast.id().clone(); - match msg { BastionMessage::PoisonPill | BastionMessage::Dead { .. } | BastionMessage::Faulted { .. } => { if msg.is_faulted() { @@ -122,8 +120,6 @@ impl Child { async fn run(mut self) { loop { if let Poll::Ready(res) = poll!(&mut self.exec) { - let id = self.bcast.id().clone(); - match res { Ok(Ok(())) => self.bcast.dead(), Ok(Err(())) | Err(_) => self.bcast.faulted(), @@ -134,8 +130,6 @@ impl Child { match poll!(&mut self.bcast.next()) { Poll::Ready(Some(msg)) => { - let id = self.bcast.id().clone(); - match msg { BastionMessage::PoisonPill => { self.bcast.dead(); diff --git a/src/context.rs b/src/context.rs index 0d4c2152..a74f89d4 100644 --- a/src/context.rs +++ b/src/context.rs @@ -1,4 +1,4 @@ -use crate::broadcast::{BastionMessage, Broadcast, Sender}; +use crate::broadcast::Sender; use uuid::Uuid; pub struct BastionContext { diff --git a/src/supervisor.rs b/src/supervisor.rs index 180a3d60..15aa2993 100644 --- a/src/supervisor.rs +++ b/src/supervisor.rs @@ -5,7 +5,6 @@ use futures::{pending, poll}; use futures::prelude::*; use fxhash::{FxHashMap, FxHashSet}; use runtime::task::JoinHandle; -use std::collections::BTreeMap; use std::ops::RangeFrom; use std::task::Poll; use uuid::Uuid; @@ -14,8 +13,9 @@ use uuid::Uuid; pub struct Supervisor { bcast: Broadcast, children: Vec, - order: BTreeMap, // FIXME - launched: FxHashMap)>, // FIXME + // FIXME: contains dead Children + order: Vec, + launched: FxHashMap)>, dead: FxHashSet, strategy: SupervisionStrategy, } @@ -32,7 +32,7 @@ impl Supervisor { let bcast = Broadcast::new(id); let children = Vec::new(); - let order = BTreeMap::new(); + let order = Vec::new(); let launched = FxHashMap::default(); let dead = FxHashSet::default(); let strategy = SupervisionStrategy::default(); @@ -76,18 +76,11 @@ impl Supervisor { } pub(super) fn launch_children(&mut self) { - let start = if let Some(order) = self.order.keys().next_back() { - *order + 1 - } else { - 0 - }; - - for (order, children) in self.children.drain(..).enumerate() { + for children in self.children.drain(..) { let id = children.id().clone(); - let order = start + order; - self.order.insert(order, id.clone()); - self.launched.insert(id, (order, children.launch())); + self.launched.insert(id.clone(), (self.order.len(), children.launch())); + self.order.push(id); } } @@ -95,25 +88,19 @@ impl Supervisor { if range.start == 0 { self.bcast.poison_pill_children(); } else { - for (_, id) in self.order.range(range.clone()) { + // FIXME: panics + for id in self.order.get(range.clone()).unwrap() { self.bcast.poison_pill_child(id); } } - let mut removed = Vec::new(); let mut children = Vec::new(); - for (order, id) in self.order.range(range) { + for id in self.order.drain(range) { // FIXME: Err if None? - if let Some((_, launched)) = self.launched.remove(id) { + if let Some((_, launched)) = self.launched.remove(&id) { // FIXME: join? children.push(launched.await); } - - removed.push(*order); - } - - for order in removed { - self.order.remove(&order); } // FIXME: might remove children @@ -160,7 +147,6 @@ impl Supervisor { self.launched.remove(&id); self.bcast.remove_child(&id); - // FIXME: remove from order? self.dead.insert(id); } BastionMessage::Faulted { id } => {