KYLIN-2583 remove max connection limit
Project: http://git-wip-us.apache.org/repos/asf/kylin/repo Commit: http://git-wip-us.apache.org/repos/asf/kylin/commit/1ba9af70 Tree: http://git-wip-us.apache.org/repos/asf/kylin/tree/1ba9af70 Diff: http://git-wip-us.apache.org/repos/asf/kylin/diff/1ba9af70 Branch: refs/heads/KYLIN-2624 Commit: 1ba9af70a5e8c49dfa3ecbc1e3222cbd46b06cbe Parents: 8b277d5 Author: Yifan Zhang <event.dim...@gmail.com> Authored: Mon May 8 13:12:41 2017 +0800 Committer: Dong Li <lid...@apache.org> Committed: Mon May 8 15:25:53 2017 +0800 ---------------------------------------------------------------------- .../org/apache/kylin/query/QueryDataSource.java | 5 ++ .../apache/kylin/query/QueryDataSourceTest.java | 50 +++++++++++++++++++- 2 files changed, 54 insertions(+), 1 deletion(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/kylin/blob/1ba9af70/query/src/main/java/org/apache/kylin/query/QueryDataSource.java ---------------------------------------------------------------------- diff --git a/query/src/main/java/org/apache/kylin/query/QueryDataSource.java b/query/src/main/java/org/apache/kylin/query/QueryDataSource.java index 32feea6..9ffdf0e 100644 --- a/query/src/main/java/org/apache/kylin/query/QueryDataSource.java +++ b/query/src/main/java/org/apache/kylin/query/QueryDataSource.java @@ -32,6 +32,7 @@ import org.apache.calcite.jdbc.Driver; import org.apache.commons.dbcp.BasicDataSource; import org.apache.commons.dbcp.BasicDataSourceFactory; import org.apache.commons.io.FileUtils; +import org.apache.commons.lang.StringUtils; import org.apache.kylin.common.KylinConfig; import org.apache.kylin.query.schema.OLAPSchemaFactory; import org.apache.log4j.Logger; @@ -129,11 +130,15 @@ public class QueryDataSource { } BasicDataSource ds = null; + if (StringUtils.isEmpty(props.getProperty("maxActive"))) { + props.setProperty("maxActive", "-1"); + } try { ds = (BasicDataSource) BasicDataSourceFactory.createDataSource(props); } catch (Exception e) { // Basic mode ds = new BasicDataSource(); + ds.setMaxActive(-1); } ds.setUrl("jdbc:calcite:model=" + olapTmp.getAbsolutePath()); ds.setDriverClassName(Driver.class.getName()); http://git-wip-us.apache.org/repos/asf/kylin/blob/1ba9af70/query/src/test/java/org/apache/kylin/query/QueryDataSourceTest.java ---------------------------------------------------------------------- diff --git a/query/src/test/java/org/apache/kylin/query/QueryDataSourceTest.java b/query/src/test/java/org/apache/kylin/query/QueryDataSourceTest.java index 90d3518..2c06be8 100644 --- a/query/src/test/java/org/apache/kylin/query/QueryDataSourceTest.java +++ b/query/src/test/java/org/apache/kylin/query/QueryDataSourceTest.java @@ -18,6 +18,8 @@ package org.apache.kylin.query; +import java.sql.Connection; +import java.sql.SQLException; import java.util.Properties; import javax.sql.DataSource; @@ -25,6 +27,7 @@ import javax.sql.DataSource; import org.apache.calcite.jdbc.Driver; import org.apache.commons.dbcp.BasicDataSource; import org.apache.kylin.common.KylinConfig; +import org.apache.kylin.common.util.DBUtils; import org.apache.kylin.common.util.LocalFileMetadataTestCase; import org.junit.After; import org.junit.Assert; @@ -80,7 +83,52 @@ public class QueryDataSourceTest extends LocalFileMetadataTestCase { Assert.assertNotNull(ds3); Assert.assertEquals(ds1, ds2); Assert.assertNotEquals(ds1, ds3); - + dsCache.clearCache(); } + + @Test(timeout=10000) + public void testMaxConnLimit() throws SQLException { + KylinConfig config = KylinConfig.getInstanceFromEnv(); + + // Test with connection limit + Properties props = new Properties(); + props.setProperty("maxActive", "3"); + props.setProperty("maxWait", "1000"); + DataSource ds1 = QueryDataSource.create("default", config, props); + Connection ds1Conn1 = ds1.getConnection(); + Connection ds1Conn2 = ds1.getConnection(); + Connection ds1Conn3 = ds1.getConnection(); + try { + Connection ds1Conn4 = ds1.getConnection(); + DBUtils.closeQuietly(ds1Conn4); + Assert.fail("This should fail with SQLException"); + } catch (Exception e) { + Assert.assertTrue(e instanceof SQLException); + } + DBUtils.closeQuietly(ds1Conn1); + DBUtils.closeQuietly(ds1Conn2); + DBUtils.closeQuietly(ds1Conn3); + + // Test with not connection limit + DataSource ds2 = QueryDataSource.create("default", config); + Connection ds2Conn1 = ds2.getConnection(); + Connection ds2Conn2 = ds2.getConnection(); + Connection ds2Conn3 = ds2.getConnection(); + Connection ds2Conn4 = ds2.getConnection(); + Connection ds2Conn5 = ds2.getConnection(); + Connection ds2Conn6 = ds2.getConnection(); + Connection ds2Conn7 = ds2.getConnection(); + Connection ds2Conn8 = ds2.getConnection(); // DBCP default is 8, should be bypassed with no limit + Connection ds2Conn9 = ds2.getConnection(); + DBUtils.closeQuietly(ds2Conn1); + DBUtils.closeQuietly(ds2Conn2); + DBUtils.closeQuietly(ds2Conn3); + DBUtils.closeQuietly(ds2Conn4); + DBUtils.closeQuietly(ds2Conn5); + DBUtils.closeQuietly(ds2Conn6); + DBUtils.closeQuietly(ds2Conn7); + DBUtils.closeQuietly(ds2Conn8); + DBUtils.closeQuietly(ds2Conn9); + } }