xiangfu0 commented on code in PR #20106:
URL: https://github.com/apache/pinot/pull/20106#discussion_r4429920258


##########
pinot-core/src/main/java/org/apache/pinot/core/data/manager/realtime/RealtimeTableDataManager.java:
##########
@@ -235,43 +235,38 @@ protected void doInit() {
     _enforceConsumptionInOrder = isEnforceConsumptionInOrder();
     _streamMetadataProviderCache = getStreamMetadataProviderCache();
 
-    // For dedup and partial-upsert, need to wait for all segments loaded 
before starting consuming data
-    BooleanSupplier readyForDedupOrPartialUpsert;
-    if (isDedupEnabled() || isPartialUpsertEnabled()) {
-      readyForDedupOrPartialUpsert = new BooleanSupplier() {
-        volatile boolean _allSegmentsLoaded;
-        long _lastCheckTimeMs;
-
-        @Override
-        public boolean getAsBoolean() {
-          if (_allSegmentsLoaded) {
-            return true;
-          } else {
-            synchronized (this) {
-              if (_allSegmentsLoaded) {
-                return true;
-              }
-              long currentTimeMs = System.currentTimeMillis();
-              if (currentTimeMs - _lastCheckTimeMs <= 
READY_TO_CONSUME_DATA_CHECK_INTERVAL_MS) {
-                return false;
-              }
-              _lastCheckTimeMs = currentTimeMs;
-              _allSegmentsLoaded = 
TableStateUtils.isAllSegmentsLoaded(_helixManager, _tableNameWithType);
-              return _allSegmentsLoaded;
-            }
-          }
-        }
-      };
-    } else {
-      readyForDedupOrPartialUpsert = () -> true;
-    }
-    _isTableReadyToConsumeData = () -> 
readyForDedupOrPartialUpsert.getAsBoolean()
-        && _isServerReadyToConsumeData.getAsBoolean();
     _serverIngestionOomProtectionManager = new 
ServerIngestionOomProtectionManager(
         () -> getCachedTableConfigAndSchema().getLeft(), () -> 
isUpsertEnabled() || isDedupEnabled(),
         _serverIngestionOomProtectionThrottleState);
   }
 
+  /// Checks the assigned history again for each consumer, including 
partitions added after table initialization.
+  /// The consumer thread polls this supplier before acquiring its permit, so 
segment loading is never blocked by it.
+  @VisibleForTesting
+  BooleanSupplier createReadyToConsumeDataSupplier(LLCSegmentName 
llcSegmentName) {
+    if (!isDedupEnabled() && !isPartialUpsertEnabled()) {
+      return _isServerReadyToConsumeData;
+    }
+    return () -> {

Review Comment:
   **Update at `1137a52d`: partly addressed.** `waitUntilReadyToConsume` now 
wakes on a local permit release, which fixes the parallel-release policies: my 
probe measured 0–1 ms from release to ready. Under `DISALLOW_ALWAYS`, though, 
the predecessor releases in `doOffload()` after it has been replaced by an 
immutable segment, before Helix publishes its CURRENTSTATE as ONLINE. So the 
woken recheck still fails and falls back to the 5s timer (probe: 5052/5002/5002 
ms). Could the predicate also accept a locally replaced predecessor once its 
permit is released, or could the release that wakes the waiter also count as 
readiness for the immediate predecessor?
   
   ---
   AI-generated review via IntentLab · Model: claude-opus-5-5.



-- 
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

To unsubscribe, e-mail: [email protected]

For queries about this service, please contact Infrastructure at:
[email protected]


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

Reply via email to