This is an automated email from the ASF dual-hosted git repository.

xiangfu 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 689c2f32d7a Avoid npe in the getdocIds code for Upserts (#16710)
689c2f32d7a is described below

commit 689c2f32d7adc66ad5810298295a75be221d3ac1
Author: Chaitanya Deepthi <[email protected]>
AuthorDate: Thu Aug 28 22:44:37 2025 -0700

    Avoid npe in the getdocIds code for Upserts (#16710)
---
 .../upsert/BasePartitionUpsertMetadataManager.java | 28 +++++++++++++++-------
 1 file changed, 20 insertions(+), 8 deletions(-)

diff --git 
a/pinot-segment-local/src/main/java/org/apache/pinot/segment/local/upsert/BasePartitionUpsertMetadataManager.java
 
b/pinot-segment-local/src/main/java/org/apache/pinot/segment/local/upsert/BasePartitionUpsertMetadataManager.java
index d5be5b4b4b3..5373db37fa0 100644
--- 
a/pinot-segment-local/src/main/java/org/apache/pinot/segment/local/upsert/BasePartitionUpsertMetadataManager.java
+++ 
b/pinot-segment-local/src/main/java/org/apache/pinot/segment/local/upsert/BasePartitionUpsertMetadataManager.java
@@ -905,18 +905,25 @@ public abstract class BasePartitionUpsertMetadataManager 
implements PartitionUps
           segmentsWithoutSnapshot.add(immutableSegment);
           continue;
         }
+        ThreadSafeMutableRoaringBitmap queryableDocIdsBitMap = null;
+        ThreadSafeMutableRoaringBitmap validDocIdsBitMap =
+            immutableSegment.getValidDocIds() == null ? new 
ThreadSafeMutableRoaringBitmap()
+                : immutableSegment.getValidDocIds();
         
immutableSegment.persistDocIdsSnapshot(V1Constants.VALID_DOC_IDS_SNAPSHOT_FILE_NAME,
-            immutableSegment.getValidDocIds());
+            validDocIdsBitMap);
         if (_deleteRecordColumn != null) {
+          queryableDocIdsBitMap =
+              immutableSegment.getQueryableDocIds() == null ? new 
ThreadSafeMutableRoaringBitmap()
+                  : immutableSegment.getQueryableDocIds();
           
immutableSegment.persistDocIdsSnapshot(V1Constants.QUERYABLE_DOC_IDS_SNAPSHOT_FILE_NAME,
-              immutableSegment.getQueryableDocIds());
+              queryableDocIdsBitMap);
         }
         _updatedSegmentsSinceLastSnapshot.remove(segment);
         numImmutableSegments++;
-        numPrimaryKeysInSnapshot += 
immutableSegment.getValidDocIds().getMutableRoaringBitmap().getCardinality();
+        numPrimaryKeysInSnapshot += 
validDocIdsBitMap.getMutableRoaringBitmap().getCardinality();
         if (_deleteRecordColumn != null) {
           numQueryableDocIdsInSnapshot +=
-              
immutableSegment.getQueryableDocIds().getMutableRoaringBitmap().getCardinality();
+              queryableDocIdsBitMap.getMutableRoaringBitmap().getCardinality();
         }
       } catch (Exception e) {
         _logger.warn("Caught exception while taking snapshot for segment: {}, 
skipping", segmentName, e);
@@ -940,16 +947,21 @@ public abstract class BasePartitionUpsertMetadataManager 
implements PartitionUps
           continue;
         }
         try {
-          
segment.persistDocIdsSnapshot(V1Constants.VALID_DOC_IDS_SNAPSHOT_FILE_NAME, 
segment.getValidDocIds());
+          ThreadSafeMutableRoaringBitmap segmentQueryableDocIdsBitMap = null;
+          ThreadSafeMutableRoaringBitmap segmentValidDocIdsBitMap =
+              segment.getValidDocIds() == null ? new 
ThreadSafeMutableRoaringBitmap() : segment.getValidDocIds();
+          
segment.persistDocIdsSnapshot(V1Constants.VALID_DOC_IDS_SNAPSHOT_FILE_NAME, 
segmentValidDocIdsBitMap);
           if (_deleteRecordColumn != null) {
+            segmentQueryableDocIdsBitMap = segment.getQueryableDocIds() == 
null ? new ThreadSafeMutableRoaringBitmap()
+                : segment.getQueryableDocIds();
             
segment.persistDocIdsSnapshot(V1Constants.QUERYABLE_DOC_IDS_SNAPSHOT_FILE_NAME,
-                segment.getQueryableDocIds());
+                segmentQueryableDocIdsBitMap);
           }
           _updatedSegmentsSinceLastSnapshot.remove(segment);
           numImmutableSegments++;
-          numPrimaryKeysInSnapshot += 
segment.getValidDocIds().getMutableRoaringBitmap().getCardinality();
+          numPrimaryKeysInSnapshot += 
segmentValidDocIdsBitMap.getMutableRoaringBitmap().getCardinality();
           if (_deleteRecordColumn != null) {
-            numQueryableDocIdsInSnapshot += 
segment.getQueryableDocIds().getMutableRoaringBitmap().getCardinality();
+            numQueryableDocIdsInSnapshot += 
segmentQueryableDocIdsBitMap.getMutableRoaringBitmap().getCardinality();
           }
         } catch (Exception e) {
           _logger.warn("Caught exception while taking snapshot for segment: {} 
w/o snapshot, skipping", segmentName, e);


---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to