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

jackie 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 529fffbb88 Fixed nullPointerException in InputFileSegmentNameGenerator 
when pattern contains optional part (#13532)
529fffbb88 is described below

commit 529fffbb888c1d3e7bf7871ce7803c7b18b06e6d
Author: jhyao <[email protected]>
AuthorDate: Thu Jul 4 02:09:04 2024 +0800

    Fixed nullPointerException in InputFileSegmentNameGenerator when pattern 
contains optional part (#13532)
---
 .../name/InputFileSegmentNameGenerator.java        |  6 ++++-
 .../name/InputFileSegmentNameGeneratorTest.java    | 28 +++++++++++++++-------
 2 files changed, 25 insertions(+), 9 deletions(-)

diff --git 
a/pinot-segment-spi/src/main/java/org/apache/pinot/segment/spi/creator/name/InputFileSegmentNameGenerator.java
 
b/pinot-segment-spi/src/main/java/org/apache/pinot/segment/spi/creator/name/InputFileSegmentNameGenerator.java
index 1d70383237..3f7e2c387d 100644
--- 
a/pinot-segment-spi/src/main/java/org/apache/pinot/segment/spi/creator/name/InputFileSegmentNameGenerator.java
+++ 
b/pinot-segment-spi/src/main/java/org/apache/pinot/segment/spi/creator/name/InputFileSegmentNameGenerator.java
@@ -86,7 +86,11 @@ public class InputFileSegmentNameGenerator implements 
SegmentNameGenerator {
     } else {
       segmentName = _segmentNameTemplate;
       for (int i = 1; i <= m.groupCount(); i++) {
-        segmentName = segmentName.replace(String.format(PARAMETER_TEMPLATE, 
i), m.group(i));
+        String value = m.group(i);
+        if (value == null) {
+          value = "";
+        }
+        segmentName = segmentName.replace(String.format(PARAMETER_TEMPLATE, 
i), value);
       }
     }
     return _appendUUIDToSegmentName ? JOINER.join(segmentName, 
UUID.randomUUID()) : segmentName;
diff --git 
a/pinot-segment-spi/src/test/java/org/apache/pinot/segment/spi/creator/name/InputFileSegmentNameGeneratorTest.java
 
b/pinot-segment-spi/src/test/java/org/apache/pinot/segment/spi/creator/name/InputFileSegmentNameGeneratorTest.java
index 7ce23d83f0..11836de846 100644
--- 
a/pinot-segment-spi/src/test/java/org/apache/pinot/segment/spi/creator/name/InputFileSegmentNameGeneratorTest.java
+++ 
b/pinot-segment-spi/src/test/java/org/apache/pinot/segment/spi/creator/name/InputFileSegmentNameGeneratorTest.java
@@ -29,25 +29,37 @@ public class InputFileSegmentNameGeneratorTest {
 
   @Test
   public void testWithInvalidPath() {
-    validateName("/my/path/to/segmentname.tsv", "my_path_to_segmentname_tsv");
-    validateName("hdfs:///my/path/to/segmentname.tsv", 
"my_path_to_segmentname_tsv");
+    validateCSVFileName("/my/path/to/segmentname.tsv", 
"my_path_to_segmentname_tsv");
+    validateCSVFileName("hdfs:///my/path/to/segmentname.tsv", 
"my_path_to_segmentname_tsv");
   }
 
   @Test
   public void testWithHDFSPath() {
-    validateName("hdfs:///my/path/to/segmentname.csv", "segmentname");
-    validateName("hdfs:/server:9000//my/path/to/segmentname.csv", 
"segmentname");
+    validateCSVFileName("hdfs:///my/path/to/segmentname.csv", "segmentname");
+    validateCSVFileName("hdfs:/server:9000//my/path/to/segmentname.csv", 
"segmentname");
   }
 
   @Test
   public void testWithFilePath() {
-    validateName("file:///my/path/to/segmentname.csv", "segmentname");
+    validateCSVFileName("file:///my/path/to/segmentname.csv", "segmentname");
   }
 
-  private void validateName(String inputFileUriAsStr, String segmentName) {
+  @Test
+  public void testWithOptionalPattern() {
+    String pattern = ".+/(\\w+)(\\.csv)?";
+    String template = "${filePathPattern:\\1}";
+    validateName("file:///my/path/to/segmentname.csv", "segmentname", pattern, 
template);
+    validateName("file:///my/path/to/segmentname", "segmentname", pattern, 
template);
+  }
+
+  private void validateCSVFileName(String inputFileUriAsStr, String 
segmentName) {
+    String pattern = ".+/(.+)\\.csv";
+    String template = "${filePathPattern:\\1}";
+    validateName(inputFileUriAsStr, segmentName, pattern, template);
+  }
+
+  private void validateName(String inputFileUriAsStr, String segmentName, 
String pattern, String template) {
     try {
-      String pattern = ".+/(.+)\\.csv";
-      String template = "${filePathPattern:\\1}";
       SegmentNameGenerator segmentNameGenerator =
           new InputFileSegmentNameGenerator(pattern, template, 
inputFileUriAsStr);
       
assertEquals(segmentNameGenerator.generateSegmentName(INVALID_SEQUENCE_ID, 
null, null), segmentName);


---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to