The following changes were made to support resolution of this issue:
- bug fixes by Martyn for some edge cases.
- implemented by Martyn.
- modified to use getBits64() rather than InputBitStream for fast random access to the #of tuples per child node. also modified to cache the minimum #of tuples spanned per child across the children to shave off some additional cycles.
- modified exactly per DefaultNodeCoder to provide the same optimizations when version timestamps are in use (e.g., when the indices support transactional isolation).
The changes listed above all focus on the INT64_BRANCH performance regression. In addition, the following change was made to remove a potential synchronization hot spot during concurrent query:
- modified to remove the use of the synchronized(childRefs) construct. Proper synchronization should be provided by the Memoizer pattern for read-only B+Tree views and by the single-threaded for mutation contract in combination with the UnisolatedReadWriteIndex class for mutable B+Tree views.
Martyn is continuing to look into performance optimizations within getBits().
We will have a CI data point on this in ~ 2 hours.
Committed revision r4581.