This is an automated email from the ASF dual-hosted git repository.
yuqi4733 pushed a commit to branch branch-1.0
in repository https://gitbox.apache.org/repos/asf/gravitino.git
The following commit(s) were added to refs/heads/branch-1.0 by this push:
new 324a630bbd [#9136] fix(doris): trim bucket number to prevent
NumberFormatException (#9202)
324a630bbd is described below
commit 324a630bbd56d273b70c6feb1cf5389f3800fc2e
Author: github-actions[bot]
<41898282+github-actions[bot]@users.noreply.github.com>
AuthorDate: Fri Nov 21 17:43:57 2025 +0800
[#9136] fix(doris): trim bucket number to prevent NumberFormatException
(#9202)
### What changes were proposed in this pull request?
- Modified DorisUtils.extractBucketNum to trim the bucket number string
before parsing.
### Why are the changes needed?
- To prevent a NumberFormatException when parsing numeric bucket numbers
that include whitespace. (e.g., " 16 ")
Fix: #9136
### Does this PR introduce _any_ user-facing change?
- No.
### How was this patch tested?
- Verified using the unit test included in the issue
(testExtractBucketNumWithWhitespace()).
- Confirmed all existing tests continue to pass.
Co-authored-by: Kwon Taeheon <[email protected]>
---
.../gravitino/catalog/doris/utils/DorisUtils.java | 6 ++--
.../catalog/doris/utils/TestDorisUtils.java | 35 ++++++++++++++++++++++
2 files changed, 38 insertions(+), 3 deletions(-)
diff --git
a/catalogs/catalog-jdbc-doris/src/main/java/org/apache/gravitino/catalog/doris/utils/DorisUtils.java
b/catalogs/catalog-jdbc-doris/src/main/java/org/apache/gravitino/catalog/doris/utils/DorisUtils.java
index 6d93924416..1f5b01d35e 100644
---
a/catalogs/catalog-jdbc-doris/src/main/java/org/apache/gravitino/catalog/doris/utils/DorisUtils.java
+++
b/catalogs/catalog-jdbc-doris/src/main/java/org/apache/gravitino/catalog/doris/utils/DorisUtils.java
@@ -221,11 +221,11 @@ public final class DorisUtils {
private static int extractBucketNum(Matcher matcher) {
int bucketNum = 1;
- if (matcher.group(5) != null) {
- String bucketValue = matcher.group(5);
+ if (matcher.group(4) != null) {
+ String bucketValue = matcher.group(4).trim();
// Use -1 to indicate auto bucket.
bucketNum =
- bucketValue.trim().toUpperCase().equals("AUTO")
+ bucketValue.toUpperCase().equals("AUTO")
? Distributions.AUTO
: Integer.valueOf(bucketValue);
}
diff --git
a/catalogs/catalog-jdbc-doris/src/test/java/org/apache/gravitino/catalog/doris/utils/TestDorisUtils.java
b/catalogs/catalog-jdbc-doris/src/test/java/org/apache/gravitino/catalog/doris/utils/TestDorisUtils.java
index 43c61c29f0..019231f39d 100644
---
a/catalogs/catalog-jdbc-doris/src/test/java/org/apache/gravitino/catalog/doris/utils/TestDorisUtils.java
+++
b/catalogs/catalog-jdbc-doris/src/test/java/org/apache/gravitino/catalog/doris/utils/TestDorisUtils.java
@@ -191,4 +191,39 @@ public class TestDorisUtils {
DorisUtils.extractDistributionInfoFromSql(createTableSqlWithRandomAuto);
assertEquals(distribution3.number(), -1);
}
+
+ @Test
+ public void testExtractBucketNumFromSql() {
+ String createTableSql =
+ "CREATE TABLE `testTable` (\n`col1` int NOT NULL\n) ENGINE=OLAP\n
DISTRIBUTED BY HASH(`col1`) BUCKETS 8";
+ Distribution distribution =
DorisUtils.extractDistributionInfoFromSql(createTableSql);
+ assertEquals(8, distribution.number());
+
+ String createTableSqlWithoutBucket =
+ "CREATE TABLE `testTable` (\n`col1` int NOT NULL\n) ENGINE=OLAP\n
DISTRIBUTED BY HASH(`col1`)";
+ Distribution distributionDefault =
+ DorisUtils.extractDistributionInfoFromSql(createTableSqlWithoutBucket);
+ assertEquals(1, distributionDefault.number());
+ }
+
+ @Test
+ public void testExtractBucketNumWithWhitespace() {
+ String createTableSqlWithWhitespace =
+ "CREATE TABLE `testTable` (\n`col1` int NOT NULL\n) ENGINE=OLAP\n
DISTRIBUTED BY HASH(`col1`) BUCKETS 16 ";
+ Distribution distribution =
+
DorisUtils.extractDistributionInfoFromSql(createTableSqlWithWhitespace);
+ assertEquals(16, distribution.number());
+
+ String createTableSqlWithAutoWhitespace =
+ "CREATE TABLE `testTable` (\n`col1` int NOT NULL\n) ENGINE=OLAP\n
DISTRIBUTED BY HASH(`col1`) BUCKETS AUTO ";
+ Distribution distributionAuto =
+
DorisUtils.extractDistributionInfoFromSql(createTableSqlWithAutoWhitespace);
+ assertEquals(-1, distributionAuto.number());
+
+ String createTableSqlWithAutoLeadingWhitespace =
+ "CREATE TABLE `testTable` (\n`col1` int NOT NULL\n) ENGINE=OLAP\n
DISTRIBUTED BY HASH(`col1`) BUCKETS AUTO";
+ Distribution distributionAutoLeading =
+
DorisUtils.extractDistributionInfoFromSql(createTableSqlWithAutoLeadingWhitespace);
+ assertEquals(-1, distributionAutoLeading.number());
+ }
}