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;
+  }
+}

Reply via email to