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 <[email protected]>
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;
+ }
+}