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.