This is an automated email from the ASF dual-hosted git repository.

kharekartik pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/pinot.git


The following commit(s) were added to refs/heads/master by this push:
     new c451c67913 Fix concern with uploaded segments leading to API failure 
(#15409)
c451c67913 is described below

commit c451c67913fc56bfa03f695c6488231a99cb672d
Author: 9aman <35227405+9a...@users.noreply.github.com>
AuthorDate: Mon Mar 31 00:57:45 2025 +0530

    Fix concern with uploaded segments leading to API failure (#15409)
    
    * Fix concern with uploaded segments leading to API failure
    
    * Minor fix
---
 .../api/resources/PinotSegmentRestletResource.java      | 17 ++++++++++++++---
 .../api/resources/PinotSegmentRestletResourceTest.java  |  5 +++++
 2 files changed, 19 insertions(+), 3 deletions(-)

diff --git 
a/pinot-controller/src/main/java/org/apache/pinot/controller/api/resources/PinotSegmentRestletResource.java
 
b/pinot-controller/src/main/java/org/apache/pinot/controller/api/resources/PinotSegmentRestletResource.java
index a317391766..aff32d0ec4 100644
--- 
a/pinot-controller/src/main/java/org/apache/pinot/controller/api/resources/PinotSegmentRestletResource.java
+++ 
b/pinot-controller/src/main/java/org/apache/pinot/controller/api/resources/PinotSegmentRestletResource.java
@@ -1274,11 +1274,19 @@ public class PinotSegmentRestletResource {
     Map<Integer, Set<String>> partitionToSegmentsToDelete = new HashMap<>();
 
     for (String segmentName : idealStateSegmentsSet) {
-      LLCSegmentName llcSegmentName = new LLCSegmentName(segmentName);
+      LLCSegmentName llcSegmentName = LLCSegmentName.of(segmentName);
+      if (llcSegmentName == null) {
+        LOGGER.info("Skip segment: {} not in low-level consumer format", 
segmentName);
+        continue;
+      }
       int partitionId = llcSegmentName.getPartitionGroupId();
 
       LLCSegmentName oldestSegment = partitionToOldestSegment.get(partitionId);
-      if (oldestSegment != null && oldestSegment.getSequenceNumber() <= 
llcSegmentName.getSequenceNumber()) {
+      if (oldestSegment == null) {
+        continue;
+      }
+
+      if (oldestSegment.getSequenceNumber() <= 
llcSegmentName.getSequenceNumber()) {
         partitionToSegmentsToDelete
             .computeIfAbsent(partitionId, k -> new HashSet<>())
             .add(segmentName);
@@ -1300,7 +1308,10 @@ public class PinotSegmentRestletResource {
 
     for (String segment : segments) {
       LLCSegmentName llcSegmentName = LLCSegmentName.of(segment);
-      Preconditions.checkState(llcSegmentName != null, "Invalid LLC segment: " 
+ segment);
+      if (llcSegmentName == null) {
+        LOGGER.warn("Skip segment: {} not in low-level consumer format", 
segment);
+        continue;
+      }
 
       // ignore segments that are not present in the ideal state
       if (!idealStateSegmentsSet.contains(segment)) {
diff --git 
a/pinot-controller/src/test/java/org/apache/pinot/controller/api/resources/PinotSegmentRestletResourceTest.java
 
b/pinot-controller/src/test/java/org/apache/pinot/controller/api/resources/PinotSegmentRestletResourceTest.java
index a54cb3d884..d7350a17ed 100644
--- 
a/pinot-controller/src/test/java/org/apache/pinot/controller/api/resources/PinotSegmentRestletResourceTest.java
+++ 
b/pinot-controller/src/test/java/org/apache/pinot/controller/api/resources/PinotSegmentRestletResourceTest.java
@@ -110,6 +110,11 @@ public class PinotSegmentRestletResourceTest {
       segmentsToInstanceState.put(segment, null);
     }
 
+    // Add segments for partition 2. None of the segments of this partition 
should be deleted.
+    for (String segment : getSegmentForPartition(tableName, 2, 0, 10, 
currentTime)) {
+      segmentsToInstanceState.put(segment, null);
+    }
+
     // Mock response for fetching segment to instance state map
     when(idealState.getRecord()).thenReturn(znRecord);
     when(znRecord.getMapFields()).thenReturn(segmentsToInstanceState);


---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscr...@pinot.apache.org
For additional commands, e-mail: commits-h...@pinot.apache.org

Reply via email to