fix: map lamport order

This commit is contained in:
leeeon233 2023-03-07 17:05:40 +08:00
parent 4f5f809bb6
commit b6e9983eb7
4 changed files with 33 additions and 26 deletions

View file

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

View file

@ -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),

View file

@ -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();

View file

@ -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)
}