This is an automated email from the ASF dual-hosted git repository.
Jackie-Jiang pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/pinot.git
The following commit(s) were added to refs/heads/master by this push:
new da2e20cb9df Move caching Null Bitmap to NullValueVectorReaderImpl's
contructor (#18399)
da2e20cb9df is described below
commit da2e20cb9dfb99eb5439c3f70da1ada12a0c1161
Author: Songqiao Su <[email protected]>
AuthorDate: Mon May 4 14:14:01 2026 -0700
Move caching Null Bitmap to NullValueVectorReaderImpl's contructor (#18399)
---
.../segment/index/readers/NullValueVectorReaderImpl.java | 13 +++----------
.../index/readers/NullValueVectorReaderImplTest.java | 13 -------------
2 files changed, 3 insertions(+), 23 deletions(-)
diff --git
a/pinot-segment-local/src/main/java/org/apache/pinot/segment/local/segment/index/readers/NullValueVectorReaderImpl.java
b/pinot-segment-local/src/main/java/org/apache/pinot/segment/local/segment/index/readers/NullValueVectorReaderImpl.java
index 61d74816f60..d3dfa0652ff 100644
---
a/pinot-segment-local/src/main/java/org/apache/pinot/segment/local/segment/index/readers/NullValueVectorReaderImpl.java
+++
b/pinot-segment-local/src/main/java/org/apache/pinot/segment/local/segment/index/readers/NullValueVectorReaderImpl.java
@@ -25,13 +25,11 @@ import org.roaringbitmap.buffer.ImmutableRoaringBitmap;
public class NullValueVectorReaderImpl implements NullValueVectorReader {
- private final PinotDataBuffer _dataBuffer;
// Cached bitmap to avoid re-deserializing from the underlying buffer on
every call.
- // ImmutableRoaringBitmap is thread-safe once constructed, so a volatile
field is sufficient.
- private volatile ImmutableRoaringBitmap _nullBitmap;
+ private final ImmutableRoaringBitmap _nullBitmap;
public NullValueVectorReaderImpl(PinotDataBuffer dataBuffer) {
- _dataBuffer = dataBuffer;
+ _nullBitmap = new ImmutableRoaringBitmap(dataBuffer.toDirectByteBuffer(0,
(int) dataBuffer.size()));
}
public boolean isNull(int docId) {
@@ -40,11 +38,6 @@ public class NullValueVectorReaderImpl implements
NullValueVectorReader {
@Override
public ImmutableRoaringBitmap getNullBitmap() {
- ImmutableRoaringBitmap nullBitmap = _nullBitmap;
- if (nullBitmap == null) {
- nullBitmap = new
ImmutableRoaringBitmap(_dataBuffer.toDirectByteBuffer(0, (int)
_dataBuffer.size()));
- _nullBitmap = nullBitmap;
- }
- return nullBitmap;
+ return _nullBitmap;
}
}
diff --git
a/pinot-segment-local/src/test/java/org/apache/pinot/segment/local/segment/index/readers/NullValueVectorReaderImplTest.java
b/pinot-segment-local/src/test/java/org/apache/pinot/segment/local/segment/index/readers/NullValueVectorReaderImplTest.java
index 20797187db2..62908fba494 100644
---
a/pinot-segment-local/src/test/java/org/apache/pinot/segment/local/segment/index/readers/NullValueVectorReaderImplTest.java
+++
b/pinot-segment-local/src/test/java/org/apache/pinot/segment/local/segment/index/readers/NullValueVectorReaderImplTest.java
@@ -62,19 +62,6 @@ public class NullValueVectorReaderImplTest implements
PinotBuffersAfterMethodChe
}
}
- @Test
- public void testNullBitmapIsCached()
- throws IOException {
- File nullValueFile = new File(TEMP_DIR, TEMP_DIR.list()[0]);
- try (PinotDataBuffer buffer =
PinotDataBuffer.loadBigEndianFile(nullValueFile)) {
- NullValueVectorReaderImpl reader = new NullValueVectorReaderImpl(buffer);
- // Repeated calls to getNullBitmap() must return the same instance, not
reconstruct it
- org.roaringbitmap.buffer.ImmutableRoaringBitmap first =
reader.getNullBitmap();
- org.roaringbitmap.buffer.ImmutableRoaringBitmap second =
reader.getNullBitmap();
- Assert.assertSame(first, second, "getNullBitmap() should return the
cached instance on repeated calls");
- }
- }
-
@AfterClass
public void tearDown()
throws Exception {
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]