This is an automated email from the ASF dual-hosted git repository.

blue pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/iceberg.git


The following commit(s) were added to refs/heads/master by this push:
     new 80ba1e1343 Core: Allow injecting client pool in JDBC catalog (#7087)
80ba1e1343 is described below

commit 80ba1e1343708e62d3badc7c2ffc9a5bad3ef982
Author: David Phillips <[email protected]>
AuthorDate: Mon Mar 13 10:27:07 2023 -0700

    Core: Allow injecting client pool in JDBC catalog (#7087)
---
 .../java/org/apache/iceberg/jdbc/JdbcCatalog.java  | 37 +++++++++++++++-------
 1 file changed, 26 insertions(+), 11 deletions(-)

diff --git a/core/src/main/java/org/apache/iceberg/jdbc/JdbcCatalog.java 
b/core/src/main/java/org/apache/iceberg/jdbc/JdbcCatalog.java
index 07018dd83e..89e5f184aa 100644
--- a/core/src/main/java/org/apache/iceberg/jdbc/JdbcCatalog.java
+++ b/core/src/main/java/org/apache/iceberg/jdbc/JdbcCatalog.java
@@ -69,15 +69,28 @@ public class JdbcCatalog extends BaseMetastoreCatalog
   private static final Logger LOG = LoggerFactory.getLogger(JdbcCatalog.class);
   private static final Joiner SLASH = Joiner.on("/");
 
-  private FileIO io = null;
+  private FileIO io;
   private String catalogName = "jdbc";
   private String warehouseLocation;
   private Object conf;
   private JdbcClientPool connections;
   private Map<String, String> catalogProperties;
-  private Function<Map<String, String>, FileIO> ioBuilder = null;
+  private final Function<Map<String, String>, FileIO> ioBuilder;
+  private final Function<Map<String, String>, JdbcClientPool> 
clientPoolBuilder;
+  private final boolean initializeCatalogTables;
 
-  public JdbcCatalog() {}
+  public JdbcCatalog() {
+    this(null, null, true);
+  }
+
+  public JdbcCatalog(
+      Function<Map<String, String>, FileIO> ioBuilder,
+      Function<Map<String, String>, JdbcClientPool> clientPoolBuilder,
+      boolean initializeCatalogTables) {
+    this.ioBuilder = ioBuilder;
+    this.clientPoolBuilder = clientPoolBuilder;
+    this.initializeCatalogTables = initializeCatalogTables;
+  }
 
   @Override
   public void initialize(String name, Map<String, String> properties) {
@@ -106,10 +119,17 @@ public class JdbcCatalog extends BaseMetastoreCatalog
       this.io = CatalogUtil.loadFileIO(ioImpl, properties, conf);
     }
 
+    LOG.debug("Connecting to JDBC database {}", uri);
+    if (null != clientPoolBuilder) {
+      this.connections = clientPoolBuilder.apply(properties);
+    } else {
+      this.connections = new JdbcClientPool(uri, properties);
+    }
+
     try {
-      LOG.debug("Connecting to JDBC database {}", 
properties.get(CatalogProperties.URI));
-      connections = new JdbcClientPool(uri, properties);
-      initializeCatalogTables();
+      if (initializeCatalogTables) {
+        initializeCatalogTables();
+      }
     } catch (SQLTimeoutException e) {
       throw new UncheckedSQLException(e, "Cannot initialize JDBC catalog: 
Query timed out");
     } catch (SQLTransientConnectionException | 
SQLNonTransientConnectionException e) {
@@ -122,11 +142,6 @@ public class JdbcCatalog extends BaseMetastoreCatalog
     }
   }
 
-  public void setFileIOBuilder(Function<Map<String, String>, FileIO> 
newIOBuilder) {
-    Preconditions.checkState(null == io, "Cannot set IO builder after calling 
initialize");
-    this.ioBuilder = newIOBuilder;
-  }
-
   private void initializeCatalogTables() throws InterruptedException, 
SQLException {
     LOG.trace("Creating database tables (if missing) to store iceberg 
catalog");
     connections.run(

Reply via email to