mirror of
https://github.com/loro-dev/loro.git
synced 2025-01-22 12:57:20 +00:00
0325061476
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. |
||
---|---|---|
.. | ||
workflows |