check convergence
This commit is contained in:
parent
82aef7ebe2
commit
a5cf745e1c
31
src/crdt.rs
31
src/crdt.rs
|
@ -552,21 +552,29 @@ mod test {
|
||||||
.map(|&(ref c, _)| Crdt::gossip(c.clone(), exit.clone()))
|
.map(|&(ref c, _)| Crdt::gossip(c.clone(), exit.clone()))
|
||||||
.collect();
|
.collect();
|
||||||
let mut done = true;
|
let mut done = true;
|
||||||
for _ in 0..(num * 32) {
|
for i in 0..(num * 32) {
|
||||||
done = true;
|
done = false;
|
||||||
|
trace!("round {}", i);
|
||||||
for &(ref c, _) in listen.iter() {
|
for &(ref c, _) in listen.iter() {
|
||||||
trace!(
|
assert!(num >= c.read().unwrap().remote.values().len());
|
||||||
"done updates {} {}",
|
trace!("len {}", c.read().unwrap().remote.values().len());
|
||||||
c.read().unwrap().table.len(),
|
if (num - 1)== c.read().unwrap().remote.values().len() {
|
||||||
c.read().unwrap().update_index
|
done = true;
|
||||||
);
|
//for this node check if it thinks every node received num updates
|
||||||
//make sure the number of updates doesn't grow unbounded
|
for r in c.read().unwrap().remote.values() {
|
||||||
assert!(c.read().unwrap().update_index <= num as u64);
|
assert!(*r <= num as u64);
|
||||||
//make sure we got all the updates
|
trace!("r value {}", *r);
|
||||||
if c.read().unwrap().table.len() != num {
|
if *r != num as u64 {
|
||||||
done = false;
|
done = false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
//at least 1 node thinks every node has received num updates
|
||||||
|
if done == true {
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
//at least 1 node things every node has received num updates
|
||||||
if done == true {
|
if done == true {
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
@ -590,6 +598,7 @@ mod test {
|
||||||
#[test]
|
#[test]
|
||||||
#[ignore]
|
#[ignore]
|
||||||
fn gossip_ring_test() {
|
fn gossip_ring_test() {
|
||||||
|
logger::setup();
|
||||||
run_gossip_topo(|listen| {
|
run_gossip_topo(|listen| {
|
||||||
let num = listen.len();
|
let num = listen.len();
|
||||||
for n in 0..num {
|
for n in 0..num {
|
||||||
|
|
Loading…
Reference in New Issue