You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@pinot.apache.org by ja...@apache.org on 2023/11/08 07:36:20 UTC

(pinot) branch master updated: register the new segment when it's fully initalized by partitionUpsertMetadataManager (#11964)

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

jackie 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 49faa9424a register the new segment when it's fully initalized by partitionUpsertMetadataManager (#11964)
49faa9424a is described below

commit 49faa9424a96c6519c741843b461ff510b7efe4a
Author: Xiaobing <61...@users.noreply.github.com>
AuthorDate: Tue Nov 7 23:36:13 2023 -0800

    register the new segment when it's fully initalized by partitionUpsertMetadataManager (#11964)
---
 .../pinot/core/data/manager/realtime/RealtimeTableDataManager.java  | 6 +++++-
 1 file changed, 5 insertions(+), 1 deletion(-)

diff --git a/pinot-core/src/main/java/org/apache/pinot/core/data/manager/realtime/RealtimeTableDataManager.java b/pinot-core/src/main/java/org/apache/pinot/core/data/manager/realtime/RealtimeTableDataManager.java
index 05d00c5ca0..5aa08dd61f 100644
--- a/pinot-core/src/main/java/org/apache/pinot/core/data/manager/realtime/RealtimeTableDataManager.java
+++ b/pinot-core/src/main/java/org/apache/pinot/core/data/manager/realtime/RealtimeTableDataManager.java
@@ -526,17 +526,21 @@ public class RealtimeTableDataManager extends BaseTableDataManager {
         immutableSegment.getSegmentMetadata().getTotalDocs());
     _serverMetrics.addValueToTableGauge(_tableNameWithType, ServerGauge.SEGMENT_COUNT, 1L);
     ImmutableSegmentDataManager newSegmentManager = new ImmutableSegmentDataManager(immutableSegment);
-    SegmentDataManager oldSegmentManager = registerSegment(segmentName, newSegmentManager);
+    // Register the new segment after it is fully initialized by partitionUpsertMetadataManager, e.g. to fill up its
+    // validDocId bitmap. Otherwise, the query can return wrong results, if accessing the premature segment.
+    SegmentDataManager oldSegmentManager = _segmentDataManagerMap.get(segmentName);
     if (oldSegmentManager == null) {
       if (_tableUpsertMetadataManager.isPreloading()) {
         partitionUpsertMetadataManager.preloadSegment(immutableSegment);
       } else {
         partitionUpsertMetadataManager.addSegment(immutableSegment);
       }
+      registerSegment(segmentName, newSegmentManager);
       _logger.info("Added new immutable segment: {} to upsert-enabled table: {}", segmentName, _tableNameWithType);
     } else {
       IndexSegment oldSegment = oldSegmentManager.getSegment();
       partitionUpsertMetadataManager.replaceSegment(immutableSegment, oldSegment);
+      registerSegment(segmentName, newSegmentManager);
       _logger.info("Replaced {} segment: {} of upsert-enabled table: {}",
           oldSegment instanceof ImmutableSegment ? "immutable" : "mutable", segmentName, _tableNameWithType);
       releaseSegment(oldSegmentManager);


---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@pinot.apache.org
For additional commands, e-mail: commits-help@pinot.apache.org