loro
loro copied to clipboard
Panic when importing concurrent versions after `fork()`
Describe the bug
When trying to import an LoroDoc
into a forked doc, it panics with:
thread 'test_loro_raw_concurrent_import' panicked at /home/opc/.cargo/git/checkouts/loro-efef1422f3eefd12/de93d34a9c07/crates/loro-internal/src/oplog/change_store.rs:696:17:
assertion failed: vv.get(&change.id.peer).copied().unwrap_or(0) <= change.id.counter
Loro Dependencies Using Loro from git revision de93d34a9c07c5e67d20b9c5c72b4fa67b2ddb1f
loro = { git = "https://github.com/loro-dev/loro.git", branch = "dev" }
To Reproduce
let fx_loro = loro::LoroDoc::new();
fx_loro
.get_map("paciente")
.insert("nome", "DUMMY NAME V0")?;
fx_loro.commit();
let loro_c1 = fx_loro.fork();
loro_c1
.get_map("paciente")
.insert("nome", "DUMMY NAME V1")?;
loro_c1.commit();
// If I use `fork()` it panics
let final_loro = fx_loro.fork();
// If I create a new loro doc and import the snapshot it works
//let final_loro = loro::LoroDoc::new();
//final_loro.import(&fx_loro.export(loro::ExportMode::snapshot())?)?;
final_loro.import(&loro_c1.export(loro::ExportMode::snapshot())?)?;
Expected behavior
The LoroDoc
would sucessfully import all changes and merge them.
Additional context
Backtrace
thread 'test_loro_raw_concurrent_import' panicked at /home/opc/.cargo/git/checkouts/loro-efef1422f3eefd12/de93d34a9c07/crates/loro-internal/src/oplog/change_store.rs:696:17:
assertion failed: vv.get(&change.id.peer).copied().unwrap_or(0) <= change.id.counter
stack backtrace:
0: rust_begin_unwind
at /rustc/0d634185dfddefe09047881175f35c65d68dcff1/library/std/src/panicking.rs:662:5
1: core::panicking::panic_fmt
at /rustc/0d634185dfddefe09047881175f35c65d68dcff1/library/core/src/panicking.rs:74:14
2: core::panicking::panic
at /rustc/0d634185dfddefe09047881175f35c65d68dcff1/library/core/src/panicking.rs:148:5
3: loro_internal::oplog::change_store::mut_inner_kv::<impl loro_internal::oplog::change_store::ChangeStore>::insert_change
at /home/opc/.cargo/git/checkouts/loro-efef1422f3eefd12/de93d34a9c07/crates/loro-internal/src/oplog/change_store.rs:696:17
4: loro_internal::oplog::OpLog::insert_new_change
at /home/opc/.cargo/git/checkouts/loro-efef1422f3eefd12/de93d34a9c07/crates/loro-internal/src/oplog.rs:169:9
5: loro_internal::encoding::outdated_encode_reordered::import_changes_to_oplog
at /home/opc/.cargo/git/checkouts/loro-efef1422f3eefd12/de93d34a9c07/crates/loro-internal/src/encoding/outdated_encode_reordered.rs:276:9
6: loro_internal::encoding::fast_snapshot::decode_oplog
at /home/opc/.cargo/git/checkouts/loro-efef1422f3eefd12/de93d34a9c07/crates/loro-internal/src/encoding/fast_snapshot.rs:224:9
7: loro_internal::encoding::decode_oplog
at /home/opc/.cargo/git/checkouts/loro-efef1422f3eefd12/de93d34a9c07/crates/loro-internal/src/encoding.rs:252:37
8: loro_internal::oplog::OpLog::decode
at /home/opc/.cargo/git/checkouts/loro-efef1422f3eefd12/de93d34a9c07/crates/loro-internal/src/oplog.rs:399:9
9: loro_internal::loro::<impl loro_internal::LoroDoc>::_import_with::{{closure}}
at /home/opc/.cargo/git/checkouts/loro-efef1422f3eefd12/de93d34a9c07/crates/loro-internal/src/loro.rs:481:33
10: loro_internal::loro::<impl loro_internal::LoroDoc>::update_oplog_and_apply_delta_to_state_if_needed
at /home/opc/.cargo/git/checkouts/loro-efef1422f3eefd12/de93d34a9c07/crates/loro-internal/src/loro.rs:513:22
11: loro_internal::loro::<impl loro_internal::LoroDoc>::_import_with
at /home/opc/.cargo/git/checkouts/loro-efef1422f3eefd12/de93d34a9c07/crates/loro-internal/src/loro.rs:480:21
12: loro_internal::loro::<impl loro_internal::LoroDoc>::import_with
at /home/opc/.cargo/git/checkouts/loro-efef1422f3eefd12/de93d34a9c07/crates/loro-internal/src/loro.rs:436:19
13: loro::LoroDoc::import
at /home/opc/.cargo/git/checkouts/loro-efef1422f3eefd12/de93d34a9c07/crates/loro/src/lib.rs:391:9
14: tests_paciente::test_loro_raw_concurrent_import
at ./tests/tests_paciente.rs:250:5
15: tests_paciente::test_loro_raw_concurrent_import::{{closure}}
at ./tests/tests_paciente.rs:228:41
16: core::ops::function::FnOnce::call_once
at /rustc/0d634185dfddefe09047881175f35c65d68dcff1/library/core/src/ops/function.rs:250:5
17: core::ops::function::FnOnce::call_once
at /rustc/0d634185dfddefe09047881175f35c65d68dcff1/library/core/src/ops/function.rs:250:5