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]