Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Panic when importing concurrent versions after fork() #490

Closed
osmano807 opened this issue Oct 3, 2024 · 2 comments
Closed

Panic when importing concurrent versions after fork() #490

osmano807 opened this issue Oct 3, 2024 · 2 comments

Comments

@osmano807
Copy link

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 de93d34

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
zxch3n added a commit that referenced this issue Oct 3, 2024
@zxch3n
Copy link
Member

zxch3n commented Oct 3, 2024

Thanks!

@zxch3n zxch3n mentioned this issue Oct 3, 2024
zxch3n added a commit that referenced this issue Oct 3, 2024
* fix: fork error
fixed #490

* chore: fix warnings
@zxch3n
Copy link
Member

zxch3n commented Oct 4, 2024

Fixed

@zxch3n zxch3n closed this as completed Oct 4, 2024
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants