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]
|
||||
fn notify_causal_order_check() {
|
||||
test_multi_sites(
|
||||
|
|
|
@ -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
|
||||
|
|
Loading…
Reference in a new issue