This is an automated email from the ASF dual-hosted git repository. singhpk234 pushed a commit to branch main in repository https://gitbox.apache.org/repos/asf/polaris.git
The following commit(s) were added to refs/heads/main by this push: new 81798f106 Production readiness for Persistence (#1707) 81798f106 is described below commit 81798f106643fa24f210bace0f5c0b81ab023b0e Author: Prashant Singh <35593236+singhpk...@users.noreply.github.com> AuthorDate: Thu May 29 19:12:21 2025 -0700 Production readiness for Persistence (#1707) Production readiness for Persistence (#1707) --- .../EclipseLinkProductionReadinessChecks.java | 11 ++++- .../persistence/relational-jdbc/build.gradle.kts | 1 - .../jdbc/JdbcMetaStoreManagerFactory.java | 13 ++++-- .../RelationalJdbcProductionReadinessChecks.java | 53 ++++++++++++++++++++++ 4 files changed, 70 insertions(+), 8 deletions(-) diff --git a/extension/persistence/eclipselink/src/main/java/org/apache/polaris/extension/persistence/impl/eclipselink/EclipseLinkProductionReadinessChecks.java b/extension/persistence/eclipselink/src/main/java/org/apache/polaris/extension/persistence/impl/eclipselink/EclipseLinkProductionReadinessChecks.java index be0ae5b72..000f5ee6c 100644 --- a/extension/persistence/eclipselink/src/main/java/org/apache/polaris/extension/persistence/impl/eclipselink/EclipseLinkProductionReadinessChecks.java +++ b/extension/persistence/eclipselink/src/main/java/org/apache/polaris/extension/persistence/impl/eclipselink/EclipseLinkProductionReadinessChecks.java @@ -26,17 +26,24 @@ import java.io.IOException; import java.nio.file.Path; import org.apache.polaris.core.config.ProductionReadinessCheck; import org.apache.polaris.core.config.ProductionReadinessCheck.Error; +import org.apache.polaris.core.persistence.MetaStoreManagerFactory; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @ApplicationScoped public class EclipseLinkProductionReadinessChecks { - private static final Logger LOGGER = LoggerFactory.getLogger(EclipseLinkProductionReadinessChecks.class); @Produces - public ProductionReadinessCheck checkJdbcUrl(EclipseLinkConfiguration eclipseLinkConfiguration) { + public ProductionReadinessCheck checkEclipseLink( + MetaStoreManagerFactory metaStoreManagerFactory, + EclipseLinkConfiguration eclipseLinkConfiguration) { + // This check should only be applicable when persistence uses EclipseLink. + if (!(metaStoreManagerFactory instanceof EclipseLinkPolarisMetaStoreManagerFactory)) { + return ProductionReadinessCheck.OK; + } + try { var confFile = eclipseLinkConfiguration.configurationFile().map(Path::toString).orElse(null); var persistenceUnitName = diff --git a/extension/persistence/relational-jdbc/build.gradle.kts b/extension/persistence/relational-jdbc/build.gradle.kts index a8a61f60c..b38baf9df 100644 --- a/extension/persistence/relational-jdbc/build.gradle.kts +++ b/extension/persistence/relational-jdbc/build.gradle.kts @@ -36,7 +36,6 @@ dependencies { implementation(libs.smallrye.common.annotation) // @Identifier testImplementation(libs.mockito.junit.jupiter) - testImplementation(libs.h2) testImplementation(testFixtures(project(":polaris-core"))) } diff --git a/extension/persistence/relational-jdbc/src/main/java/org/apache/polaris/extension/persistence/relational/jdbc/JdbcMetaStoreManagerFactory.java b/extension/persistence/relational-jdbc/src/main/java/org/apache/polaris/extension/persistence/relational/jdbc/JdbcMetaStoreManagerFactory.java index f3d028eb9..e36395d84 100644 --- a/extension/persistence/relational-jdbc/src/main/java/org/apache/polaris/extension/persistence/relational/jdbc/JdbcMetaStoreManagerFactory.java +++ b/extension/persistence/relational-jdbc/src/main/java/org/apache/polaris/extension/persistence/relational/jdbc/JdbcMetaStoreManagerFactory.java @@ -108,16 +108,19 @@ public class JdbcMetaStoreManagerFactory implements MetaStoreManagerFactory { metaStoreManagerMap.put(realmContext.getRealmIdentifier(), metaStoreManager); } + protected DatabaseType getDatabaseType() throws SQLException { + try (Connection connection = dataSource.get().getConnection()) { + String productName = connection.getMetaData().getDatabaseProductName(); + return DatabaseType.fromDisplayName(productName); + } + } + private DatasourceOperations getDatasourceOperations(boolean isBootstrap) { DatasourceOperations databaseOperations = new DatasourceOperations(dataSource.get(), relationalJdbcConfiguration); if (isBootstrap) { try { - DatabaseType databaseType; - try (Connection connection = dataSource.get().getConnection()) { - String productName = connection.getMetaData().getDatabaseProductName(); - databaseType = DatabaseType.fromDisplayName(productName); - } + DatabaseType databaseType = getDatabaseType(); databaseOperations.executeScript( String.format("%s/schema-v1.sql", databaseType.getDisplayName())); } catch (SQLException e) { diff --git a/extension/persistence/relational-jdbc/src/main/java/org/apache/polaris/extension/persistence/relational/jdbc/RelationalJdbcProductionReadinessChecks.java b/extension/persistence/relational-jdbc/src/main/java/org/apache/polaris/extension/persistence/relational/jdbc/RelationalJdbcProductionReadinessChecks.java new file mode 100644 index 000000000..581c0a0a6 --- /dev/null +++ b/extension/persistence/relational-jdbc/src/main/java/org/apache/polaris/extension/persistence/relational/jdbc/RelationalJdbcProductionReadinessChecks.java @@ -0,0 +1,53 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +package org.apache.polaris.extension.persistence.relational.jdbc; + +import jakarta.enterprise.context.ApplicationScoped; +import jakarta.enterprise.inject.Produces; +import java.sql.SQLException; +import org.apache.polaris.core.config.ProductionReadinessCheck; +import org.apache.polaris.core.persistence.MetaStoreManagerFactory; + +@ApplicationScoped +public class RelationalJdbcProductionReadinessChecks { + @Produces + public ProductionReadinessCheck checkRelationalJdbc( + MetaStoreManagerFactory metaStoreManagerFactory) { + // This check should only be applicable when persistence uses RelationalJdbc. + if (!(metaStoreManagerFactory + instanceof JdbcMetaStoreManagerFactory jdbcMetaStoreManagerFactory)) { + return ProductionReadinessCheck.OK; + } + + try { + if (jdbcMetaStoreManagerFactory.getDatabaseType().equals(DatabaseType.H2)) { + return ProductionReadinessCheck.of( + ProductionReadinessCheck.Error.of( + "The current persistence (jdbc:h2) is intended for tests only.", + "quarkus.datasource.jdbc.url")); + } + } catch (SQLException e) { + return ProductionReadinessCheck.of( + ProductionReadinessCheck.Error.of( + "Misconfigured JDBC datasource", "quarkus.datasource.jdbc.url")); + } + return ProductionReadinessCheck.OK; + } +}