You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@kylin.apache.org by li...@apache.org on 2017/05/19 10:04:43 UTC
[16/37] kylin git commit: KYLIN-2583 remove max connection limit
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/master
Commit: 1ba9af70a5e8c49dfa3ecbc1e3222cbd46b06cbe
Parents: 8b277d5
Author: Yifan Zhang <ev...@gmail.com>
Authored: Mon May 8 13:12:41 2017 +0800
Committer: Dong Li <li...@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);
+ }
}