From 60d7f4ea90c2c1bec8c7f306ecc2e3a22acb81bb Mon Sep 17 00:00:00 2001 From: dengfangyuan Date: Sun, 10 Sep 2017 12:31:18 +0800 Subject: [PATCH] use PoolingClientConnectionManager instead of BasicClientConnManager --- .../main/java/org/apache/kylin/common/KylinConfigBase.java | 12 ++++++++++++ .../java/org/apache/kylin/common/restclient/RestClient.java | 10 +++++++++- core-common/src/main/resources/kylin-defaults.properties | 8 ++++++++ 3 files changed, 29 insertions(+), 1 deletion(-) diff --git a/core-common/src/main/java/org/apache/kylin/common/KylinConfigBase.java b/core-common/src/main/java/org/apache/kylin/common/KylinConfigBase.java index 749b515c3..2969d9182 100644 --- a/core-common/src/main/java/org/apache/kylin/common/KylinConfigBase.java +++ b/core-common/src/main/java/org/apache/kylin/common/KylinConfigBase.java @@ -1191,6 +1191,18 @@ abstract public class KylinConfigBase implements Serializable { return Boolean.parseBoolean(getOptional("kylin.web.cross-domain-enabled", "true")); } + // ============================================================================ + // RESTCLIENT + // ============================================================================ + + public int getDefaultMaxPerRoute() { + return Integer.valueOf(this.getOptional("kylin.rest-client.connection.default-max-per-route", "20")); + } + + public int getMaxTotal() { + return Integer.valueOf(this.getOptional("kylin.rest-client.connection.max-total", "200")); + } + /** * metric */ diff --git a/core-common/src/main/java/org/apache/kylin/common/restclient/RestClient.java b/core-common/src/main/java/org/apache/kylin/common/restclient/RestClient.java index 95aa62682..19daaef84 100644 --- a/core-common/src/main/java/org/apache/kylin/common/restclient/RestClient.java +++ b/core-common/src/main/java/org/apache/kylin/common/restclient/RestClient.java @@ -41,6 +41,7 @@ import org.apache.http.client.methods.HttpRequestBase; import org.apache.http.entity.StringEntity; import org.apache.http.impl.client.BasicCredentialsProvider; import org.apache.http.impl.client.DefaultHttpClient; +import org.apache.http.impl.conn.PoolingClientConnectionManager; import org.apache.http.params.BasicHttpParams; import org.apache.http.params.HttpConnectionParams; import org.apache.http.params.HttpParams; @@ -51,6 +52,8 @@ import org.slf4j.LoggerFactory; import com.fasterxml.jackson.databind.ObjectMapper; +import org.apache.kylin.common.KylinConfig; + /** * @author yangli9 */ @@ -113,7 +116,12 @@ public class RestClient { HttpConnectionParams.setSoTimeout(httpParams, HTTP_SOCKET_TIMEOUT_MS); HttpConnectionParams.setConnectionTimeout(httpParams, HTTP_CONNECTION_TIMEOUT_MS); - client = new DefaultHttpClient(httpParams); + final PoolingClientConnectionManager cm = new PoolingClientConnectionManager(); + KylinConfig config = KylinConfig.getInstanceFromEnv(); + cm.setDefaultMaxPerRoute(config.getDefaultMaxPerRoute()); + cm.setMaxTotal(config.getMaxTotal()); + + client = new DefaultHttpClient(cm, httpParams); if (userName != null && password != null) { CredentialsProvider provider = new BasicCredentialsProvider(); diff --git a/core-common/src/main/resources/kylin-defaults.properties b/core-common/src/main/resources/kylin-defaults.properties index a3277cef3..4bd657426 100644 --- a/core-common/src/main/resources/kylin-defaults.properties +++ b/core-common/src/main/resources/kylin-defaults.properties @@ -42,6 +42,14 @@ kylin.web.timezone=GMT+8 kylin.web.cross-domain-enabled=true +### RESTCLIENT | WEB ### + +#max connections of one route +kylin.rest-client.connection.default-max-per-route=20 + +#max connections of one rest-client +kylin.rest-client.connection.max-total=200 + ### SOURCE ### -- 2.11.0 (Apple Git-81)