diff --git a/distribution/server/src/assemble/LICENSE.bin.txt b/distribution/server/src/assemble/LICENSE.bin.txt
index 1f4b2cd2f9ad9..0ae0d22a7eb04 100644
--- a/distribution/server/src/assemble/LICENSE.bin.txt
+++ b/distribution/server/src/assemble/LICENSE.bin.txt
@@ -391,8 +391,7 @@ The Apache Software License, Version 2.0
* AirCompressor
- io.airlift-aircompressor-0.27.jar
* AsyncHttpClient
- - org.asynchttpclient-async-http-client-2.12.4.jar
- - org.asynchttpclient-async-http-client-netty-utils-2.12.4.jar
+ - org.asynchttpclient-async-http-client-3.0.4.jar
* Jetty
- org.eclipse.jetty-jetty-client-9.4.58.v20250814.jar
- org.eclipse.jetty-jetty-continuation-9.4.58.v20250814.jar
@@ -428,7 +427,7 @@ The Apache Software License, Version 2.0
* Kotlin Standard Lib
- org.jetbrains.kotlin-kotlin-stdlib-1.8.20.jar
- org.jetbrains.kotlin-kotlin-stdlib-common-1.8.20.jar
- - org.jetbrains-annotations-13.0.jar
+ - org.jetbrains-annotations-26.0.2.jar
* gRPC
- io.grpc-grpc-all-1.75.0.jar
- io.grpc-grpc-auth-1.75.0.jar
diff --git a/distribution/shell/src/assemble/LICENSE.bin.txt b/distribution/shell/src/assemble/LICENSE.bin.txt
index 6086fc9d1c87f..6d950e14fab84 100644
--- a/distribution/shell/src/assemble/LICENSE.bin.txt
+++ b/distribution/shell/src/assemble/LICENSE.bin.txt
@@ -401,8 +401,7 @@ The Apache Software License, Version 2.0
* AirCompressor
- aircompressor-0.27.jar
* AsyncHttpClient
- - async-http-client-2.12.4.jar
- - async-http-client-netty-utils-2.12.4.jar
+ - async-http-client-3.0.4.jar
* Jetty
- jetty-client-9.4.58.v20250814.jar
- jetty-http-9.4.58.v20250814.jar
diff --git a/pom.xml b/pom.xml
index bc3757de74869..9996755ac3bc8 100644
--- a/pom.xml
+++ b/pom.xml
@@ -261,7 +261,7 @@ flexible messaging model and an intuitive client API.
0.16.1
7.9.2
0.27
- 2.12.4
+ 3.0.4
3.19.0
2.21.0
1.20.0
diff --git a/pulsar-broker-auth-oidc/src/main/java/org/apache/pulsar/broker/authentication/oidc/AuthenticationProviderOpenID.java b/pulsar-broker-auth-oidc/src/main/java/org/apache/pulsar/broker/authentication/oidc/AuthenticationProviderOpenID.java
index 7f6f70c061571..0a8201912903f 100644
--- a/pulsar-broker-auth-oidc/src/main/java/org/apache/pulsar/broker/authentication/oidc/AuthenticationProviderOpenID.java
+++ b/pulsar-broker-auth-oidc/src/main/java/org/apache/pulsar/broker/authentication/oidc/AuthenticationProviderOpenID.java
@@ -47,6 +47,7 @@
import java.security.PublicKey;
import java.security.interfaces.ECPublicKey;
import java.security.interfaces.RSAPublicKey;
+import java.time.Duration;
import java.util.List;
import java.util.Set;
import java.util.concurrent.CompletableFuture;
@@ -169,9 +170,9 @@ public void initialize(Context context) throws IOException {
this.issuers = validateIssuers(getConfigValueAsSet(config, ALLOWED_TOKEN_ISSUERS), requireHttps,
fallbackDiscoveryMode != FallbackDiscoveryMode.DISABLED);
- int connectionTimeout = getConfigValueAsInt(config, HTTP_CONNECTION_TIMEOUT_MILLIS,
+ int connectionTimeoutMs = getConfigValueAsInt(config, HTTP_CONNECTION_TIMEOUT_MILLIS,
HTTP_CONNECTION_TIMEOUT_MILLIS_DEFAULT);
- int readTimeout = getConfigValueAsInt(config, HTTP_READ_TIMEOUT_MILLIS, HTTP_READ_TIMEOUT_MILLIS_DEFAULT);
+ int readTimeoutMs = getConfigValueAsInt(config, HTTP_READ_TIMEOUT_MILLIS, HTTP_READ_TIMEOUT_MILLIS_DEFAULT);
String trustCertsFilePath = getConfigValueAsString(config, ISSUER_TRUST_CERTS_FILE_PATH, null);
SslContext sslContext = null;
// When config is in the conf file but is empty, it defaults to the empty string, which is not meaningful and
@@ -184,8 +185,8 @@ public void initialize(Context context) throws IOException {
}
AsyncHttpClientConfig clientConfig = new DefaultAsyncHttpClientConfig.Builder()
.setCookieStore(null)
- .setConnectTimeout(connectionTimeout)
- .setReadTimeout(readTimeout)
+ .setConnectTimeout(Duration.ofMillis(connectionTimeoutMs))
+ .setReadTimeout(Duration.ofMillis(readTimeoutMs))
.setSslContext(sslContext)
.build();
httpClient = new DefaultAsyncHttpClient(clientConfig);
diff --git a/pulsar-client-admin/src/main/java/org/apache/pulsar/client/admin/internal/http/AsyncHttpConnector.java b/pulsar-client-admin/src/main/java/org/apache/pulsar/client/admin/internal/http/AsyncHttpConnector.java
index ed17df8bd73ec..8e4995199970a 100644
--- a/pulsar-client-admin/src/main/java/org/apache/pulsar/client/admin/internal/http/AsyncHttpConnector.java
+++ b/pulsar-client-admin/src/main/java/org/apache/pulsar/client/admin/internal/http/AsyncHttpConnector.java
@@ -203,7 +203,7 @@ private void configureAsyncHttpClientConfig(ClientConfigurationData conf, int co
confBuilder.setAcquireFreeChannelTimeout(conf.getRequestTimeoutMs());
}
if (conf.getConnectionMaxIdleSeconds() > 0) {
- confBuilder.setPooledConnectionIdleTimeout(conf.getConnectionMaxIdleSeconds() * 1000);
+ confBuilder.setPooledConnectionIdleTimeout(Duration.ofSeconds(conf.getConnectionMaxIdleSeconds()));
}
if (sharedResources != null) {
if (this.eventLoopGroup != null) {
@@ -216,14 +216,14 @@ private void configureAsyncHttpClientConfig(ClientConfigurationData conf, int co
confBuilder.setCookieStore(null);
confBuilder.setUseProxyProperties(true);
confBuilder.setFollowRedirect(false);
- confBuilder.setRequestTimeout(conf.getRequestTimeoutMs());
- confBuilder.setConnectTimeout(connectTimeoutMs);
- confBuilder.setReadTimeout(readTimeoutMs);
+ confBuilder.setRequestTimeout(Duration.ofMillis(conf.getRequestTimeoutMs()));
+ confBuilder.setConnectTimeout(Duration.ofMillis(connectTimeoutMs));
+ confBuilder.setReadTimeout(Duration.ofMillis(readTimeoutMs));
confBuilder.setUserAgent(String.format("Pulsar-Java-v%s%s",
PulsarVersion.getVersion(),
(conf.getDescription() == null ? "" : ("-" + conf.getDescription()))
));
- confBuilder.setRequestTimeout(requestTimeoutMs);
+ confBuilder.setRequestTimeout(Duration.ofMillis(requestTimeoutMs));
confBuilder.setIoThreadsCount(conf.getNumIoThreads());
confBuilder.setKeepAliveStrategy(new DefaultKeepAliveStrategy() {
@Override
diff --git a/pulsar-client/src/main/java/org/apache/pulsar/client/impl/ControlledClusterFailover.java b/pulsar-client/src/main/java/org/apache/pulsar/client/impl/ControlledClusterFailover.java
index 032069786a416..02e20f24c025d 100644
--- a/pulsar-client/src/main/java/org/apache/pulsar/client/impl/ControlledClusterFailover.java
+++ b/pulsar-client/src/main/java/org/apache/pulsar/client/impl/ControlledClusterFailover.java
@@ -27,6 +27,7 @@
import java.io.IOException;
import java.net.InetSocketAddress;
import java.nio.charset.StandardCharsets;
+import java.time.Duration;
import java.util.Collections;
import java.util.LinkedHashMap;
import java.util.Map;
@@ -91,8 +92,8 @@ private AsyncHttpClient buildHttpClient() {
confBuilder.setUseProxyProperties(true);
confBuilder.setFollowRedirect(true);
confBuilder.setMaxRedirects(DEFAULT_MAX_REDIRECTS);
- confBuilder.setConnectTimeout(DEFAULT_CONNECT_TIMEOUT_IN_SECONDS * 1000);
- confBuilder.setReadTimeout(DEFAULT_READ_TIMEOUT_IN_SECONDS * 1000);
+ confBuilder.setConnectTimeout(Duration.ofSeconds(DEFAULT_CONNECT_TIMEOUT_IN_SECONDS));
+ confBuilder.setReadTimeout(Duration.ofSeconds(DEFAULT_READ_TIMEOUT_IN_SECONDS));
confBuilder.setUserAgent(String.format("Pulsar-Java-v%s", PulsarVersion.getVersion()));
confBuilder.setKeepAliveStrategy(new DefaultKeepAliveStrategy() {
@Override
diff --git a/pulsar-client/src/main/java/org/apache/pulsar/client/impl/HttpClient.java b/pulsar-client/src/main/java/org/apache/pulsar/client/impl/HttpClient.java
index 72fcf82b85958..f2f06bc29ff1e 100644
--- a/pulsar-client/src/main/java/org/apache/pulsar/client/impl/HttpClient.java
+++ b/pulsar-client/src/main/java/org/apache/pulsar/client/impl/HttpClient.java
@@ -30,6 +30,7 @@
import java.net.InetSocketAddress;
import java.net.URI;
import java.net.URL;
+import java.time.Duration;
import java.util.Map;
import java.util.Map.Entry;
import java.util.Set;
@@ -89,8 +90,8 @@ protected HttpClient(ClientConfigurationData conf, EventLoopGroup eventLoopGroup
confBuilder.setUseProxyProperties(true);
confBuilder.setFollowRedirect(true);
confBuilder.setMaxRedirects(conf.getMaxLookupRedirects());
- confBuilder.setConnectTimeout(DEFAULT_CONNECT_TIMEOUT_IN_SECONDS * 1000);
- confBuilder.setReadTimeout(DEFAULT_READ_TIMEOUT_IN_SECONDS * 1000);
+ confBuilder.setConnectTimeout(Duration.ofSeconds(DEFAULT_CONNECT_TIMEOUT_IN_SECONDS));
+ confBuilder.setReadTimeout(Duration.ofSeconds(DEFAULT_READ_TIMEOUT_IN_SECONDS));
confBuilder.setUserAgent(String.format("Pulsar-Java-v%s%s",
PulsarVersion.getVersion(),
(conf.getDescription() == null ? "" : ("-" + conf.getDescription()))
diff --git a/pulsar-client/src/main/java/org/apache/pulsar/client/impl/auth/oauth2/FlowBase.java b/pulsar-client/src/main/java/org/apache/pulsar/client/impl/auth/oauth2/FlowBase.java
index 6cc9f8e41b5e4..464576b1dfe4c 100644
--- a/pulsar-client/src/main/java/org/apache/pulsar/client/impl/auth/oauth2/FlowBase.java
+++ b/pulsar-client/src/main/java/org/apache/pulsar/client/impl/auth/oauth2/FlowBase.java
@@ -69,11 +69,9 @@ private AsyncHttpClient defaultHttpClient(Duration readTimeout, Duration connect
confBuilder.setCookieStore(null);
confBuilder.setUseProxyProperties(true);
confBuilder.setFollowRedirect(true);
- confBuilder.setConnectTimeout(
- getParameterDurationToMillis(CONFIG_PARAM_CONNECT_TIMEOUT, connectTimeout,
+ confBuilder.setConnectTimeout(getParameterDuration(CONFIG_PARAM_CONNECT_TIMEOUT, connectTimeout,
DEFAULT_CONNECT_TIMEOUT));
- confBuilder.setReadTimeout(
- getParameterDurationToMillis(CONFIG_PARAM_READ_TIMEOUT, readTimeout, DEFAULT_READ_TIMEOUT));
+ confBuilder.setReadTimeout(getParameterDuration(CONFIG_PARAM_READ_TIMEOUT, readTimeout, DEFAULT_READ_TIMEOUT));
confBuilder.setUserAgent(String.format("Pulsar-Java-v%s", PulsarVersion.getVersion()));
if (StringUtils.isNotBlank(trustCertsFilePath)) {
try {
@@ -87,17 +85,14 @@ private AsyncHttpClient defaultHttpClient(Duration readTimeout, Duration connect
return new DefaultAsyncHttpClient(confBuilder.build());
}
- private int getParameterDurationToMillis(String name, Duration value, Duration defaultValue) {
- Duration duration;
+ private Duration getParameterDuration(String name, Duration value, Duration defaultValue) {
if (value == null) {
log.info("Configuration for [{}] is using the default value: [{}]", name, defaultValue);
- duration = defaultValue;
+ return defaultValue;
} else {
log.info("Configuration for [{}] is: [{}]", name, value);
- duration = value;
+ return value;
}
-
- return (int) duration.toMillis();
}
public void initialize() throws PulsarClientException {