This is an automated email from the ASF dual-hosted git repository.
jshao 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 9b0680cd4a [#6646] fix(iceberg): Delete the null value check for user
and password in Iceberg JDBC catalog (#6691)
9b0680cd4a is described below
commit 9b0680cd4ac696b67211e7127d8cdc9b67e121a0
Author: Xiaojian Sun <[email protected]>
AuthorDate: Thu Mar 20 17:16:35 2025 +0800
[#6646] fix(iceberg): Delete the null value check for user and password in
Iceberg JDBC catalog (#6691)
### What changes were proposed in this pull request?
Remove validation from Gravitino based on validation during iceberg
catalog initialization
### Why are the changes needed?
Fix: #6646
### Does this PR introduce _any_ user-facing change?
N/A
### How was this patch tested?
N/A
---
.../integration/test/TestMultipleJDBCLoad.java | 32 ++++++++++++++++++++--
docs/iceberg-rest-service.md | 25 +++++++++--------
.../iceberg/common/utils/IcebergCatalogUtil.java | 7 -----
3 files changed, 43 insertions(+), 21 deletions(-)
diff --git
a/catalogs/catalog-lakehouse-iceberg/src/test/java/org/apache/gravitino/catalog/lakehouse/iceberg/integration/test/TestMultipleJDBCLoad.java
b/catalogs/catalog-lakehouse-iceberg/src/test/java/org/apache/gravitino/catalog/lakehouse/iceberg/integration/test/TestMultipleJDBCLoad.java
index 40e437a0f2..75a7a8be4a 100644
---
a/catalogs/catalog-lakehouse-iceberg/src/test/java/org/apache/gravitino/catalog/lakehouse/iceberg/integration/test/TestMultipleJDBCLoad.java
+++
b/catalogs/catalog-lakehouse-iceberg/src/test/java/org/apache/gravitino/catalog/lakehouse/iceberg/integration/test/TestMultipleJDBCLoad.java
@@ -53,8 +53,6 @@ public class TestMultipleJDBCLoad extends BaseIT {
private static MySQLContainer mySQLContainer;
private static PostgreSQLContainer postgreSQLContainer;
- public static final String DEFAULT_POSTGRES_IMAGE = "postgres:13";
-
@BeforeAll
public void startup() throws IOException {
containerSuite.startMySQLContainer(TEST_DB_NAME);
@@ -63,6 +61,36 @@ public class TestMultipleJDBCLoad extends BaseIT {
postgreSQLContainer = containerSuite.getPostgreSQLContainer();
}
+ @Test
+ public void testJdbcCatalogCreationWithUrlCredentials() throws Exception {
+ String metalakeName = RandomNameUtils.genRandomName("it_metalake");
+ GravitinoMetalake metalake =
+ client.createMetalake(metalakeName, "comment", Collections.emptyMap());
+
+ Map<String, String> icebergMysqlConf = Maps.newHashMap();
+
+ String jdbcUrl =
+ mySQLContainer.getJdbcUrl(TEST_DB_NAME)
+ + "?user="
+ + mySQLContainer.getUsername()
+ + "&password="
+ + mySQLContainer.getPassword();
+
+ icebergMysqlConf.put(IcebergConfig.CATALOG_URI.getKey(), jdbcUrl);
+ icebergMysqlConf.put(IcebergConfig.CATALOG_BACKEND.getKey(), "jdbc");
+ icebergMysqlConf.put(IcebergConfig.CATALOG_WAREHOUSE.getKey(),
"file:///tmp/iceberg-jdbc");
+ icebergMysqlConf.put(
+ IcebergConfig.JDBC_DRIVER.getKey(),
mySQLContainer.getDriverClassName(TEST_DB_NAME));
+ String mysqlCatalogName =
RandomNameUtils.genRandomName("it_iceberg_mysql");
+ metalake.testConnection(
+ mysqlCatalogName,
+ Catalog.Type.RELATIONAL,
+ "lakehouse-iceberg",
+ "comment",
+ icebergMysqlConf);
+ Assertions.assertTrue(true);
+ }
+
@Test
public void testCreateMultipleJdbcInIceberg() throws URISyntaxException,
SQLException {
String metalakeName = RandomNameUtils.genRandomName("it_metalake");
diff --git a/docs/iceberg-rest-service.md b/docs/iceberg-rest-service.md
index 76d48b24e6..07ceeac782 100644
--- a/docs/iceberg-rest-service.md
+++ b/docs/iceberg-rest-service.md
@@ -85,7 +85,7 @@ Gravitino Iceberg REST server supports OAuth2 and HTTPS,
please refer to [Securi
#### Backend authentication
-For JDBC backend, you can use the `gravitino.iceberg-rest.jdbc.user` and
`gravitino.iceberg-rest.jdbc.password` to authenticate the JDBC connection. For
Hive backend, you can use the `gravitino.iceberg-rest.authentication.type` to
specify the authentication type, and use the
`gravitino.iceberg-rest.authentication.kerberos.principal` and
`gravitino.iceberg-rest.authentication.kerberos.keytab-uri` to authenticate the
Kerberos connection.
+For JDBC backend, you can use the `gravitino.iceberg-rest.jdbc-user` and
`gravitino.iceberg-rest.jdbc-password` to authenticate the JDBC connection. For
Hive backend, you can use the `gravitino.iceberg-rest.authentication.type` to
specify the authentication type, and use the
`gravitino.iceberg-rest.authentication.kerberos.principal` and
`gravitino.iceberg-rest.authentication.kerberos.keytab-uri` to authenticate the
Kerberos connection.
The detailed configuration items are as follows:
| Configuration item |
Description
| Default value | Required
[...]
@@ -141,7 +141,7 @@ Additionally, Iceberg doesn't provide Iceberg Aliyun bundle
jar which contains O
Please place the above jars in the classpath of Iceberg REST server, please
refer to [server management](#server-management) for classpath details.
:::info
-Please set the `gravitino.iceberg-rest.warehouse` parameter to
`oss://{bucket_name}/${prefix_name}`.
+Please set the `gravitino.iceberg-rest.warehouse` parameter to
`oss://{bucket_name}/${prefix_name}`.
:::
#### GCS
@@ -217,16 +217,16 @@ The Gravitino Iceberg REST catalog service uses the
memory catalog backend by de
#### JDBC backend configuration
-| Configuration item |
Description
| Default value
| Required | Since Version |
-|---------------------------------------------------------------------------|---------------------------------------------------------------------------------------------------------------------------------------|--------------------------|----------|---------------|
-| `gravitino.iceberg-rest.catalog-backend` |
The Catalog backend of the Gravitino Iceberg REST catalog service. Use the
value **`jdbc`** for a JDBC catalog. | `memory`
| Yes | 0.2.0 |
-| `gravitino.iceberg-rest.uri` |
The JDBC connection address, such as `jdbc:postgresql://127.0.0.1:5432` for
Postgres, or `jdbc:mysql://127.0.0.1:3306/` for mysql. | (none)
| Yes | 0.2.0 |
-| `gravitino.iceberg-rest.warehouse ` |
The warehouse directory of JDBC catalog. Set the HDFS prefix if using HDFS,
such as `hdfs://127.0.0.1:9000/user/hive/warehouse-jdbc` | (none)
| Yes | 0.2.0 |
-| `gravitino.iceberg-rest.catalog-backend-name` |
The catalog name passed to underlying Iceberg catalog backend. Catalog name in
JDBC backend is used to isolate namespace and tables. | `jdbc` for JDBC
backend | No | 0.5.2 |
-| `gravitino.iceberg-rest.jdbc.user` |
The username of the JDBC connection.
| (none)
| Yes | 0.2.0 |
-| `gravitino.iceberg-rest.jdbc.password` |
The password of the JDBC connection.
| (none)
| Yes | 0.2.0 |
-| `gravitino.iceberg-rest.jdbc-initialize` |
Whether to initialize the meta tables when creating the JDBC catalog.
| `true`
| No | 0.2.0 |
-| `gravitino.iceberg-rest.jdbc-driver` |
`com.mysql.jdbc.Driver` or `com.mysql.cj.jdbc.Driver` for MySQL,
`org.postgresql.Driver` for PostgreSQL. | (none)
| Yes | 0.3.0 |
+| Configuration item | Description
| Default value | Required | Since Version |
+|-----------------------------------------------|---------------------------------------------------------------------------------------------------------------------------------------|--------------------------|----------|---------------|
+| `gravitino.iceberg-rest.catalog-backend` | The Catalog backend of the
Gravitino Iceberg REST catalog service. Use the value **`jdbc`** for a JDBC
catalog. | `memory` | Yes | 0.2.0
|
+| `gravitino.iceberg-rest.uri` | The JDBC connection address,
such as `jdbc:postgresql://127.0.0.1:5432` for Postgres, or
`jdbc:mysql://127.0.0.1:3306/` for mysql. | (none) | Yes
| 0.2.0 |
+| `gravitino.iceberg-rest.warehouse ` | The warehouse directory of
JDBC catalog. Set the HDFS prefix if using HDFS, such as
`hdfs://127.0.0.1:9000/user/hive/warehouse-jdbc` | (none) |
Yes | 0.2.0 |
+| `gravitino.iceberg-rest.catalog-backend-name` | The catalog name passed to
underlying Iceberg catalog backend. Catalog name in JDBC backend is used to
isolate namespace and tables. | `jdbc` for JDBC backend | No | 0.5.2
|
+| `gravitino.iceberg-rest.jdbc-user` | The username of the JDBC
connection.
| (none) | No | 0.2.0
|
+| `gravitino.iceberg-rest.jdbc-password` | The password of the JDBC
connection.
| (none) | No | 0.2.0
|
+| `gravitino.iceberg-rest.jdbc-initialize` | Whether to initialize the
meta tables when creating the JDBC catalog.
| `true` | No | 0.2.0
|
+| `gravitino.iceberg-rest.jdbc-driver` | `com.mysql.jdbc.Driver` or
`com.mysql.cj.jdbc.Driver` for MySQL, `org.postgresql.Driver` for PostgreSQL.
| (none) | Yes | 0.3.0
|
If you have a JDBC Iceberg catalog prior, you must set `catalog-backend-name`
to keep consistent with your Jdbc Iceberg catalog name to operate the prior
namespace and tables.
@@ -468,3 +468,4 @@ sh ./dev/docker/build-docker.sh --platform linux/arm64
--type iceberg-rest-serve
```
You could try Spark with Gravitino REST catalog service in our
[playground](./how-to-use-the-playground.md#using-apache-iceberg-rest-service).
+
diff --git
a/iceberg/iceberg-common/src/main/java/org/apache/gravitino/iceberg/common/utils/IcebergCatalogUtil.java
b/iceberg/iceberg-common/src/main/java/org/apache/gravitino/iceberg/common/utils/IcebergCatalogUtil.java
index 77f8b9a22b..fe33948606 100644
---
a/iceberg/iceberg-common/src/main/java/org/apache/gravitino/iceberg/common/utils/IcebergCatalogUtil.java
+++
b/iceberg/iceberg-common/src/main/java/org/apache/gravitino/iceberg/common/utils/IcebergCatalogUtil.java
@@ -22,7 +22,6 @@ import static
org.apache.hadoop.fs.CommonConfigurationKeysPublic.HADOOP_SECURITY
import static
org.apache.hadoop.fs.CommonConfigurationKeysPublic.HADOOP_SECURITY_AUTHORIZATION;
import com.google.common.annotations.VisibleForTesting;
-import com.google.common.base.Preconditions;
import java.io.File;
import java.io.IOException;
import java.sql.SQLException;
@@ -123,12 +122,6 @@ public class IcebergCatalogUtil {
String icebergCatalogName = icebergConfig.getCatalogBackendName();
Map<String, String> properties =
icebergConfig.getIcebergCatalogProperties();
- Preconditions.checkNotNull(
- properties.get(IcebergConstants.ICEBERG_JDBC_USER),
- IcebergConstants.ICEBERG_JDBC_USER + " is null");
- Preconditions.checkNotNull(
- properties.get(IcebergConstants.ICEBERG_JDBC_PASSWORD),
- IcebergConstants.ICEBERG_JDBC_PASSWORD + " is null");
try {
// Load the jdbc driver
Class.forName(driverClassName);