diff --git a/src/main/java/ru/yandex/clickhouse/settings/ClickHouseProperties.java b/src/main/java/ru/yandex/clickhouse/settings/ClickHouseProperties.java index ecf08fa4e..c99014c82 100644 --- a/src/main/java/ru/yandex/clickhouse/settings/ClickHouseProperties.java +++ b/src/main/java/ru/yandex/clickhouse/settings/ClickHouseProperties.java @@ -17,6 +17,7 @@ public class ClickHouseProperties { private int socketTimeout; private int connectionTimeout; private int dataTransferTimeout; + @Deprecated private int keepAliveTimeout; private int timeToLiveMillis; private int defaultMaxPerRoute; diff --git a/src/main/java/ru/yandex/clickhouse/util/ClickHouseHttpClientBuilder.java b/src/main/java/ru/yandex/clickhouse/util/ClickHouseHttpClientBuilder.java index 83047cd06..040cbaab6 100644 --- a/src/main/java/ru/yandex/clickhouse/util/ClickHouseHttpClientBuilder.java +++ b/src/main/java/ru/yandex/clickhouse/util/ClickHouseHttpClientBuilder.java @@ -1,10 +1,6 @@ package ru.yandex.clickhouse.util; -import org.apache.http.Header; -import org.apache.http.HeaderElement; -import org.apache.http.HeaderElementIterator; -import org.apache.http.HttpHeaders; -import org.apache.http.HttpResponse; +import org.apache.http.*; import org.apache.http.client.config.RequestConfig; import org.apache.http.config.ConnectionConfig; import org.apache.http.config.RegistryBuilder; @@ -13,6 +9,7 @@ import org.apache.http.conn.socket.PlainConnectionSocketFactory; import org.apache.http.conn.ssl.NoopHostnameVerifier; import org.apache.http.conn.ssl.SSLConnectionSocketFactory; +import org.apache.http.impl.DefaultConnectionReuseStrategy; import org.apache.http.impl.client.CloseableHttpClient; import org.apache.http.impl.client.HttpClientBuilder; import org.apache.http.impl.conn.PoolingHttpClientConnectionManager; @@ -21,7 +18,6 @@ import org.apache.http.protocol.HTTP; import org.apache.http.protocol.HttpContext; import ru.yandex.clickhouse.settings.ClickHouseProperties; -import ru.yandex.clickhouse.util.guava.StreamUtils; import ru.yandex.clickhouse.util.ssl.NonValidatingTrustManager; import javax.net.ssl.HostnameVerifier; @@ -59,7 +55,7 @@ public ClickHouseHttpClientBuilder(ClickHouseProperties properties) { public CloseableHttpClient buildClient() throws Exception { return HttpClientBuilder.create() .setConnectionManager(getConnectionManager()) - .setKeepAliveStrategy(createKeepAliveStrategy()) + .setConnectionReuseStrategy(getConnectionReuseStrategy()) .setDefaultConnectionConfig(getConnectionConfig()) .setDefaultRequestConfig(getRequestConfig()) .setDefaultHeaders(getDefaultHeaders()) @@ -68,6 +64,18 @@ public CloseableHttpClient buildClient() throws Exception { .build(); } + private ConnectionReuseStrategy getConnectionReuseStrategy() { + return new DefaultConnectionReuseStrategy() { + @Override + public boolean keepAlive(HttpResponse httpResponse, HttpContext httpContext) { + if (httpResponse.getStatusLine().getStatusCode() != HttpURLConnection.HTTP_OK) { + return false; + } + return super.keepAlive(httpResponse, httpContext); + } + }; + } + private PoolingHttpClientConnectionManager getConnectionManager() throws CertificateException, NoSuchAlgorithmException, KeyStoreException, KeyManagementException, IOException { RegistryBuilder registry = RegistryBuilder.create()