You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@gobblin.apache.org by wl...@apache.org on 2023/01/23 18:09:02 UTC
[gobblin] branch master updated: Specifically name each Hikari connection pool created, for traceability (#3627)
This is an automated email from the ASF dual-hosted git repository.
wlo pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/gobblin.git
The following commit(s) were added to refs/heads/master by this push:
new a1be38bf6 Specifically name each Hikari connection pool created, for traceability (#3627)
a1be38bf6 is described below
commit a1be38bf65526f1cc8ca151536831e981b183da1
Author: Kip Kohn <ck...@linkedin.com>
AuthorDate: Mon Jan 23 10:08:51 2023 -0800
Specifically name each Hikari connection pool created, for traceability (#3627)
---
.../gobblin/metastore/JobHistoryDataSourceProvider.java | 3 +++
.../org/apache/gobblin/metastore/MysqlStateStore.java | 16 +++++++++++++++-
.../org/apache/gobblin/source/jdbc/JdbcProvider.java | 4 ++++
.../service/modules/db/ServiceDatabaseProviderImpl.java | 3 +++
.../org/apache/gobblin/util/jdbc/DataSourceProvider.java | 3 +++
5 files changed, 28 insertions(+), 1 deletion(-)
diff --git a/gobblin-metastore/src/main/java/org/apache/gobblin/metastore/JobHistoryDataSourceProvider.java b/gobblin-metastore/src/main/java/org/apache/gobblin/metastore/JobHistoryDataSourceProvider.java
index edf35d637..c175b352e 100644
--- a/gobblin-metastore/src/main/java/org/apache/gobblin/metastore/JobHistoryDataSourceProvider.java
+++ b/gobblin-metastore/src/main/java/org/apache/gobblin/metastore/JobHistoryDataSourceProvider.java
@@ -19,6 +19,7 @@ package org.apache.gobblin.metastore;
import java.time.Duration;
import java.util.Properties;
+import java.util.concurrent.atomic.AtomicInteger;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -36,9 +37,11 @@ import org.apache.gobblin.util.jdbc.MysqlDataSourceUtils;
*/
public class JobHistoryDataSourceProvider extends org.apache.gobblin.util.jdbc.DataSourceProvider {
private static final Logger LOG = LoggerFactory.getLogger(JobHistoryDataSourceProvider.class);
+ private static final AtomicInteger POOL_NUM = new AtomicInteger(0);
@Inject
public JobHistoryDataSourceProvider(@Named("dataSourceProperties") Properties properties) {
+ this.dataSource.setPoolName("HikariPool-" + POOL_NUM.incrementAndGet() + "-" + getClass().getSimpleName());
this.dataSource.setDriverClassName(properties.getProperty(ConfigurationKeys.JOB_HISTORY_STORE_JDBC_DRIVER_KEY,
ConfigurationKeys.DEFAULT_JOB_HISTORY_STORE_JDBC_DRIVER));
diff --git a/gobblin-metastore/src/main/java/org/apache/gobblin/metastore/MysqlStateStore.java b/gobblin-metastore/src/main/java/org/apache/gobblin/metastore/MysqlStateStore.java
index 3bbf8747b..c2bc1e68a 100644
--- a/gobblin-metastore/src/main/java/org/apache/gobblin/metastore/MysqlStateStore.java
+++ b/gobblin-metastore/src/main/java/org/apache/gobblin/metastore/MysqlStateStore.java
@@ -26,6 +26,8 @@ import java.io.EOFException;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
+import java.net.URI;
+import java.net.URISyntaxException;
import java.sql.Blob;
import java.sql.Connection;
import java.sql.PreparedStatement;
@@ -36,6 +38,7 @@ import java.time.Duration;
import java.util.Collection;
import java.util.Collections;
import java.util.List;
+import java.util.concurrent.atomic.AtomicInteger;
import java.util.zip.GZIPInputStream;
import java.util.zip.GZIPOutputStream;
import javax.sql.DataSource;
@@ -79,6 +82,7 @@ import org.apache.gobblin.util.jdbc.MysqlDataSourceUtils;
**/
public class MysqlStateStore<T extends State> implements StateStore<T> {
private static final Logger LOG = LoggerFactory.getLogger(MysqlStateStore.class);
+ private static final AtomicInteger POOL_NUM = new AtomicInteger(0);
/** Specifies which 'Job State' query columns receive search evaluation (with SQL `LIKE` operator). */
protected enum JobStateSearchColumns {
@@ -201,6 +205,16 @@ public class MysqlStateStore<T extends State> implements StateStore<T> {
HikariDataSource dataSource = new HikariDataSource();
PasswordManager passwordManager = PasswordManager.getInstance(ConfigUtils.configToProperties(config));
+ String jdbcUrl = config.getString(ConfigurationKeys.STATE_STORE_DB_URL_KEY);
+ String poolName = "HikariPool-" + POOL_NUM.incrementAndGet() + "-" + MysqlStateStore.class.getSimpleName();
+ try {
+ String dbPath = new URI(new URI(jdbcUrl).getSchemeSpecificPart()).getPath().replaceAll("\\W", "-");
+ // when possible, attempt discernment to the DB level
+ poolName += dbPath; // as the path will begin w/ "/", following `replaceAll`, no need to prepend additional "-"
+ } catch (URISyntaxException e) {
+ LOG.warn("unable to parse JDBC URL '{}' - {}", jdbcUrl, e.getMessage());
+ }
+ dataSource.setPoolName(poolName);
dataSource.setDriverClassName(ConfigUtils.getString(config, ConfigurationKeys.STATE_STORE_DB_JDBC_DRIVER_KEY,
ConfigurationKeys.DEFAULT_STATE_STORE_DB_JDBC_DRIVER));
// MySQL server can timeout a connection so need to validate connections before use
@@ -213,7 +227,7 @@ public class MysqlStateStore<T extends State> implements StateStore<T> {
dataSource.setConnectionTestQuery(validationQuery);
dataSource.setAutoCommit(false);
dataSource.setIdleTimeout(Duration.ofSeconds(60).toMillis());
- dataSource.setJdbcUrl(config.getString(ConfigurationKeys.STATE_STORE_DB_URL_KEY));
+ dataSource.setJdbcUrl(jdbcUrl);
// TODO: revisit following verification of successful connection pool migration:
// whereas `o.a.commons.dbcp.BasicDataSource` defaults min idle conns to 0, hikari defaults to 10.
// perhaps non-zero would have desirable runtime perf, but anything >0 currently fails unit tests (even 1!);
diff --git a/gobblin-modules/gobblin-sql/src/main/java/org/apache/gobblin/source/jdbc/JdbcProvider.java b/gobblin-modules/gobblin-sql/src/main/java/org/apache/gobblin/source/jdbc/JdbcProvider.java
index db6494088..e92080b29 100644
--- a/gobblin-modules/gobblin-sql/src/main/java/org/apache/gobblin/source/jdbc/JdbcProvider.java
+++ b/gobblin-modules/gobblin-sql/src/main/java/org/apache/gobblin/source/jdbc/JdbcProvider.java
@@ -18,6 +18,7 @@
package org.apache.gobblin.source.jdbc;
import java.io.IOException;
+import java.util.concurrent.atomic.AtomicInteger;
import org.apache.gobblin.tunnel.Tunnel;
@@ -30,6 +31,8 @@ import com.zaxxer.hikari.HikariDataSource;
* @author nveeramr
*/
public class JdbcProvider extends HikariDataSource {
+ private static final AtomicInteger POOL_NUM = new AtomicInteger(0);
+
private Tunnel tunnel;
// If extract type is not provided then consider it as a default type
@@ -73,6 +76,7 @@ public class JdbcProvider extends HikariDataSource {
}
}
+ this.setPoolName("HikariPool-" + POOL_NUM.incrementAndGet() + "-" + getClass().getSimpleName());
this.setDriverClassName(driver);
this.setUsername(user);
this.setPassword(password);
diff --git a/gobblin-service/src/main/java/org/apache/gobblin/service/modules/db/ServiceDatabaseProviderImpl.java b/gobblin-service/src/main/java/org/apache/gobblin/service/modules/db/ServiceDatabaseProviderImpl.java
index 7d2d719da..17431ea5f 100644
--- a/gobblin-service/src/main/java/org/apache/gobblin/service/modules/db/ServiceDatabaseProviderImpl.java
+++ b/gobblin-service/src/main/java/org/apache/gobblin/service/modules/db/ServiceDatabaseProviderImpl.java
@@ -19,6 +19,7 @@ package org.apache.gobblin.service.modules.db;
import java.time.Duration;
import java.util.Objects;
+import java.util.concurrent.atomic.AtomicInteger;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -41,6 +42,7 @@ import org.apache.gobblin.util.ConfigUtils;
public class ServiceDatabaseProviderImpl implements ServiceDatabaseProvider {
private static final Logger LOG = LoggerFactory.getLogger(ServiceDatabaseProviderImpl.class);
+ private static final AtomicInteger POOL_NUM = new AtomicInteger(0);
private final Configuration configuration;
private HikariDataSource dataSource;
@@ -62,6 +64,7 @@ public class ServiceDatabaseProviderImpl implements ServiceDatabaseProvider {
dataSource = new HikariDataSource();
+ dataSource.setPoolName("HikariPool-" + POOL_NUM.incrementAndGet() + "-" + getClass().getSimpleName());
dataSource.setJdbcUrl(configuration.getUrl());
dataSource.setUsername(configuration.getUserName());
dataSource.setPassword(configuration.getPassword());
diff --git a/gobblin-utility/src/main/java/org/apache/gobblin/util/jdbc/DataSourceProvider.java b/gobblin-utility/src/main/java/org/apache/gobblin/util/jdbc/DataSourceProvider.java
index d7f6596f0..53ee08f2f 100644
--- a/gobblin-utility/src/main/java/org/apache/gobblin/util/jdbc/DataSourceProvider.java
+++ b/gobblin-utility/src/main/java/org/apache/gobblin/util/jdbc/DataSourceProvider.java
@@ -20,6 +20,7 @@ package org.apache.gobblin.util.jdbc;
import java.time.Duration;
import java.util.Arrays;
import java.util.Properties;
+import java.util.concurrent.atomic.AtomicInteger;
import javax.sql.DataSource;
@@ -39,6 +40,7 @@ import org.apache.gobblin.password.PasswordManager;
*/
public class DataSourceProvider implements Provider<DataSource> {
private static final Logger LOG = LoggerFactory.getLogger(DataSourceProvider.class);
+ private static final AtomicInteger POOL_NUM = new AtomicInteger(0);
public static final String GOBBLIN_UTIL_JDBC_PREFIX = "gobblin.util.jdbc.";
public static final String CONN_DRIVER = GOBBLIN_UTIL_JDBC_PREFIX + "conn.driver";
@@ -55,6 +57,7 @@ public class DataSourceProvider implements Provider<DataSource> {
@Inject
public DataSourceProvider(@Named("dataSourceProperties") Properties properties) {
this.dataSource = new HikariDataSource();
+ this.dataSource.setPoolName("HikariPool-" + POOL_NUM.incrementAndGet() + "-" + getClass().getSimpleName());
this.dataSource.setDriverClassName(properties.getProperty(CONN_DRIVER, DEFAULT_CONN_DRIVER));
// the validation query should work beyond mysql; still, to bypass for any reason, heed directive
if (!Boolean.parseBoolean(properties.getProperty(SKIP_VALIDATION_QUERY, "false"))) {