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);
+    }
 }

Reply via email to