diff --git a/crates/loro-internal/src/encoding/encode_reordered.rs b/crates/loro-internal/src/encoding/encode_reordered.rs index eaa4dfe5..7bff72c4 100644 --- a/crates/loro-internal/src/encoding/encode_reordered.rs +++ b/crates/loro-internal/src/encoding/encode_reordered.rs @@ -664,7 +664,8 @@ pub(crate) fn decode_snapshot(doc: &LoroDoc, bytes: &[u8]) -> LoroResult<()> { let changes = decode_changes(iter.changes, iter.start_counters, peer_ids, deps, ops_map)?; let (new_ids, pending_changes) = import_changes_to_oplog(changes, &mut oplog)?; assert!(pending_changes.is_empty()); - assert_eq!(&state.frontiers, oplog.frontiers()); + // we cannot assert this because frontiers of oplog is not updated yet when batch_importing + // assert_eq!(&state.frontiers, oplog.frontiers()); if !oplog.pending_changes.is_empty() { drop(oplog); drop(state); diff --git a/crates/loro-internal/tests/test.rs b/crates/loro-internal/tests/test.rs index 68168f4a..f4b92e68 100644 --- a/crates/loro-internal/tests/test.rs +++ b/crates/loro-internal/tests/test.rs @@ -776,3 +776,18 @@ fn tree_checkout() { }) .unwrap(); } + +#[test] +fn issue_batch_import_snapshot() { + let doc = LoroDoc::new_auto_commit(); + doc.set_peer_id(123).unwrap(); + let doc2 = LoroDoc::new_auto_commit(); + doc2.set_peer_id(456).unwrap(); + doc.get_map("map").insert("s", "hello world!").unwrap(); + doc2.get_map("map").insert("s", "hello?").unwrap(); + + let data1 = doc.export_snapshot(); + let data2 = doc2.export_snapshot(); + let doc3 = LoroDoc::new(); + doc3.import_batch(&[data1, data2]).unwrap(); +}