Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[improve][broker] Support values up to 2^32 in ConcurrentBitmapSortedLongPairSet #23878

Open
wants to merge 3 commits into
base: master
Choose a base branch
from

Conversation

lhotari
Copy link
Member

@lhotari lhotari commented Jan 22, 2025

Motivation

ConcurrentBitmapSortedLongPairSet doesn't support long right-side values for the added pairs.
This PR mitigates the issue reported as #23877 by properly implementing the iterator so that values up to 2^32 can be supported.

In addition, this PR optimizes the iterator usable by using RoaringBitmap's PeekableIntIterator which is more performant than using Java's standard Iterator API since PeekableIntIterator uses primitive int values instead of using boxed Integer values.

Modifications

  • Optimize ConcurrentBitmapSortedLongPairSet's processItems method by using PeekableIntIterator instead of Java's standard Iterator API.
  • Properly use Integer.toUnsignedLong to support values up to 2^32. RoaringBitmap encodes the bit index as an unsigned int. However since Java doesn't support unsigned ints, it's necessary to use Integer.toUnsignedLong to convert the value to a long value.

Documentation

  • doc
  • doc-required
  • doc-not-needed
  • doc-complete

@codecov-commenter
Copy link

codecov-commenter commented Jan 22, 2025

Codecov Report

All modified and coverable lines are covered by tests ✅

Project coverage is 74.13%. Comparing base (bbc6224) to head (d36ac04).
Report is 861 commits behind head on master.

Additional details and impacted files

Impacted file tree graph

@@             Coverage Diff              @@
##             master   #23878      +/-   ##
============================================
+ Coverage     73.57%   74.13%   +0.56%     
+ Complexity    32624    32187     -437     
============================================
  Files          1877     1853      -24     
  Lines        139502   143619    +4117     
  Branches      15299    16311    +1012     
============================================
+ Hits         102638   106479    +3841     
+ Misses        28908    28742     -166     
- Partials       7956     8398     +442     
Flag Coverage Δ
inttests 26.67% <100.00%> (+2.08%) ⬆️
systests 23.13% <100.00%> (-1.19%) ⬇️
unittests 73.64% <100.00%> (+0.80%) ⬆️

Flags with carried forward coverage won't be shown. Click here to find out more.

Files with missing lines Coverage Δ
...ulsar/utils/ConcurrentBitmapSortedLongPairSet.java 97.14% <100.00%> (+2.69%) ⬆️

... and 1026 files with indirect coverage changes

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

Successfully merging this pull request may close these issues.

2 participants