mirror of
https://github.com/loro-dev/loro.git
synced 2025-02-02 11:06:14 +00:00
fix: get lamport by frontiers bug
This commit is contained in:
parent
5a233501cc
commit
3d3c54eb92
2 changed files with 31 additions and 2 deletions
|
@ -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]
|
#[test]
|
||||||
fn notify_causal_order_check() {
|
fn notify_causal_order_check() {
|
||||||
test_multi_sites(
|
test_multi_sites(
|
||||||
|
|
|
@ -103,6 +103,7 @@ impl Dag for AppDag {
|
||||||
}
|
}
|
||||||
|
|
||||||
impl AppDag {
|
impl AppDag {
|
||||||
|
// PERF: this may be painfully slow
|
||||||
/// get the version vector for a certain op.
|
/// get the version vector for a certain op.
|
||||||
/// It's the version when the op is applied
|
/// It's the version when the op is applied
|
||||||
pub fn get_vv(&self, id: ID) -> Option<ImVersionVector> {
|
pub fn get_vv(&self, id: ID) -> Option<ImVersionVector> {
|
||||||
|
@ -184,13 +185,13 @@ impl AppDag {
|
||||||
let id = frontiers[0];
|
let id = frontiers[0];
|
||||||
let Some(rle) = self.map.get(&id.peer) else { unreachable!() };
|
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) };
|
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() {
|
for id in frontiers[1..].iter() {
|
||||||
let Some(rle) = self.map.get(&id.peer) else { unreachable!() };
|
let Some(rle) = self.map.get(&id.peer) else { unreachable!() };
|
||||||
let Some(x) = rle.get_by_atom_index(id.counter) 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
|
lamport
|
||||||
|
|
Loading…
Reference in a new issue