You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@geode.apache.org by nr...@apache.org on 2018/03/30 21:35:11 UTC
[geode] branch develop updated: GEODE-4974: Create single
connection pool per cache (#1707)
This is an automated email from the ASF dual-hosted git repository.
nreich pushed a commit to branch develop
in repository https://gitbox.apache.org/repos/asf/geode.git
The following commit(s) were added to refs/heads/develop by this push:
new 956a671 GEODE-4974: Create single connection pool per cache (#1707)
956a671 is described below
commit 956a671873ea382f23839810632644162b3b8a9a
Author: Nick Reich <nr...@pivotal.io>
AuthorDate: Fri Mar 30 14:35:05 2018 -0700
GEODE-4974: Create single connection pool per cache (#1707)
---
.../connectors/jdbc/internal/AbstractJdbcCallback.java | 3 +--
.../geode/connectors/jdbc/internal/DataSourceManager.java | 5 +++--
.../connectors/jdbc/internal/JdbcConnectorService.java | 1 +
.../connectors/jdbc/internal/JdbcConnectorServiceImpl.java | 7 +++++++
.../apache/geode/connectors/jdbc/internal/SqlHandler.java | 2 +-
.../connectors/jdbc/internal/AbstractJdbcCallbackTest.java | 1 -
.../jdbc/internal/DataSourceManagerUnitTest.java | 14 +++++++-------
.../connectors/jdbc/internal/JdbcConnectorServiceTest.java | 5 +++++
.../geode/connectors/jdbc/internal/SqlHandlerTest.java | 2 +-
9 files changed, 26 insertions(+), 14 deletions(-)
diff --git a/geode-connectors/src/main/java/org/apache/geode/connectors/jdbc/internal/AbstractJdbcCallback.java b/geode-connectors/src/main/java/org/apache/geode/connectors/jdbc/internal/AbstractJdbcCallback.java
index 3fbf8c0..dc6b265 100644
--- a/geode-connectors/src/main/java/org/apache/geode/connectors/jdbc/internal/AbstractJdbcCallback.java
+++ b/geode-connectors/src/main/java/org/apache/geode/connectors/jdbc/internal/AbstractJdbcCallback.java
@@ -60,8 +60,7 @@ public abstract class AbstractJdbcCallback implements CacheCallback {
this.cache = cache;
JdbcConnectorService service = cache.getService(JdbcConnectorService.class);
TableMetaDataManager tableMetaDataManager = new TableMetaDataManager();
- DataSourceManager manager = new DataSourceManager(new HikariJdbcDataSourceFactory());
- sqlHandler = new SqlHandler(manager, tableMetaDataManager, service);
+ sqlHandler = new SqlHandler(service.getDataSourceManager(), tableMetaDataManager, service);
}
}
}
diff --git a/geode-connectors/src/main/java/org/apache/geode/connectors/jdbc/internal/DataSourceManager.java b/geode-connectors/src/main/java/org/apache/geode/connectors/jdbc/internal/DataSourceManager.java
index 0f062b2..b27f1ff 100644
--- a/geode-connectors/src/main/java/org/apache/geode/connectors/jdbc/internal/DataSourceManager.java
+++ b/geode-connectors/src/main/java/org/apache/geode/connectors/jdbc/internal/DataSourceManager.java
@@ -26,14 +26,15 @@ class DataSourceManager {
this.jdbcDataSourceFactory = jdbcDataSourceFactory;
}
- JdbcDataSource getDataSource(ConnectionConfiguration config) {
+ JdbcDataSource getOrCreateDataSource(ConnectionConfiguration config) {
return dataSourceMap.computeIfAbsent(config.getName(), k -> {
return this.jdbcDataSourceFactory.create(config);
});
}
- void close() {
+ synchronized void close() {
dataSourceMap.values().forEach(this::close);
+ dataSourceMap.clear();
}
private void close(JdbcDataSource dataSource) {
diff --git a/geode-connectors/src/main/java/org/apache/geode/connectors/jdbc/internal/JdbcConnectorService.java b/geode-connectors/src/main/java/org/apache/geode/connectors/jdbc/internal/JdbcConnectorService.java
index 9dc40d4..6cebfe8 100644
--- a/geode-connectors/src/main/java/org/apache/geode/connectors/jdbc/internal/JdbcConnectorService.java
+++ b/geode-connectors/src/main/java/org/apache/geode/connectors/jdbc/internal/JdbcConnectorService.java
@@ -46,4 +46,5 @@ public interface JdbcConnectorService extends Extension<Cache>, CacheService {
Set<RegionMapping> getRegionMappings();
+ DataSourceManager getDataSourceManager();
}
diff --git a/geode-connectors/src/main/java/org/apache/geode/connectors/jdbc/internal/JdbcConnectorServiceImpl.java b/geode-connectors/src/main/java/org/apache/geode/connectors/jdbc/internal/JdbcConnectorServiceImpl.java
index b9c5c0b..2c46455 100644
--- a/geode-connectors/src/main/java/org/apache/geode/connectors/jdbc/internal/JdbcConnectorServiceImpl.java
+++ b/geode-connectors/src/main/java/org/apache/geode/connectors/jdbc/internal/JdbcConnectorServiceImpl.java
@@ -33,6 +33,8 @@ public class JdbcConnectorServiceImpl implements JdbcConnectorService {
private final Map<String, ConnectionConfiguration> connectionsByName = new ConcurrentHashMap<>();
private final Map<String, RegionMapping> mappingsByRegion = new ConcurrentHashMap<>();
+ private final DataSourceManager manager =
+ new DataSourceManager(new HikariJdbcDataSourceFactory());
private volatile InternalCache cache;
private boolean registered;
@@ -86,6 +88,11 @@ public class JdbcConnectorServiceImpl implements JdbcConnectorService {
}
@Override
+ public DataSourceManager getDataSourceManager() {
+ return manager;
+ }
+
+ @Override
public void createRegionMapping(RegionMapping mapping) throws RegionMappingExistsException {
registerAsExtension();
RegionMapping existing = mappingsByRegion.putIfAbsent(mapping.getRegionName(), mapping);
diff --git a/geode-connectors/src/main/java/org/apache/geode/connectors/jdbc/internal/SqlHandler.java b/geode-connectors/src/main/java/org/apache/geode/connectors/jdbc/internal/SqlHandler.java
index 8e9ab6c..3e49cf2 100644
--- a/geode-connectors/src/main/java/org/apache/geode/connectors/jdbc/internal/SqlHandler.java
+++ b/geode-connectors/src/main/java/org/apache/geode/connectors/jdbc/internal/SqlHandler.java
@@ -50,7 +50,7 @@ public class SqlHandler {
}
Connection getConnection(ConnectionConfiguration config) throws SQLException {
- return manager.getDataSource(config).getConnection();
+ return manager.getOrCreateDataSource(config).getConnection();
}
public <K, V> PdxInstance read(Region<K, V> region, K key) throws SQLException {
diff --git a/geode-connectors/src/test/java/org/apache/geode/connectors/jdbc/internal/AbstractJdbcCallbackTest.java b/geode-connectors/src/test/java/org/apache/geode/connectors/jdbc/internal/AbstractJdbcCallbackTest.java
index 62df1af..0e439d4 100644
--- a/geode-connectors/src/test/java/org/apache/geode/connectors/jdbc/internal/AbstractJdbcCallbackTest.java
+++ b/geode-connectors/src/test/java/org/apache/geode/connectors/jdbc/internal/AbstractJdbcCallbackTest.java
@@ -94,5 +94,4 @@ public class AbstractJdbcCallbackTest {
boolean ignoreEvent = jdbcCallback.eventCanBeIgnored(Operation.CREATE);
assertThat(ignoreEvent).isFalse();
}
-
}
diff --git a/geode-connectors/src/test/java/org/apache/geode/connectors/jdbc/internal/DataSourceManagerUnitTest.java b/geode-connectors/src/test/java/org/apache/geode/connectors/jdbc/internal/DataSourceManagerUnitTest.java
index 944c858..05a422a 100644
--- a/geode-connectors/src/test/java/org/apache/geode/connectors/jdbc/internal/DataSourceManagerUnitTest.java
+++ b/geode-connectors/src/test/java/org/apache/geode/connectors/jdbc/internal/DataSourceManagerUnitTest.java
@@ -53,15 +53,15 @@ public class DataSourceManagerUnitTest {
@Test
public void retrievesANewDataSource() throws Exception {
- JdbcDataSource returnedDataSource = manager.getDataSource(connectionConfig);
+ JdbcDataSource returnedDataSource = manager.getOrCreateDataSource(connectionConfig);
assertThat(returnedDataSource).isNotNull().isSameAs(dataSource);
}
@Test
public void retrievesSameDataSourceForSameConnectionConfig() throws Exception {
- JdbcDataSource returnedDataSource = manager.getDataSource(connectionConfig);
- JdbcDataSource secondReturnedDataSource = manager.getDataSource(connectionConfig);
+ JdbcDataSource returnedDataSource = manager.getOrCreateDataSource(connectionConfig);
+ JdbcDataSource secondReturnedDataSource = manager.getOrCreateDataSource(connectionConfig);
assertThat(returnedDataSource).isNotNull().isSameAs(dataSource);
assertThat(secondReturnedDataSource).isNotNull().isSameAs(dataSource);
@@ -77,8 +77,8 @@ public class DataSourceManagerUnitTest {
@Test
public void retrievesDifferentDataSourceForEachConfig() throws Exception {
registerTwoDataSourceFactory();
- JdbcDataSource returnedDataSource = manager.getDataSource(connectionConfig);
- JdbcDataSource secondReturnedDataSource = manager.getDataSource(connectionConfig2);
+ JdbcDataSource returnedDataSource = manager.getOrCreateDataSource(connectionConfig);
+ JdbcDataSource secondReturnedDataSource = manager.getOrCreateDataSource(connectionConfig2);
assertThat(returnedDataSource).isNotNull().isSameAs(dataSource);
assertThat(secondReturnedDataSource).isNotNull().isSameAs(dataSource2);
@@ -88,8 +88,8 @@ public class DataSourceManagerUnitTest {
@Test
public void closesAllDataSources() throws Exception {
registerTwoDataSourceFactory();
- manager.getDataSource(connectionConfig);
- manager.getDataSource(connectionConfig2);
+ manager.getOrCreateDataSource(connectionConfig);
+ manager.getOrCreateDataSource(connectionConfig2);
manager.close();
verify(dataSource).close();
diff --git a/geode-connectors/src/test/java/org/apache/geode/connectors/jdbc/internal/JdbcConnectorServiceTest.java b/geode-connectors/src/test/java/org/apache/geode/connectors/jdbc/internal/JdbcConnectorServiceTest.java
index 7f1bb38..03e5d32 100644
--- a/geode-connectors/src/test/java/org/apache/geode/connectors/jdbc/internal/JdbcConnectorServiceTest.java
+++ b/geode-connectors/src/test/java/org/apache/geode/connectors/jdbc/internal/JdbcConnectorServiceTest.java
@@ -112,4 +112,9 @@ public class JdbcConnectorServiceTest {
.isInstanceOf(ConnectionConfigExistsException.class).hasMessageContaining(TEST_CONFIG_NAME);
}
+ @Test
+ public void hasDataSourceManagerOnCreation() {
+ assertThat(service.getDataSourceManager()).isNotNull();
+ }
+
}
diff --git a/geode-connectors/src/test/java/org/apache/geode/connectors/jdbc/internal/SqlHandlerTest.java b/geode-connectors/src/test/java/org/apache/geode/connectors/jdbc/internal/SqlHandlerTest.java
index 196bfa1..1f11f11 100644
--- a/geode-connectors/src/test/java/org/apache/geode/connectors/jdbc/internal/SqlHandlerTest.java
+++ b/geode-connectors/src/test/java/org/apache/geode/connectors/jdbc/internal/SqlHandlerTest.java
@@ -114,7 +114,7 @@ public class SqlHandlerTest {
when(connectorService.getMappingForRegion(REGION_NAME)).thenReturn(regionMapping);
- when(manager.getDataSource(any())).thenReturn(this.dataSource);
+ when(manager.getOrCreateDataSource(any())).thenReturn(this.dataSource);
when(dataSource.getConnection()).thenReturn(this.connection);
statement = mock(PreparedStatement.class);
--
To stop receiving notification emails like this one, please contact
nreich@apache.org.