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 <nre...@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 nre...@apache.org.