mirror of https://github.com/poanetwork/hbbft.git
Merge pull request #167 from poanetwork/afck-queue-fields
Fix bin_values change handling in agreement.
This commit is contained in:
commit
35edde9007
|
@ -314,6 +314,8 @@ impl<NodeUid: Clone + Debug + Ord> Agreement<NodeUid> {
|
||||||
.filter(|values| values.contains(&b))
|
.filter(|values| values.contains(&b))
|
||||||
.count();
|
.count();
|
||||||
|
|
||||||
|
let mut step = Step::default();
|
||||||
|
|
||||||
// upon receiving `BVal(b)` messages from 2f + 1 nodes,
|
// upon receiving `BVal(b)` messages from 2f + 1 nodes,
|
||||||
// bin_values := bin_values ∪ {b}
|
// bin_values := bin_values ∪ {b}
|
||||||
if count_bval == 2 * self.netinfo.num_faulty() + 1 {
|
if count_bval == 2 * self.netinfo.num_faulty() + 1 {
|
||||||
|
@ -324,19 +326,19 @@ impl<NodeUid: Clone + Debug + Ord> Agreement<NodeUid> {
|
||||||
// where w ∈ bin_values
|
// where w ∈ bin_values
|
||||||
if previous_bin_values == BinValues::None {
|
if previous_bin_values == BinValues::None {
|
||||||
// Send an `Aux` message at most once per epoch.
|
// Send an `Aux` message at most once per epoch.
|
||||||
self.send_aux(b)
|
step.extend(self.send_aux(b)?);
|
||||||
} else if bin_values_changed {
|
|
||||||
self.on_bin_values_changed()
|
|
||||||
} else {
|
|
||||||
Ok(Step::default())
|
|
||||||
}
|
}
|
||||||
} else if count_bval == self.netinfo.num_faulty() + 1 && !self.sent_bval.contains(&b) {
|
if bin_values_changed {
|
||||||
|
step.extend(self.on_bin_values_changed()?);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if count_bval == self.netinfo.num_faulty() + 1 && !self.sent_bval.contains(&b) {
|
||||||
// upon receiving `BVal(b)` messages from f + 1 nodes, if
|
// upon receiving `BVal(b)` messages from f + 1 nodes, if
|
||||||
// `BVal(b)` has not been sent, multicast `BVal(b)`
|
// `BVal(b)` has not been sent, multicast `BVal(b)`
|
||||||
self.send_bval(b)
|
step.extend(self.send_bval(b)?);
|
||||||
} else {
|
|
||||||
Ok(Step::default())
|
|
||||||
}
|
}
|
||||||
|
Ok(step)
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Called when `bin_values` changes as a result of receiving a `BVal` message. Tries to update
|
/// Called when `bin_values` changes as a result of receiving a `BVal` message. Tries to update
|
||||||
|
|
Loading…
Reference in New Issue