mirror of
https://github.com/loro-dev/loro.git
synced 2025-02-06 12:25:03 +00:00
fix: map lamport order
This commit is contained in:
parent
4f5f809bb6
commit
b6e9983eb7
4 changed files with 33 additions and 26 deletions
|
@ -72,13 +72,9 @@ impl MapContainer {
|
|||
key: InternalString,
|
||||
value: LoroValue,
|
||||
id: ID,
|
||||
store: &mut LogStore,
|
||||
order: TotalOrderStamp,
|
||||
) -> Op {
|
||||
let value_index = self.pool.alloc(value).start;
|
||||
let order = TotalOrderStamp {
|
||||
client_id: store.this_client_id,
|
||||
lamport: store.next_lamport(),
|
||||
};
|
||||
self.state.insert(
|
||||
key.clone(),
|
||||
ValueSlot {
|
||||
|
@ -100,15 +96,31 @@ impl MapContainer {
|
|||
let mut store_ops = Vec::with_capacity(ops.added.len() + ops.deleted.len());
|
||||
let mut offset = 0;
|
||||
let id = store.next_id();
|
||||
let lamport = store.next_lamport();
|
||||
let client_id = store.this_client_id;
|
||||
for (k, v) in ops.added.into_iter() {
|
||||
let id = id.inc(offset);
|
||||
store_ops.push(self.apply_insert(
|
||||
k,
|
||||
v.into_value().unwrap(),
|
||||
id.inc(offset),
|
||||
TotalOrderStamp {
|
||||
lamport: lamport + offset as u32,
|
||||
client_id,
|
||||
},
|
||||
));
|
||||
offset += 1;
|
||||
store_ops.push(self.apply_insert(k, v.into_value().unwrap(), id, store));
|
||||
}
|
||||
for k in ops.deleted {
|
||||
let id = id.inc(offset);
|
||||
store_ops.push(self.apply_insert(
|
||||
k,
|
||||
LoroValue::Null,
|
||||
id.inc(offset),
|
||||
TotalOrderStamp {
|
||||
lamport: lamport + offset as u32,
|
||||
client_id,
|
||||
},
|
||||
));
|
||||
offset += 1;
|
||||
store_ops.push(self.apply_insert(k, LoroValue::Null, id, store));
|
||||
}
|
||||
store_ops
|
||||
}
|
||||
|
@ -293,7 +305,6 @@ impl ContainerTrait for MapContainer {
|
|||
},
|
||||
);
|
||||
}
|
||||
println!("");
|
||||
}
|
||||
|
||||
fn track_apply(&mut self, _: &mut Hierarchy, op: &RichOp, _: &mut ImportContext) {
|
||||
|
|
|
@ -1307,20 +1307,25 @@ mod failed_tests {
|
|||
5,
|
||||
&mut [
|
||||
Map {
|
||||
site: 1,
|
||||
site: 0,
|
||||
container_idx: 0,
|
||||
key: 21,
|
||||
value: Container(C::List),
|
||||
key: 0,
|
||||
value: Container(C::Text),
|
||||
},
|
||||
Map {
|
||||
site: 1,
|
||||
site: 4,
|
||||
container_idx: 0,
|
||||
key: 21,
|
||||
key: 0,
|
||||
value: I32(-2021161081),
|
||||
},
|
||||
Map {
|
||||
site: 0,
|
||||
container_idx: 0,
|
||||
key: 255,
|
||||
value: Container(C::List),
|
||||
},
|
||||
SyncAll,
|
||||
List {
|
||||
site: 4,
|
||||
site: 0,
|
||||
container_idx: 1,
|
||||
key: 0,
|
||||
value: I32(1),
|
||||
|
|
|
@ -79,13 +79,7 @@ impl Actor {
|
|||
let root_value = Arc::clone(&actor.value_tracker);
|
||||
actor.loro.subscribe_deep(Box::new(move |event| {
|
||||
let mut root_value = root_value.lock().unwrap();
|
||||
if id == 0 {
|
||||
println!("event {:?}\n\nvalue {:?}", event, root_value);
|
||||
}
|
||||
root_value.apply(&event.relative_path, &event.diff);
|
||||
if id == 0 {
|
||||
println!("after value {:?}\n", root_value);
|
||||
}
|
||||
}));
|
||||
|
||||
let log_store = actor.loro.log_store.write().unwrap();
|
||||
|
|
|
@ -379,9 +379,6 @@ pub(super) fn decode_changes_to_inner_format(
|
|||
}
|
||||
}
|
||||
}
|
||||
if store.this_client_id == 0 && changes_ans.len()==1{
|
||||
println!("################################");
|
||||
}
|
||||
// TODO: using the one with fewer changes to import
|
||||
Ok(changes_ans)
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue