You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
When it is directed to each specific node type, e.g., Node4, Node16, Node48, Node256, it checks if it needs to restart upon read-write conflicts.
When conflict is detected, it restarts locally, but this can cause an infinite loop when running with write operations.
The dynamic node adjustment replaces a node with a larger/smaller node, which marks the original obsolete and reclaimed. However, when running concurrent queries of range lookups with a mixture of write operations such as insert and remove, threads executing range queries keep trying locally to collect child pointers due to obsoleteness detection which will never succeed.
I think the getChildren() in each node type should either
distinguish the write latch acquisition state and obsolete state, and when obsolete, retry from parent (may recursively backtrack up).
abort upon conflicts, and retry globally (from the root).
The text was updated successfully, but these errors were encountered:
Hey, yes good catch. And it's not only the getChildren function that has this issue, in the findStart and findEnd helpers there are also local retries that can run into an infinite loop.
Both of the proposed solutions would solve this.
Hi, I found an issue with
getChillren()
function inline 103
ofTree.cpp
insidelookupRange()
of ARTOLC implementation.ARTSynchronized/OptimisticLockCoupling/Tree.cpp
Line 103 in 849ef27
When it is directed to each specific node type, e.g.,
Node4, Node16, Node48, Node256
, it checks if it needs to restart upon read-write conflicts.When conflict is detected, it restarts locally, but this can cause an infinite loop when running with write operations.
The dynamic node adjustment replaces a node with a larger/smaller node, which marks the original obsolete and reclaimed. However, when running concurrent queries of range lookups with a mixture of write operations such as insert and remove, threads executing range queries keep trying locally to collect child pointers due to obsoleteness detection which will never succeed.
I think the
getChildren()
in each node type should eitherThe text was updated successfully, but these errors were encountered: