From dcb5ae4ec6463e120fa005f411e9cb6d461d5be4 Mon Sep 17 00:00:00 2001 From: leeeon233 Date: Tue, 27 Dec 2022 15:26:14 +0800 Subject: [PATCH] chore: rebase main --- crates/loro-core/benches/encode.rs | 2 +- crates/loro-core/src/dag/iter.rs | 49 ------------------- .../src/log_store/encoding/encode_updates.rs | 12 ++++- crates/loro-core/src/log_store/import.rs | 5 +- 4 files changed, 12 insertions(+), 56 deletions(-) diff --git a/crates/loro-core/benches/encode.rs b/crates/loro-core/benches/encode.rs index 208f7861..fb342966 100644 --- a/crates/loro-core/benches/encode.rs +++ b/crates/loro-core/benches/encode.rs @@ -203,7 +203,7 @@ mod import { } b.iter(|| { c1.decode( - &c2.encode(EncodeConfig::new(EncodeMode::Updates(c1.vv()), None)) + &c2.encode(EncodeConfig::new(EncodeMode::Updates(c1.vv_cloned()), None)) .unwrap(), ) .unwrap(); diff --git a/crates/loro-core/src/dag/iter.rs b/crates/loro-core/src/dag/iter.rs index fe3271d0..c409244d 100644 --- a/crates/loro-core/src/dag/iter.rs +++ b/crates/loro-core/src/dag/iter.rs @@ -307,52 +307,3 @@ impl<'a, T: DagNode + 'a, D: Dag> Iterator for DagCausalIter<'a, D> { }) } } - -#[cfg(test)] -mod test { - use std::time::Instant; - - use crate::{ - change::ChangeMergeCfg, - configure::Configure, - log_store::{EncodeConfig, EncodeMode}, - LoroCore, - }; - - #[test] - fn parallel_case() { - let mut c1 = LoroCore::new( - Configure { - change: ChangeMergeCfg { - max_change_length: 0, - max_change_interval: 0, - }, - ..Default::default() - }, - Some(1), - ); - let mut c2 = LoroCore::new( - Configure { - change: ChangeMergeCfg { - max_change_length: 0, - max_change_interval: 0, - }, - ..Default::default() - }, - Some(2), - ); - let mut text1 = c1.get_text("text"); - let mut text2 = c2.get_text("text"); - for _ in 0..1000 { - text1.insert(&c1, 0, "1").unwrap(); - text2.insert(&c2, 0, "2").unwrap(); - } - let start = Instant::now(); - c1.decode( - &c2.encode(EncodeConfig::new(EncodeMode::Updates(c1.vv()), None)) - .unwrap(), - ) - .unwrap(); - println!("{:?}", start.elapsed()); - } -} diff --git a/crates/loro-core/src/log_store/encoding/encode_updates.rs b/crates/loro-core/src/log_store/encoding/encode_updates.rs index d4d0d80d..2be321a4 100644 --- a/crates/loro-core/src/log_store/encoding/encode_updates.rs +++ b/crates/loro-core/src/log_store/encoding/encode_updates.rs @@ -6,6 +6,8 @@ use tracing::instrument; use crate::{ change::{Change, Lamport, Timestamp}, container::ContainerID, + event::RawEvent, + hierarchy::{self, Hierarchy}, id::{ClientID, Counter, ID}, log_store::RemoteClientChanges, op::{RemoteContent, RemoteOp}, @@ -184,7 +186,12 @@ impl LoroCore { #[instrument(skip_all)] pub fn import_updates_batch(&mut self, input: &[Vec]) -> Result<(), LoroError> { debug_log::group!("Import updates at {}", self.client_id()); - let ans = self.log_store.write().unwrap().import_updates_batch(input); + let mut hierarchy = self.hierarchy.try_lock().unwrap(); + let ans = self + .log_store + .write() + .unwrap() + .import_updates_batch(input, &mut hierarchy); let ans = match ans { Ok(events) => { self.notify(events); @@ -202,6 +209,7 @@ impl LogStore { pub fn import_updates_batch( &mut self, batch: &[Vec], + hierarchy: &mut Hierarchy, ) -> Result, postcard::Error> { // FIXME: changes may not be continuous let mut changes: RemoteClientChanges = Default::default(); @@ -215,6 +223,6 @@ impl LogStore { } } - Ok(self.import(changes)) + Ok(self.import(hierarchy, changes)) } } diff --git a/crates/loro-core/src/log_store/import.rs b/crates/loro-core/src/log_store/import.rs index b76b09b0..0e3c0030 100644 --- a/crates/loro-core/src/log_store/import.rs +++ b/crates/loro-core/src/log_store/import.rs @@ -270,10 +270,7 @@ impl LogStore { let mut current_vv = common_ancestors_vv.clone(); let mut already_checkout = FxHashSet::default(); - for iter in self.iter_causal( - &common_ancestors, - context.new_vv.sub_vec(&common_ancestors_vv), - ) { + for iter in self.iter_causal(&common_ancestors, iter_targets) { debug_log::debug_dbg!(&iter); debug_log::debug_dbg!(¤t_vv); already_checkout.clear();