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 d476393215 [#8195] fix(flink-jdbc): validate required 'jdbc-url' in
toFlinkCatalogProperties to prevent NPE (#8263)
d476393215 is described below
commit d476393215e0f0fa5cbb10c4deec2f9916360cd3
Author: Minji Ryu <[email protected]>
AuthorDate: Mon Aug 25 18:56:04 2025 +0900
[#8195] fix(flink-jdbc): validate required 'jdbc-url' in
toFlinkCatalogProperties to prevent NPE (#8263)
### What changes were proposed in this pull request?
- Validate required property GRAVITINO_JDBC_URL in
JdbcPropertiesConverter#toFlinkCatalogProperties to prevent NPE.
- Throw IllegalArgumentException with a clear message when jdbc-url is
missing or blank, instead of letting an NPE occur.
- `Tests` : add the test `testToJdbcCatalogPropertiesWithoutUrl()` in
AbstractJdbcPropertiesConverterTestSuite
### Why are the changes needed?
- When jdbc-url is missing, the current implementation can throw a
NullPointerException during URL processing. Failing fast with a
meaningful validation error improves debuggability and avoids leaking
internal details.
Fix: #8195
### Does this PR introduce *any* user-facing change?
- APIs / property keys: No changes.
- Behavior: If jdbc-url is missing, the code now throws
IllegalArgumentException with a descriptive message (previously resulted
in an NPE).
### How was this patch tested?
Local runs:
```
./gradlew spotlessApply
./gradlew test -PskipITs
```
---------
Co-authored-by: Justin Mclean <[email protected]>
---
.../flink/connector/jdbc/JdbcPropertiesConverter.java | 6 ++++++
.../jdbc/AbstractJdbcPropertiesConverterTestSuite.java | 15 +++++++++++++++
2 files changed, 21 insertions(+)
diff --git
a/flink-connector/flink/src/main/java/org/apache/gravitino/flink/connector/jdbc/JdbcPropertiesConverter.java
b/flink-connector/flink/src/main/java/org/apache/gravitino/flink/connector/jdbc/JdbcPropertiesConverter.java
index 45b999ffde..b46d2cc1bf 100644
---
a/flink-connector/flink/src/main/java/org/apache/gravitino/flink/connector/jdbc/JdbcPropertiesConverter.java
+++
b/flink-connector/flink/src/main/java/org/apache/gravitino/flink/connector/jdbc/JdbcPropertiesConverter.java
@@ -48,6 +48,12 @@ public abstract class JdbcPropertiesConverter implements
PropertiesConverter {
Map<String, String> flinkCatalogProperties =
PropertiesConverter.super.toFlinkCatalogProperties(gravitinoProperties);
String gravitinoJdbcUrl =
gravitinoProperties.get(JdbcPropertiesConstants.GRAVITINO_JDBC_URL);
+ Preconditions.checkArgument(
+ gravitinoJdbcUrl != null,
+ "Cannot create catalog properties: missing '"
+ + JdbcPropertiesConstants.GRAVITINO_JDBC_URL
+ + "'.");
+
// The URL in FlinkJdbcCatalog does not support database and other
parameters.
flinkCatalogProperties.put(
JdbcPropertiesConstants.FLINK_JDBC_URL,
getBaseUrlFromJdbcUrl(gravitinoJdbcUrl));
diff --git
a/flink-connector/flink/src/test/java/org/apache/gravitino/flink/connector/jdbc/AbstractJdbcPropertiesConverterTestSuite.java
b/flink-connector/flink/src/test/java/org/apache/gravitino/flink/connector/jdbc/AbstractJdbcPropertiesConverterTestSuite.java
index 80f5886461..d89fbf5401 100644
---
a/flink-connector/flink/src/test/java/org/apache/gravitino/flink/connector/jdbc/AbstractJdbcPropertiesConverterTestSuite.java
+++
b/flink-connector/flink/src/test/java/org/apache/gravitino/flink/connector/jdbc/AbstractJdbcPropertiesConverterTestSuite.java
@@ -153,4 +153,19 @@ public abstract class
AbstractJdbcPropertiesConverterTestSuite {
Assertions.assertEquals(
testDriver,
properties.get(JdbcPropertiesConstants.GRAVITINO_JDBC_DRIVER));
}
+
+ @Test
+ public void testToJdbcCatalogPropertiesWithoutUrl() {
+ Map<String, String> catalogPropertiesWithoutUrl = new
HashMap<>(catalogProperties);
+
catalogPropertiesWithoutUrl.remove(JdbcPropertiesConstants.GRAVITINO_JDBC_URL);
+
+ IllegalArgumentException ex =
+ Assertions.assertThrows(
+ IllegalArgumentException.class,
+ () ->
+ getConverter(catalogPropertiesWithoutUrl)
+ .toFlinkCatalogProperties(catalogPropertiesWithoutUrl));
+
+
Assertions.assertTrue(ex.getMessage().contains(JdbcPropertiesConstants.GRAVITINO_JDBC_URL));
+ }
}