clickhouse-java icon indicating copy to clipboard operation
clickhouse-java copied to clipboard

[HTTP] When Apache Http Client is missing in classpath then JDK built-in one is silently selected.

Open chernser opened this issue 9 months ago • 2 comments

Describe the bug

Http client provider is silently fallback to URL Connection client from JDK.

Steps to reproduce

  1. Create application without apache http client dependency
  2. Run application and connect to CH cloud
  3. Execute "select hostname()" with same client several times consequently.
  4. If apache http client is used - then host name in most times will be the same.

Expected behavior

  • user should be notified if failover to not selected http client happens
  • log warning should be printed if no apache http client is present in classpath while it is selected as client provider

chernser avatar Apr 26 '24 16:04 chernser

I actually see a warning in my logs:

2024-05-02T15:49:54.336Z 4cc66bdf97da WARN [com.clickhouse.client.http.ClickHouseHttpConnectionFactory:164] - Error when creating APACHE_HTTP_CLIENT, fall back to HTTP_URL_CONNECTION
                                                       java.lang.Thread.run                           Thread.java:  829
                         java.util.concurrent.ThreadPoolExecutor$Worker.run               ThreadPoolExecutor.java:  628
                          java.util.concurrent.ThreadPoolExecutor.runWorker               ThreadPoolExecutor.java: 1128
                     java.util.concurrent.CompletableFuture$AsyncSupply.run                CompletableFuture.java: 1700
                      com.clickhouse.client.AbstractClient.lambda$execute$0                   AbstractClient.java:  273
                             com.clickhouse.client.AbstractClient.sendAsync                   AbstractClient.java:  161
                       com.clickhouse.client.http.ClickHouseHttpClient.send             ClickHouseHttpClient.java:   90
                         com.clickhouse.client.AbstractClient.getConnection                   AbstractClient.java:  198
              com.clickhouse.client.http.ClickHouseHttpClient.newConnection             ClickHouseHttpClient.java:   26
              com.clickhouse.client.http.ClickHouseHttpClient.newConnection             ClickHouseHttpClient.java:   56
com.clickhouse.client.http.ClickHouseHttpConnectionFactory.createConnection  ClickHouseHttpConnectionFactory.java:   22
                                            java.lang.ClassLoader.loadClass                      ClassLoader.java:  527
                  jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass                     ClassLoaders.java:  178
                           jdk.internal.loader.BuiltinClassLoader.loadClass               BuiltinClassLoader.java:  581
java.lang.ClassNotFoundException: org.apache.hc.core5.http.ClassicHttpRequest
  java.lang.NoClassDefFoundError: org/apache/hc/core5/http/ClassicHttpRequest

devurandom avatar May 02 '24 15:05 devurandom

Add this same version of httpclient5 in this project will be ok,current version is 0.6.1 with httpclient5 5.2.1 <dependency> <groupId>org.apache.httpcomponents.client5</groupId> <artifactId>httpclient5</artifactId> <version>5.2.1</version> </dependency>

TTcheng avatar Jul 05 '24 07:07 TTcheng