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]

Reply via email to