check convergence

This commit is contained in:
Anatoly Yakovenko 2018-05-15 19:59:20 -07:00
parent 82aef7ebe2
commit a5cf745e1c
1 changed files with 21 additions and 12 deletions

View File

@ -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 {