Fix removal of terminated CS instances in HB.

This commit is contained in:
Andreas Fackler 2018-07-30 15:02:20 +02:00
parent 78ab9742a9
commit 8346085fb9
1 changed files with 16 additions and 15 deletions

View File

@ -252,7 +252,7 @@ where
cs.handle_message(sender_id, message)? cs.handle_message(sender_id, message)?
}; };
let step = self.process_output(cs_step, epoch)?; let step = self.process_output(cs_step, epoch)?;
self.remove_terminated(epoch); self.remove_terminated();
Ok(step) Ok(step)
} }
@ -558,13 +558,15 @@ where
} }
/// Removes all `CommonSubset` instances from _past_ epochs that have terminated. /// Removes all `CommonSubset` instances from _past_ epochs that have terminated.
fn remove_terminated(&mut self, from_epoch: u64) { fn remove_terminated(&mut self) {
for epoch in from_epoch..self.epoch { let terminated_epochs: Vec<u64> = self
if self
.common_subsets .common_subsets
.get(&epoch) .iter()
.map_or(false, CommonSubset::terminated) .take_while(|&(epoch, _)| *epoch < self.epoch)
{ .filter(|&(_, cs)| cs.terminated())
.map(|(epoch, _)| *epoch)
.collect();
for epoch in terminated_epochs {
debug!( debug!(
"{:?} Epoch {} has terminated.", "{:?} Epoch {} has terminated.",
self.netinfo.our_uid(), self.netinfo.our_uid(),
@ -573,7 +575,6 @@ where
self.common_subsets.remove(&epoch); self.common_subsets.remove(&epoch);
} }
} }
}
} }
/// A batch of contributions the algorithm has output. /// A batch of contributions the algorithm has output.