fix: get lamport by frontiers bug

This commit is contained in:
Zixuan Chen 2023-07-18 01:30:56 +08:00
parent 5a233501cc
commit 3d3c54eb92
2 changed files with 31 additions and 2 deletions

View file

@ -798,6 +798,34 @@ mod failed_tests {
)
}
#[test]
fn fuzz_1() {
test_multi_sites(
5,
&mut [
List {
site: 3,
container_idx: 30,
key: 0,
value: Null,
},
SyncAll,
Map {
site: 0,
container_idx: 0,
key: 14,
value: Null,
},
Map {
site: 3,
container_idx: 248,
key: 255,
value: Null,
},
],
);
}
#[test]
fn notify_causal_order_check() {
test_multi_sites(

View file

@ -103,6 +103,7 @@ impl Dag for AppDag {
}
impl AppDag {
// PERF: this may be painfully slow
/// get the version vector for a certain op.
/// It's the version when the op is applied
pub fn get_vv(&self, id: ID) -> Option<ImVersionVector> {
@ -184,13 +185,13 @@ impl AppDag {
let id = frontiers[0];
let Some(rle) = self.map.get(&id.peer) else { unreachable!() };
let Some(x) = rle.get_by_atom_index(id.counter) else { unreachable!("{} not found", id) };
x.element.lamport_end()
(id.counter - x.element.cnt) as Lamport + x.element.lamport + 1
};
for id in frontiers[1..].iter() {
let Some(rle) = self.map.get(&id.peer) else { unreachable!() };
let Some(x) = rle.get_by_atom_index(id.counter) else { unreachable!() };
lamport = lamport.max(x.element.lamport_end());
lamport = lamport.max((id.counter - x.element.cnt) as Lamport + x.element.lamport + 1);
}
lamport