raghavyadav01 commented on code in PR #19053:
URL: https://github.com/apache/pinot/pull/19053#discussion_r3670407894


##########
pinot-core/src/main/java/org/apache/pinot/core/data/manager/BaseTableDataManager.java:
##########
@@ -1248,6 +1248,10 @@ public SegmentDataManager registerSegment(String 
segmentName, SegmentDataManager
       oldSegmentDataManager = _segmentDataManagerMap.put(segmentName, 
segmentDataManager);
     }
     _recentlyDeletedSegments.invalidate(segmentName);
+    // Fire the post-registration lifecycle hook now that the segment is 
swapped into the serving set
+    for (IndexSegment segment : segmentDataManager.getReportableSegments()) {
+      segment.onSegmentAdded();

Review Comment:
   The segment is swapped into `_segmentDataManagerMap` inside the lock above, 
but the hook fires here after the lock is released — so queries can already 
reach the segment before `onSegmentAdded()` runs, and a concurrent 
`replaceSegment`/`unregisterSegment` could drop the refcount to 0 and 
`destroy()` (closing the directory) in that gap, leaving the hook to run 
against an already-closed directory. Best-effort catch will swallow the 
resulting error, but should we be worried about this visibility/use-after-close 
window for hooks that do real work?



-- 
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