xiangfu0 commented on code in PR #19053:
URL: https://github.com/apache/pinot/pull/19053#discussion_r3635095827
##########
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:
[MAJOR] Upsert replacement with a consistency mode other than `NONE`
registers the same new segment first through `DuoSegmentDataManager` and then
directly. Since the duo manager's default `getReportableSegments()` returns its
primary segment, this calls `onSegmentAdded()` twice for the same
`SegmentDirectory`. The hook is intended for lock acquisition but has no
idempotence contract, so this can double-acquire or leak lock state. Fire the
callback only when the segment first enters the serving set, or guard it once
per segment, and add a consistency-mode replacement regression test.
--
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]