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)?
};
let step = self.process_output(cs_step, epoch)?;
self.remove_terminated(epoch);
self.remove_terminated();
Ok(step)
}
@ -558,20 +558,21 @@ where
}
/// Removes all `CommonSubset` instances from _past_ epochs that have terminated.
fn remove_terminated(&mut self, from_epoch: u64) {
for epoch in from_epoch..self.epoch {
if self
.common_subsets
.get(&epoch)
.map_or(false, CommonSubset::terminated)
{
debug!(
"{:?} Epoch {} has terminated.",
self.netinfo.our_uid(),
epoch
);
self.common_subsets.remove(&epoch);
}
fn remove_terminated(&mut self) {
let terminated_epochs: Vec<u64> = self
.common_subsets
.iter()
.take_while(|&(epoch, _)| *epoch < self.epoch)
.filter(|&(_, cs)| cs.terminated())
.map(|(epoch, _)| *epoch)
.collect();
for epoch in terminated_epochs {
debug!(
"{:?} Epoch {} has terminated.",
self.netinfo.our_uid(),
epoch
);
self.common_subsets.remove(&epoch);
}
}
}