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(