Ivan Bessonov created IGNITE-22852: -------------------------------------- Summary: Remove extra leaf access while modifying data in B+Tree Key: IGNITE-22852 URL: https://issues.apache.org/jira/browse/IGNITE-22852 Project: Ignite Issue Type: Improvement Reporter: Ivan Bessonov
Currently, put operation does the following, when it finds a leaf node: # acquire read lock # check triangle invariant # find insertion point # release read lock # acquire write lock # check triangle invariant # find insertion point # insert/replace data # maybe release write lock I'm simplifying it a little bit, but the fact is that steps 4-7 could potentially be ignored, if we had an option to convert read lock into write lock. There's already an API for that in offheap lock class ({{{}upgradeToWriteLock{}}}). We could use it, or make another method with "try" semantics, that wouldn't acquire write lock if it couldn't acquire it using spin-wait with limited number of iterations. Same approach is possible for "put" and "remove". "invoke" requires some intermediary actions, so I wouldn't modify it for now. As a result, we can expect slightly improved performance of put/remove operations. We will see it in benchmarks, most likely. -- This message was sent by Atlassian Jira (v8.20.10#820010)