This is an automated email from the ASF dual-hosted git repository.

francischuang pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/calcite-avatica.git


The following commit(s) were added to refs/heads/main by this push:
     new e30eaf5b6 [CALCITE-6671] Update httpclient5 to 5.4.1 and httpcore 
5.3.1 in Avatica
e30eaf5b6 is described below

commit e30eaf5b6fc734c0d9ccc77399432f3b24038dde
Author: Istvan Toth <st...@cloudera.com>
AuthorDate: Mon Nov 4 14:42:55 2024 +0100

    [CALCITE-6671] Update httpclient5 to 5.4.1 and httpcore 5.3.1 in Avatica
---
 .../remote/AvaticaCommonsHttpClientImpl.java       | 38 +++++++++++++++++++---
 gradle.properties                                  |  4 +--
 2 files changed, 35 insertions(+), 7 deletions(-)

diff --git 
a/core/src/main/java/org/apache/calcite/avatica/remote/AvaticaCommonsHttpClientImpl.java
 
b/core/src/main/java/org/apache/calcite/avatica/remote/AvaticaCommonsHttpClientImpl.java
index dcbfe123f..44beaa7b8 100644
--- 
a/core/src/main/java/org/apache/calcite/avatica/remote/AvaticaCommonsHttpClientImpl.java
+++ 
b/core/src/main/java/org/apache/calcite/avatica/remote/AvaticaCommonsHttpClientImpl.java
@@ -60,6 +60,8 @@ import java.net.URI;
 import java.net.URISyntaxException;
 import java.net.URL;
 import java.security.Principal;
+import java.util.ArrayList;
+import java.util.List;
 import java.util.Objects;
 import java.util.concurrent.TimeUnit;
 
@@ -92,6 +94,8 @@ public class AvaticaCommonsHttpClientImpl implements 
AvaticaHttpClient, HttpClie
   protected Lookup<AuthSchemeFactory> authRegistry = null;
   protected Object userToken;
   protected HttpClientContext context;
+  protected long connectTimeout;
+  protected long responseTimeout;
 
   public AvaticaCommonsHttpClientImpl(URL url) {
     this.uri = toURI(Objects.requireNonNull(url));
@@ -100,13 +104,11 @@ public class AvaticaCommonsHttpClientImpl implements 
AvaticaHttpClient, HttpClie
   protected void initializeClient(PoolingHttpClientConnectionManager pool,
                                   ConnectionConfig config) {
     this.authCache = new BasicAuthCache();
+    this.connectTimeout = config.getHttpConnectionTimeout();
+    this.responseTimeout = config.getHttpResponseTimeout();
     // A single thread-safe HttpClient, pooling connections via the
     // ConnectionManager
-    RequestConfig.Builder requestConfigBuilder = RequestConfig.custom();
-    RequestConfig requestConfig = requestConfigBuilder
-        .setConnectTimeout(config.getHttpConnectionTimeout(), 
TimeUnit.MILLISECONDS)
-        .setResponseTimeout(config.getHttpResponseTimeout(), 
TimeUnit.MILLISECONDS)
-        .build();
+    RequestConfig requestConfig = createRequestConfig();
     HttpClientBuilder httpClientBuilder = 
HttpClients.custom().setConnectionManager(pool)
         .setDefaultRequestConfig(requestConfig);
     this.client = httpClientBuilder.build();
@@ -124,6 +126,30 @@ public class AvaticaCommonsHttpClientImpl implements 
AvaticaHttpClient, HttpClie
 
   }
 
+  // This is needed because we initialize the client object too early.
+  private RequestConfig createRequestConfig() {
+    RequestConfig.Builder requestConfigBuilder = RequestConfig.custom();
+    requestConfigBuilder
+        .setConnectTimeout(this.connectTimeout, TimeUnit.MILLISECONDS)
+        .setResponseTimeout(this.responseTimeout, TimeUnit.MILLISECONDS);
+    List<String> preferredSchemes = new ArrayList<>();
+    // In HttpClient 5.3+ SPNEGO is not enabled by default
+    if (authRegistry != null) {
+      if (authRegistry.lookup(StandardAuthScheme.DIGEST) != null) {
+        preferredSchemes.add(StandardAuthScheme.DIGEST);
+      }
+      if (authRegistry.lookup(StandardAuthScheme.BASIC) != null) {
+        preferredSchemes.add(StandardAuthScheme.BASIC);
+      }
+      if (authRegistry.lookup(StandardAuthScheme.SPNEGO) != null) {
+        preferredSchemes.add(StandardAuthScheme.SPNEGO);
+      }
+      requestConfigBuilder.setTargetPreferredAuthSchemes(preferredSchemes);
+      requestConfigBuilder.setProxyPreferredAuthSchemes(preferredSchemes);
+    }
+    return requestConfigBuilder.build();
+  }
+
   @Override public byte[] send(byte[] request) {
     while (true) {
       ByteArrayEntity entity = new ByteArrayEntity(request, 
ContentType.APPLICATION_OCTET_STREAM);
@@ -186,6 +212,7 @@ public class AvaticaCommonsHttpClientImpl implements 
AvaticaHttpClient, HttpClie
     this.authRegistry = authRegistryBuilder.build();
     context.setCredentialsProvider(credentialsProvider);
     context.setAuthSchemeRegistry(authRegistry);
+    context.setRequestConfig(createRequestConfig());
   }
 
   @Override public void setGSSCredential(GSSCredential credential) {
@@ -209,6 +236,7 @@ public class AvaticaCommonsHttpClientImpl implements 
AvaticaHttpClient, HttpClie
     }
     context.setCredentialsProvider(credentialsProvider);
     context.setAuthSchemeRegistry(authRegistry);
+    context.setRequestConfig(createRequestConfig());
   }
 
   /**
diff --git a/gradle.properties b/gradle.properties
index 621dd523c..af50e0657 100644
--- a/gradle.properties
+++ b/gradle.properties
@@ -65,8 +65,8 @@ guava.version=32.1.1-jre
 hamcrest.version=1.3
 hsqldb.version=2.4.1
 h2.version=1.4.197
-httpclient5.version=5.2.1
-httpcore5.version=5.2.3
+httpclient5.version=5.4.1
+httpcore5.version=5.3.1
 jackson.version=2.15.2
 jcip-annotations.version=1.0-1
 jcommander.version=1.72

Reply via email to