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

jmclean pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/gravitino.git


The following commit(s) were added to refs/heads/main by this push:
     new 6d283f75df  [#8341]  improvement(config): ake sure ConfigBuilder 
params with leading/trailing spaces are parsed correctly (#8359)
6d283f75df is described below

commit 6d283f75df7434aa5b6a918a1d03ed10506afd19
Author: MaAng <[email protected]>
AuthorDate: Sat Aug 30 10:25:07 2025 +0800

     [#8341]  improvement(config): ake sure ConfigBuilder params with 
leading/trailing spaces are parsed correctly (#8359)
    
    ### What changes were proposed in this pull request?
    Add trim() method on the value string in valudeConvertor in
    ConfigBuilder.java.
    
    ### Why are the changes needed?
    
    Params with spaces can be parsed correctly. Otherwise it will throw
    exceptoin.
    
    Fix: #8341
    
    ### Does this PR introduce _any_ user-facing change?
    NO
    
    ### How was this patch tested?
    
    Unit test added.
---
 .../org/apache/gravitino/config/ConfigBuilder.java | 16 +++++++--------
 .../test/java/org/apache/gravitino/TestConfig.java | 23 ++++++++++++++++++++++
 2 files changed, 31 insertions(+), 8 deletions(-)

diff --git 
a/common/src/main/java/org/apache/gravitino/config/ConfigBuilder.java 
b/common/src/main/java/org/apache/gravitino/config/ConfigBuilder.java
index d42f445e10..9d01b9f597 100644
--- a/common/src/main/java/org/apache/gravitino/config/ConfigBuilder.java
+++ b/common/src/main/java/org/apache/gravitino/config/ConfigBuilder.java
@@ -130,10 +130,10 @@ public class ConfigBuilder {
         new ConfigEntry<>(key, version, doc, alternatives, isPublic, 
isDeprecated);
     Function<String, Integer> func =
         s -> {
-          if (s == null || s.isEmpty()) {
+          if (s == null || s.trim().isEmpty()) {
             return null;
           } else {
-            return Integer.parseInt(s);
+            return Integer.parseInt(s.trim());
           }
         };
     conf.setValueConverter(func);
@@ -155,10 +155,10 @@ public class ConfigBuilder {
         new ConfigEntry<>(key, version, doc, alternatives, isPublic, 
isDeprecated);
     Function<String, Long> func =
         s -> {
-          if (s == null || s.isEmpty()) {
+          if (s == null || s.trim().isEmpty()) {
             return null;
           } else {
-            return Long.parseLong(s);
+            return Long.parseLong(s.trim());
           }
         };
     conf.setValueConverter(func);
@@ -180,10 +180,10 @@ public class ConfigBuilder {
         new ConfigEntry<>(key, version, doc, alternatives, isPublic, 
isDeprecated);
     Function<String, Double> func =
         s -> {
-          if (s == null || s.isEmpty()) {
+          if (s == null || s.trim().isEmpty()) {
             return null;
           } else {
-            return Double.parseDouble(s);
+            return Double.parseDouble(s.trim());
           }
         };
     conf.setValueConverter(func);
@@ -205,10 +205,10 @@ public class ConfigBuilder {
         new ConfigEntry<>(key, version, doc, alternatives, isPublic, 
isDeprecated);
     Function<String, Boolean> func =
         s -> {
-          if (s == null || s.isEmpty()) {
+          if (s == null || s.trim().isEmpty()) {
             return null;
           } else {
-            return Boolean.parseBoolean(s);
+            return Boolean.parseBoolean(s.trim());
           }
         };
     conf.setValueConverter(func);
diff --git a/core/src/test/java/org/apache/gravitino/TestConfig.java 
b/core/src/test/java/org/apache/gravitino/TestConfig.java
index 36d548ce2e..560e7f05d3 100644
--- a/core/src/test/java/org/apache/gravitino/TestConfig.java
+++ b/core/src/test/java/org/apache/gravitino/TestConfig.java
@@ -21,6 +21,8 @@ package org.apache.gravitino;
 import java.io.File;
 import java.io.FileOutputStream;
 import java.nio.file.Files;
+import java.util.HashMap;
+import java.util.Map;
 import java.util.NoSuchElementException;
 import java.util.Optional;
 import java.util.Properties;
@@ -150,4 +152,25 @@ public class TestConfig {
     intValue = config.get(intConf);
     Assertions.assertEquals(Optional.of(2), intValue);
   }
+
+  @Test
+  public void testTrimmedValues() {
+    Map<String, String> props = new HashMap<>();
+
+    props.put("int.key", " 1 ");
+    ConfigEntry<Integer> intEntry = new ConfigBuilder("int.key").intConf();
+    Assertions.assertEquals(1, intEntry.readFrom(props));
+
+    props.put("long.key", " 2 ");
+    ConfigEntry<Long> longEntry = new ConfigBuilder("long.key").longConf();
+    Assertions.assertEquals(2L, longEntry.readFrom(props));
+
+    props.put("double.key", " 3.5 ");
+    ConfigEntry<Double> doubleEntry = new 
ConfigBuilder("double.key").doubleConf();
+    Assertions.assertEquals(3.5d, doubleEntry.readFrom(props));
+
+    props.put("boolean.key", " true ");
+    ConfigEntry<Boolean> boolEntry = new 
ConfigBuilder("boolean.key").booleanConf();
+    Assertions.assertTrue(boolEntry.readFrom(props));
+  }
 }

Reply via email to