loro/crates/examples/Cargo.toml
Zixuan Chen 0325061476
fix: dead loop when importing updates (#570)
Fix the dead loop issue here: https://gist.github.com/sunflowerdeath/c0e2b46b6f5d2e32d368f8e04f730237

# Reason for the Dead Loop in `find_common_ancestor`

### Original Assumptions

1. **Dependency Assumption**

   If a DagNode is depended upon by other nodes, the direction of this dependency will only point to before the end of the node. This assumption is used in system design.

2. **Node Overlap Assumption**

   DagNodes do not overlap with each other. When retrieving DagNodes from two different positions:
   - They are either completely identical
   - Or they do not overlap at all
   - If there is overlap, it means they are the same node

### Current Issues

1. **Issues Caused by Lazy Loading**

   Due to the use of lazy loading, new situations have arisen. Initially:
   - A certain DagNode is not depended upon by other DagNodes
   - Therefore, the initially retrieved form is complete

2. **Impact of Subsequent Loading**

   After loading additional DagNodes:
   - The newly loaded DagNode may depend on the internal position of the previously complete DagNode
   - This causes the originally complete DagNode to be split into multiple smaller DagNodes

3. **Violation of Original Assumptions**

   In this case, when retrieving the content of the original DagNode again:
   - Other DagNode dependencies may appear in the middle
   - There may be overlaps on the DagNode
   - This violates the original design assumptions

# Fix Approach

Remove the assumption in the original implementation that "overlapping DagNodes will not occur." When overlapping DagNodes are found, retain the shorter one and remove the longer one.
2024-11-29 13:01:15 +08:00

41 lines
801 B
TOML

[package]
name = "examples"
version = "0.1.0"
edition = "2021"
publish = false
# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
[dependencies]
bench-utils = { path = "../bench-utils" }
dev-utils = { path = "../dev-utils" }
loro = { path = "../loro", features = ["counter"] }
arbitrary = { version = "1.3.0", features = ["derive"] }
serde_json = { workspace = true }
tracing = "0.1.40"
rand = "0.8.5"
zstd = "0.13.2"
ensure-cov = { workspace = true }
base64 = "0.22.1"
[dev-dependencies]
tabled = "0.15.0"
criterion = "0.4.0"
flate2 = "1.0"
color-backtrace = { version = "0.6" }
ctor = "0.2"
[[bench]]
name = "list"
harness = false
[[bench]]
name = "bench_text"
harness = false
[[bench]]
name = "fork"
harness = false
[profile.bench]
debug = true