attemptAsync(HttpRequest request, boolean eagerlyRead
new AzureNettyHttpClientContext(responseTimeout, progressReporter)));
}
+ if (request.getHeaders().get(HttpHeaderName.CONTENT_LENGTH) == null) {
+ nettyRequest
+ = nettyRequest.contextWrite(ctx -> ctx.put(NettyUtility.DID_NOT_SET_CONTENT_LENGTH_CONTEXT_KEY, true));
+ }
+
return nettyRequest.single().flatMap(responseAndHeaders -> {
HttpResponse response = responseAndHeaders.getT1();
if (addProxyHandler && response.getStatusCode() == 407) {
diff --git a/sdk/core/azure-core-http-netty/src/main/java/com/azure/core/http/netty/NettyAsyncHttpClientBuilder.java b/sdk/core/azure-core-http-netty/src/main/java/com/azure/core/http/netty/NettyAsyncHttpClientBuilder.java
index 18c9b4bb7f35..a6ee2f26063f 100644
--- a/sdk/core/azure-core-http-netty/src/main/java/com/azure/core/http/netty/NettyAsyncHttpClientBuilder.java
+++ b/sdk/core/azure-core-http-netty/src/main/java/com/azure/core/http/netty/NettyAsyncHttpClientBuilder.java
@@ -15,21 +15,27 @@
import com.azure.core.util.Context;
import com.azure.core.util.CoreUtils;
import com.azure.core.util.logging.ClientLogger;
+import io.netty.channel.ChannelHandlerContext;
import io.netty.channel.ChannelOption;
+import io.netty.channel.ChannelOutboundHandlerAdapter;
+import io.netty.channel.ChannelPromise;
import io.netty.channel.EventLoopGroup;
import io.netty.channel.nio.NioEventLoopGroup;
+import io.netty.handler.codec.http.HttpHeaderNames;
import io.netty.handler.logging.LoggingHandler;
import io.netty.resolver.AddressResolverGroup;
import io.netty.resolver.DefaultAddressResolverGroup;
import io.netty.resolver.NoopAddressResolverGroup;
import reactor.netty.Connection;
import reactor.netty.NettyPipeline;
+import reactor.netty.ReactorNetty;
import reactor.netty.http.client.HttpClient;
import reactor.netty.http.client.HttpClientRequest;
import reactor.netty.http.client.HttpResponseDecoderSpec;
import reactor.netty.resources.ConnectionProvider;
import reactor.netty.transport.AddressUtils;
import reactor.netty.transport.ProxyProvider;
+import reactor.util.context.ContextView;
import java.net.InetSocketAddress;
import java.net.SocketAddress;
@@ -171,6 +177,7 @@ public NettyAsyncHttpClientBuilder(HttpClient nettyHttpClient) {
* @return A new Netty-backed {@link com.azure.core.http.HttpClient} instance.
* @throws IllegalStateException If the builder is configured to use an unknown proxy type.
*/
+ @SuppressWarnings("deprecation")
public com.azure.core.http.HttpClient build() {
HttpClient nettyHttpClient;
@@ -235,6 +242,31 @@ public com.azure.core.http.HttpClient build() {
nettyHttpClient = nettyHttpClient.runOn(eventLoopGroup);
}
+ // Beginning some point between Reactor Netty 1.0.48 and 1.2.1, Reactor Netty began to add 'Content-Length: 0'
+ // on GET and HEAD requests with empty bodies. We don't want that, so add a modifier to the Reactor Netty
+ // HttpClient to remove the header if the HTTP method is GET or HEAD and the body is empty.
+ // Logic copied from comment provided by one of the Reactor Netty maintainers:
+ // https://github.com/reactor/reactor-netty/issues/2900#issuecomment-1722136659
+ nettyHttpClient = nettyHttpClient.doOnChannelInit((obs, ch, add) -> ch.pipeline()
+ .addAfter(NettyPipeline.HttpCodec, "remove-content-length-header", new ChannelOutboundHandlerAdapter() {
+ @Override
+ public void write(ChannelHandlerContext ctx, Object msg, ChannelPromise promise) {
+ if (msg instanceof io.netty.handler.codec.http.HttpRequest) {
+ io.netty.handler.codec.http.HttpRequest nettyRequest
+ = (io.netty.handler.codec.http.HttpRequest) msg;
+ ContextView channelContext = ReactorNetty.getChannelContext(ctx.channel());
+ if (channelContext != null
+ && Boolean.TRUE.equals(
+ channelContext.getOrDefault(NettyUtility.DID_NOT_SET_CONTENT_LENGTH_CONTEXT_KEY, false))
+ && "0".equals(nettyRequest.headers().get(HttpHeaderNames.CONTENT_LENGTH))) {
+ // Remove the content-length header if it is 0 and the SDK did not set it.
+ nettyRequest.headers().remove(HttpHeaderNames.CONTENT_LENGTH);
+ }
+ }
+ ctx.write(msg, promise);
+ }
+ }));
+
// Proxy configurations are present, set up a proxy in Netty.
if (buildProxyOptions != null) {
// Determine if custom handling will be used, otherwise use Netty's built-in handlers.
diff --git a/sdk/core/azure-core-http-netty/src/main/java/com/azure/core/http/netty/implementation/NettyUtility.java b/sdk/core/azure-core-http-netty/src/main/java/com/azure/core/http/netty/implementation/NettyUtility.java
index 95eb5bf703c6..5b646c5916cf 100644
--- a/sdk/core/azure-core-http-netty/src/main/java/com/azure/core/http/netty/implementation/NettyUtility.java
+++ b/sdk/core/azure-core-http-netty/src/main/java/com/azure/core/http/netty/implementation/NettyUtility.java
@@ -10,7 +10,6 @@
import io.netty.buffer.ByteBuf;
import io.netty.util.Version;
import reactor.netty.Connection;
-import reactor.netty.channel.ChannelOperations;
import java.io.IOException;
import java.net.URL;
@@ -44,6 +43,11 @@ public final class NettyUtility {
// Netty artifact that should match the 'netty-tcnative.version' property in the pom.xml file.
private static final String NETTY_TCNATIVE_VERSION_ARTIFACT = "netty-tcnative-boringssl-static";
+ /**
+ * Key for the context to indicate that the content length was not set by the SDK.
+ */
+ public static final String DID_NOT_SET_CONTENT_LENGTH_CONTEXT_KEY = "sdk-did-not-set-content-length";
+
/**
* Deep copies the passed {@link ByteBuf} into a {@link ByteBuffer}.
*
@@ -65,21 +69,8 @@ public static ByteBuffer deepCopyBuffer(ByteBuf byteBuf) {
* @param reactorNettyConnection The connection to close.
*/
public static void closeConnection(Connection reactorNettyConnection) {
- // ChannelOperations is generally the default implementation of Connection used.
- //
- // Using the specific subclass allows for a finer grain handling.
- if (reactorNettyConnection instanceof ChannelOperations) {
- ChannelOperations, ?> channelOperations = (ChannelOperations, ?>) reactorNettyConnection;
-
- // Given that this is an HttpResponse the only time this will be called is when the outbound has completed.
- //
- // From there the only thing that needs to be checked is whether the inbound has been disposed (completed),
- // and if not dispose it (aka drain it).
- if (!channelOperations.isInboundDisposed()) {
- channelOperations.channel().eventLoop().execute(channelOperations::discard);
- }
- } else if (!reactorNettyConnection.isDisposed()) {
- reactorNettyConnection.channel().eventLoop().execute(reactorNettyConnection::dispose);
+ if (!reactorNettyConnection.isDisposed()) {
+ reactorNettyConnection.dispose();
}
}
diff --git a/sdk/core/azure-core-http-netty/src/test/java/com/azure/core/http/netty/NettyAsyncHttpClientProviderTests.java b/sdk/core/azure-core-http-netty/src/test/java/com/azure/core/http/netty/NettyAsyncHttpClientProviderTests.java
index a5873b41bd49..0fb34bdb597a 100644
--- a/sdk/core/azure-core-http-netty/src/test/java/com/azure/core/http/netty/NettyAsyncHttpClientProviderTests.java
+++ b/sdk/core/azure-core-http-netty/src/test/java/com/azure/core/http/netty/NettyAsyncHttpClientProviderTests.java
@@ -11,7 +11,7 @@
import io.netty.channel.ChannelOption;
import org.junit.jupiter.api.Disabled;
import org.junit.jupiter.api.Test;
-import reactor.netty.transport.ProxyProvider;
+import reactor.netty.http.client.HttpClientConfig;
import java.net.InetSocketAddress;
import java.time.Duration;
@@ -21,6 +21,7 @@
import static org.junit.jupiter.api.Assertions.assertInstanceOf;
import static org.junit.jupiter.api.Assertions.assertThrows;
import static org.junit.jupiter.api.Assertions.assertTrue;
+import static org.junit.jupiter.api.Assertions.fail;
/**
* Tests {@link NettyAsyncHttpClientProvider}.
@@ -35,10 +36,7 @@ public void nullOptionsReturnsBaseClient() {
if (environmentProxy == null) {
assertFalse(httpClient.nettyClient.configuration().hasProxy());
} else {
- assertTrue(httpClient.nettyClient.configuration().hasProxy());
-
- ProxyProvider proxyProvider = httpClient.nettyClient.configuration().proxyProvider();
- assertEquals(environmentProxy.getAddress(), proxyProvider.getAddress().get());
+ verifyProxyAddress(environmentProxy, httpClient.nettyClient.configuration());
}
}
@@ -51,10 +49,7 @@ public void defaultOptionsReturnsBaseClient() {
if (environmentProxy == null) {
assertFalse(httpClient.nettyClient.configuration().hasProxy());
} else {
- assertTrue(httpClient.nettyClient.configuration().hasProxy());
-
- ProxyProvider proxyProvider = httpClient.nettyClient.configuration().proxyProvider();
- assertEquals(environmentProxy.getAddress(), proxyProvider.getAddress().get());
+ verifyProxyAddress(environmentProxy, httpClient.nettyClient.configuration());
}
}
@@ -66,10 +61,20 @@ public void optionsWithAProxy() {
NettyAsyncHttpClient httpClient
= (NettyAsyncHttpClient) new NettyAsyncHttpClientProvider().createInstance(clientOptions);
- assertTrue(httpClient.nettyClient.configuration().hasProxy());
+ verifyProxyAddress(proxyOptions, httpClient.nettyClient.configuration());
+ }
+
+ @SuppressWarnings("deprecation")
+ private static void verifyProxyAddress(ProxyOptions proxyOptions, HttpClientConfig httpClientConfig) {
+ assertTrue(httpClientConfig.hasProxy());
- ProxyProvider proxyProvider = httpClient.nettyClient.configuration().proxyProvider();
- assertEquals(proxyOptions.getAddress(), proxyProvider.getAddress().get());
+ if (httpClientConfig.proxyProvider() != null) {
+ assertEquals(proxyOptions.getAddress(), httpClientConfig.proxyProvider().getAddress().get());
+ } else if (httpClientConfig.proxyProviderSupplier() != null) {
+ assertEquals(proxyOptions.getAddress(), httpClientConfig.proxyProviderSupplier().get().getAddress().get());
+ } else {
+ fail("No proxy provider or proxy provider supplier found in the http client configuration.");
+ }
}
@Test
@@ -121,7 +126,7 @@ public void testIncorrectExplicitProvider() {
assertThrows(IllegalStateException.class, () -> HttpClient.createDefault(options));
}
- class AnotherHttpClientProvider implements HttpClientProvider {
+ static class AnotherHttpClientProvider implements HttpClientProvider {
@Override
public HttpClient createInstance() {
throw new IllegalStateException("should never be called");
diff --git a/sdk/core/azure-core-http-netty/src/test/java/com/azure/core/http/netty/NettyAsyncHttpClientTests.java b/sdk/core/azure-core-http-netty/src/test/java/com/azure/core/http/netty/NettyAsyncHttpClientTests.java
index f31c6ef2913c..43ff3152a381 100644
--- a/sdk/core/azure-core-http-netty/src/test/java/com/azure/core/http/netty/NettyAsyncHttpClientTests.java
+++ b/sdk/core/azure-core-http-netty/src/test/java/com/azure/core/http/netty/NettyAsyncHttpClientTests.java
@@ -79,6 +79,7 @@
import static com.azure.core.http.netty.implementation.NettyHttpClientLocalTestServer.ERROR_BODY_PATH;
import static com.azure.core.http.netty.implementation.NettyHttpClientLocalTestServer.EXPECTED_HEADER;
import static com.azure.core.http.netty.implementation.NettyHttpClientLocalTestServer.HTTP_HEADERS_PATH;
+import static com.azure.core.http.netty.implementation.NettyHttpClientLocalTestServer.INVALID_CONTENT_LENGTH_ZERO;
import static com.azure.core.http.netty.implementation.NettyHttpClientLocalTestServer.IO_EXCEPTION_PATH;
import static com.azure.core.http.netty.implementation.NettyHttpClientLocalTestServer.LONG_BODY;
import static com.azure.core.http.netty.implementation.NettyHttpClientLocalTestServer.LONG_BODY_PATH;
@@ -92,6 +93,7 @@
import static com.azure.core.http.netty.implementation.NettyHttpClientLocalTestServer.SHORT_POST_BODY_WITH_VALIDATION_PATH;
import static com.azure.core.http.netty.implementation.NettyHttpClientLocalTestServer.TEST_HEADER;
import static com.azure.core.http.netty.implementation.NettyHttpClientLocalTestServer.TIMEOUT;
+import static com.azure.core.http.netty.implementation.NettyHttpClientLocalTestServer.VALID_CONTENT_LENGTH_ZERO;
import static com.azure.core.validation.http.HttpValidatonUtils.assertArraysEqual;
import static org.junit.jupiter.api.Assertions.assertArrayEquals;
import static org.junit.jupiter.api.Assertions.assertDoesNotThrow;
@@ -635,6 +637,48 @@ public void perCallTimeoutSync() {
}
}
+ @Test
+ public void sdkCanSendContentLengthZeroAsync() {
+ HttpClient client = new NettyAsyncHttpClientProvider().createInstance();
+ HttpRequest request = new HttpRequest(HttpMethod.GET, url(VALID_CONTENT_LENGTH_ZERO))
+ .setHeader(HttpHeaderName.CONTENT_LENGTH, "0");
+
+ StepVerifier.create(client.send(request))
+ .assertNext(response -> assertEquals(200, response.getStatusCode()))
+ .verifyComplete();
+ }
+
+ @Test
+ public void sdkCanSendContentLengthZeroSync() {
+ HttpClient client = new NettyAsyncHttpClientProvider().createInstance();
+ HttpRequest request = new HttpRequest(HttpMethod.GET, url(VALID_CONTENT_LENGTH_ZERO))
+ .setHeader(HttpHeaderName.CONTENT_LENGTH, "0");
+
+ try (HttpResponse response = client.sendSync(request, Context.NONE)) {
+ assertEquals(200, response.getStatusCode());
+ }
+ }
+
+ @Test
+ public void reactorNettySettingContentLengthZeroIsInvalidAsync() {
+ HttpClient client = new NettyAsyncHttpClientProvider().createInstance();
+ HttpRequest request = new HttpRequest(HttpMethod.GET, url(INVALID_CONTENT_LENGTH_ZERO));
+
+ StepVerifier.create(client.send(request))
+ .assertNext(response -> assertEquals(200, response.getStatusCode()))
+ .verifyComplete();
+ }
+
+ @Test
+ public void reactorNettySettingContentLengthZeroIsInvalidSync() {
+ HttpClient client = new NettyAsyncHttpClientProvider().createInstance();
+ HttpRequest request = new HttpRequest(HttpMethod.GET, url(INVALID_CONTENT_LENGTH_ZERO));
+
+ try (HttpResponse response = client.sendSync(request, Context.NONE)) {
+ assertEquals(200, response.getStatusCode());
+ }
+ }
+
private static Stream requestHeaderSupplier() {
return Stream.of(Arguments.of(null, NULL_REPLACEMENT), Arguments.of("", ""), Arguments.of("aValue", "aValue"));
}
diff --git a/sdk/core/azure-core-http-netty/src/test/java/com/azure/core/http/netty/implementation/NettyHttpClientLocalTestServer.java b/sdk/core/azure-core-http-netty/src/test/java/com/azure/core/http/netty/implementation/NettyHttpClientLocalTestServer.java
index b72dca716552..7a40001e4abb 100644
--- a/sdk/core/azure-core-http-netty/src/test/java/com/azure/core/http/netty/implementation/NettyHttpClientLocalTestServer.java
+++ b/sdk/core/azure-core-http-netty/src/test/java/com/azure/core/http/netty/implementation/NettyHttpClientLocalTestServer.java
@@ -37,6 +37,8 @@ public final class NettyHttpClientLocalTestServer {
public static final String RETURN_HEADERS_AS_IS_PATH = "/returnHeadersAsIs";
public static final String PROXY_TO_ADDRESS = "/proxyToAddress";
public static final String TIMEOUT = "/timeout";
+ public static final String VALID_CONTENT_LENGTH_ZERO = "/validContentLengthZero";
+ public static final String INVALID_CONTENT_LENGTH_ZERO = "/invalidContentLengthZero";
public static final byte[] SHORT_BODY = "hi there".getBytes(StandardCharsets.UTF_8);
public static final byte[] LONG_BODY = createLongBody();
@@ -145,6 +147,20 @@ private static LocalTestServer initializeServer() {
} catch (InterruptedException e) {
throw new ServletException(e);
}
+ } else if (VALID_CONTENT_LENGTH_ZERO.equals(path)) {
+ String contentLength = req.getHeader("Content-Length");
+ if ("0".equals(contentLength)) {
+ resp.setStatus(200);
+ } else {
+ resp.setStatus(400);
+ }
+ } else if (INVALID_CONTENT_LENGTH_ZERO.equals(path)) {
+ String contentLength = req.getHeader("Content-Length");
+ if ("0".equals(contentLength)) {
+ resp.setStatus(400);
+ } else {
+ resp.setStatus(200);
+ }
} else {
throw new ServletException("Unexpected request: " + req.getMethod() + " " + path);
}
diff --git a/sdk/core/azure-core-http-okhttp/pom.xml b/sdk/core/azure-core-http-okhttp/pom.xml
index f5a4c1402866..bd43409dbe3b 100644
--- a/sdk/core/azure-core-http-okhttp/pom.xml
+++ b/sdk/core/azure-core-http-okhttp/pom.xml
@@ -111,7 +111,7 @@
io.projectreactor
reactor-test
- 3.4.41
+ 3.7.5
test
diff --git a/sdk/core/azure-core-http-vertx/pom.xml b/sdk/core/azure-core-http-vertx/pom.xml
index 0fa8817a44c5..b97e16d4c96b 100644
--- a/sdk/core/azure-core-http-vertx/pom.xml
+++ b/sdk/core/azure-core-http-vertx/pom.xml
@@ -107,7 +107,7 @@
io.projectreactor
reactor-test
- 3.4.41
+ 3.7.5
test
diff --git a/sdk/core/azure-core-management/pom.xml b/sdk/core/azure-core-management/pom.xml
index fe5c5fb3d919..7a44fff82e8c 100644
--- a/sdk/core/azure-core-management/pom.xml
+++ b/sdk/core/azure-core-management/pom.xml
@@ -106,7 +106,7 @@
io.projectreactor
reactor-test
- 3.4.41
+ 3.7.5
test
diff --git a/sdk/core/azure-core-perf/pom.xml b/sdk/core/azure-core-perf/pom.xml
index bdbbf299a8bc..24cc8beefc7e 100644
--- a/sdk/core/azure-core-perf/pom.xml
+++ b/sdk/core/azure-core-perf/pom.xml
@@ -64,7 +64,7 @@
io.projectreactor
reactor-test
- 3.4.41
+ 3.7.5
test
diff --git a/sdk/core/azure-core-serializer-avro-apache/pom.xml b/sdk/core/azure-core-serializer-avro-apache/pom.xml
index f04508ee01e9..420bc6e65a55 100644
--- a/sdk/core/azure-core-serializer-avro-apache/pom.xml
+++ b/sdk/core/azure-core-serializer-avro-apache/pom.xml
@@ -94,7 +94,7 @@
io.projectreactor
reactor-test
- 3.4.41
+ 3.7.5
test
diff --git a/sdk/core/azure-core-serializer-json-gson/pom.xml b/sdk/core/azure-core-serializer-json-gson/pom.xml
index 004bf556658e..0b856102f7e8 100644
--- a/sdk/core/azure-core-serializer-json-gson/pom.xml
+++ b/sdk/core/azure-core-serializer-json-gson/pom.xml
@@ -121,7 +121,7 @@
io.projectreactor
reactor-test
- 3.4.41
+ 3.7.5
test
diff --git a/sdk/core/azure-core-serializer-json-jackson/pom.xml b/sdk/core/azure-core-serializer-json-jackson/pom.xml
index b4482bd71236..533fbbb86511 100644
--- a/sdk/core/azure-core-serializer-json-jackson/pom.xml
+++ b/sdk/core/azure-core-serializer-json-jackson/pom.xml
@@ -151,7 +151,7 @@
io.projectreactor
reactor-test
- 3.4.41
+ 3.7.5
test
diff --git a/sdk/core/azure-core-test/pom.xml b/sdk/core/azure-core-test/pom.xml
index 3a26f23e58c0..b09f6fe68289 100644
--- a/sdk/core/azure-core-test/pom.xml
+++ b/sdk/core/azure-core-test/pom.xml
@@ -102,7 +102,7 @@
io.projectreactor
reactor-test
- 3.4.41
+ 3.7.5
@@ -145,7 +145,7 @@
org.junit.jupiter:junit-jupiter-api:[5.11.2]
org.junit.jupiter:junit-jupiter-engine:[5.11.2]
org.junit.jupiter:junit-jupiter-params:[5.11.2]
- io.projectreactor:reactor-test:[3.4.41]
+ io.projectreactor:reactor-test:[3.7.5]
org.apache.ant:ant:[1.10.14]
diff --git a/sdk/core/azure-core-tracing-opentelemetry/pom.xml b/sdk/core/azure-core-tracing-opentelemetry/pom.xml
index e77fabfedd60..fbd28c0cce58 100644
--- a/sdk/core/azure-core-tracing-opentelemetry/pom.xml
+++ b/sdk/core/azure-core-tracing-opentelemetry/pom.xml
@@ -103,7 +103,7 @@
io.projectreactor
reactor-test
- 3.4.41
+ 3.7.5
test
diff --git a/sdk/core/azure-core-version-tests/pom.xml b/sdk/core/azure-core-version-tests/pom.xml
index ac5be79286b3..6485cc4a2ebd 100644
--- a/sdk/core/azure-core-version-tests/pom.xml
+++ b/sdk/core/azure-core-version-tests/pom.xml
@@ -95,7 +95,7 @@
io.projectreactor
reactor-core
- 3.4.41
+ 3.7.5
+ io.projectreactor:reactor-core:[3.7.5]
com.fasterxml.jackson.core:jackson-annotations:[2.18.3]
com.fasterxml.jackson.core:jackson-core:[2.18.3]
com.fasterxml.jackson.core:jackson-databind:[2.18.3]
diff --git a/sdk/core/azure-core/pom.xml b/sdk/core/azure-core/pom.xml
index 33fac90ff8fc..5662866c5152 100644
--- a/sdk/core/azure-core/pom.xml
+++ b/sdk/core/azure-core/pom.xml
@@ -149,7 +149,7 @@
io.projectreactor
reactor-core
- 3.4.41
+ 3.7.5
@@ -169,7 +169,7 @@
io.projectreactor
reactor-test
- 3.4.41
+ 3.7.5
test
@@ -232,7 +232,7 @@
- io.projectreactor:reactor-core:[3.4.41]
+ io.projectreactor:reactor-core:[3.7.5]
com.fasterxml.jackson.core:jackson-annotations:[2.18.3]
com.fasterxml.jackson.core:jackson-core:[2.18.3]
com.fasterxml.jackson.core:jackson-databind:[2.18.3]
diff --git a/sdk/cosmos/azure-cosmos-encryption/pom.xml b/sdk/cosmos/azure-cosmos-encryption/pom.xml
index 8a51b4432f69..92ab14c0b493 100644
--- a/sdk/cosmos/azure-cosmos-encryption/pom.xml
+++ b/sdk/cosmos/azure-cosmos-encryption/pom.xml
@@ -176,7 +176,7 @@ Licensed under the MIT License.
io.projectreactor
reactor-test
- 3.4.41
+ 3.7.5
test
diff --git a/sdk/cosmos/azure-cosmos-spark-account-data-resolver-sample/pom.xml b/sdk/cosmos/azure-cosmos-spark-account-data-resolver-sample/pom.xml
index cf102a09cf07..57e8bb35f349 100644
--- a/sdk/cosmos/azure-cosmos-spark-account-data-resolver-sample/pom.xml
+++ b/sdk/cosmos/azure-cosmos-spark-account-data-resolver-sample/pom.xml
@@ -159,7 +159,7 @@
io.projectreactor
reactor-test
- 3.4.41
+ 3.7.5
test
diff --git a/sdk/cosmos/azure-cosmos-spark_3_2-12/pom.xml b/sdk/cosmos/azure-cosmos-spark_3_2-12/pom.xml
index 2c27449193b6..073fd796d1ca 100644
--- a/sdk/cosmos/azure-cosmos-spark_3_2-12/pom.xml
+++ b/sdk/cosmos/azure-cosmos-spark_3_2-12/pom.xml
@@ -136,7 +136,7 @@
io.projectreactor
reactor-test
- 3.4.41
+ 3.7.5
test
diff --git a/sdk/cosmos/azure-cosmos-tests/pom.xml b/sdk/cosmos/azure-cosmos-tests/pom.xml
index 9351a9019a76..43a0e542582e 100644
--- a/sdk/cosmos/azure-cosmos-tests/pom.xml
+++ b/sdk/cosmos/azure-cosmos-tests/pom.xml
@@ -175,7 +175,7 @@ Licensed under the MIT License.
io.projectreactor
reactor-test
- 3.4.41
+ 3.7.5
test
diff --git a/sdk/e2e/pom.xml b/sdk/e2e/pom.xml
index 27d3dee94ab3..933516cdcbd4 100644
--- a/sdk/e2e/pom.xml
+++ b/sdk/e2e/pom.xml
@@ -82,7 +82,7 @@
io.projectreactor
reactor-test
- 3.4.41
+ 3.7.5
test
diff --git a/sdk/eventhubs/azure-messaging-eventhubs-checkpointstore-jedis/pom.xml b/sdk/eventhubs/azure-messaging-eventhubs-checkpointstore-jedis/pom.xml
index 1319f3504bd9..c3592f9dca8a 100644
--- a/sdk/eventhubs/azure-messaging-eventhubs-checkpointstore-jedis/pom.xml
+++ b/sdk/eventhubs/azure-messaging-eventhubs-checkpointstore-jedis/pom.xml
@@ -83,7 +83,7 @@
io.projectreactor
reactor-test
- 3.4.41
+ 3.7.5
test
diff --git a/sdk/eventhubs/azure-messaging-eventhubs-stress/src/main/java/com/azure/messaging/eventhubs/stress/scenarios/EventSenderBuffered.java b/sdk/eventhubs/azure-messaging-eventhubs-stress/src/main/java/com/azure/messaging/eventhubs/stress/scenarios/EventSenderBuffered.java
index 412387140f01..f143b1c83a9f 100644
--- a/sdk/eventhubs/azure-messaging-eventhubs-stress/src/main/java/com/azure/messaging/eventhubs/stress/scenarios/EventSenderBuffered.java
+++ b/sdk/eventhubs/azure-messaging-eventhubs-stress/src/main/java/com/azure/messaging/eventhubs/stress/scenarios/EventSenderBuffered.java
@@ -91,9 +91,8 @@ private Mono createEvent() {
private EventHubBufferedProducerClientBuilder getBuilder() {
final TokenCredential tokenCredential = new DefaultAzureCredentialBuilder().build();
- final EventHubBufferedProducerClientBuilder builder = new EventHubBufferedProducerClientBuilder()
- .credential(options.getEventHubsFullyQualifiedNamespace(), options.getEventHubsEventHubName(),
- tokenCredential);
+ final EventHubBufferedProducerClientBuilder builder = new EventHubBufferedProducerClientBuilder().credential(
+ options.getEventHubsFullyQualifiedNamespace(), options.getEventHubsEventHubName(), tokenCredential);
if (maxEventBufferLengthPerPartition > 0) {
builder.maxEventBufferLengthPerPartition(maxEventBufferLengthPerPartition);
diff --git a/sdk/eventhubs/azure-messaging-eventhubs-stress/src/main/java/com/azure/messaging/eventhubs/stress/util/TelemetryHelper.java b/sdk/eventhubs/azure-messaging-eventhubs-stress/src/main/java/com/azure/messaging/eventhubs/stress/util/TelemetryHelper.java
index 2aaa4c248aae..20d47f0a3187 100644
--- a/sdk/eventhubs/azure-messaging-eventhubs-stress/src/main/java/com/azure/messaging/eventhubs/stress/util/TelemetryHelper.java
+++ b/sdk/eventhubs/azure-messaging-eventhubs-stress/src/main/java/com/azure/messaging/eventhubs/stress/util/TelemetryHelper.java
@@ -62,9 +62,14 @@ public class TelemetryHelper {
private final Attributes canceledAttributes;
static {
+ enableMetrics();
+ OTEL = init();
+ }
+
+ @SuppressWarnings("deprecation")
+ private static void enableMetrics() {
// enables micrometer metrics from Reactor schedulers allowing to monitor thread pool usage and starvation
Schedulers.enableMetrics();
- OTEL = init();
}
/**
diff --git a/sdk/eventhubs/azure-messaging-eventhubs-stress/src/main/java/com/azure/messaging/eventhubs/stress/util/TestUtils.java b/sdk/eventhubs/azure-messaging-eventhubs-stress/src/main/java/com/azure/messaging/eventhubs/stress/util/TestUtils.java
index 988ce6f29a44..b7b9b9f0ae0c 100644
--- a/sdk/eventhubs/azure-messaging-eventhubs-stress/src/main/java/com/azure/messaging/eventhubs/stress/util/TestUtils.java
+++ b/sdk/eventhubs/azure-messaging-eventhubs-stress/src/main/java/com/azure/messaging/eventhubs/stress/util/TestUtils.java
@@ -42,9 +42,8 @@ public static EventProcessorClientBuilder getProcessorBuilder(ScenarioOptions op
.checkpointStore(new BlobCheckpointStore(getContainerClient(options)));
if (options.useV2Stack()) {
- Configuration configuration = new ConfigurationBuilder()
- .putProperty("com.azure.messaging.eventhubs.v2", "true")
- .build();
+ Configuration configuration
+ = new ConfigurationBuilder().putProperty("com.azure.messaging.eventhubs.v2", "true").build();
builder.configuration(configuration);
}
@@ -70,9 +69,8 @@ public static EventHubClientBuilder getBuilder(ScenarioOptions options) {
.consumerGroup(options.getEventHubsConsumerGroup());
if (options.useV2Stack()) {
- Configuration configuration = new ConfigurationBuilder()
- .putProperty("com.azure.messaging.eventhubs.v2", "true")
- .build();
+ Configuration configuration
+ = new ConfigurationBuilder().putProperty("com.azure.messaging.eventhubs.v2", "true").build();
builder.configuration(configuration);
}
@@ -83,8 +81,7 @@ public static EventHubClientBuilder getBuilder(ScenarioOptions options) {
private static BlobContainerAsyncClient getContainerClient(ScenarioOptions options) {
final DefaultAzureCredential credential = new DefaultAzureCredentialBuilder().build();
- return new BlobContainerClientBuilder()
- .endpoint(options.getStorageBlobEndpointUri())
+ return new BlobContainerClientBuilder().endpoint(options.getStorageBlobEndpointUri())
.containerName(options.getStorageContainerName())
.credential(credential)
.buildAsyncClient();
@@ -105,11 +102,11 @@ private static void resetCheckpoint(ScenarioOptions options) {
String eventHub = options.getEventHubsEventHubName();
String consumerGroup = options.getEventHubsConsumerGroup();
DefaultAzureCredential credential = new DefaultAzureCredentialBuilder().build();
- BlobContainerClient containerClient = new BlobContainerClientBuilder()
- .endpoint(options.getStorageBlobEndpointUri())
- .containerName(options.getStorageContainerName())
- .credential(credential)
- .buildClient();
+ BlobContainerClient containerClient
+ = new BlobContainerClientBuilder().endpoint(options.getStorageBlobEndpointUri())
+ .containerName(options.getStorageContainerName())
+ .credential(credential)
+ .buildClient();
PagedIterable blobs = containerClient.listBlobs();
try {
diff --git a/sdk/eventhubs/azure-messaging-eventhubs/docs/pom.xml b/sdk/eventhubs/azure-messaging-eventhubs/docs/pom.xml
index 3b712f72075c..64d0da66ea36 100644
--- a/sdk/eventhubs/azure-messaging-eventhubs/docs/pom.xml
+++ b/sdk/eventhubs/azure-messaging-eventhubs/docs/pom.xml
@@ -25,7 +25,7 @@
io.projectreactor
reactor-core
- 3.4.41
+ 3.7.5
diff --git a/sdk/openai/azure-ai-openai-realtime/pom.xml b/sdk/openai/azure-ai-openai-realtime/pom.xml
index a3a8f1ef4062..67d37d6ac8b4 100644
--- a/sdk/openai/azure-ai-openai-realtime/pom.xml
+++ b/sdk/openai/azure-ai-openai-realtime/pom.xml
@@ -66,7 +66,7 @@
io.netty
netty-codec-http
- 4.1.118.Final
+ 4.1.119.Final
@@ -103,7 +103,7 @@
- io.netty:netty-codec-http:[4.1.118.Final]
+ io.netty:netty-codec-http:[4.1.119.Final]
diff --git a/sdk/resourcemanagerhybrid/azure-resourcemanager-resources/pom.xml b/sdk/resourcemanagerhybrid/azure-resourcemanager-resources/pom.xml
index ad57a42c816a..74bb7fab184b 100644
--- a/sdk/resourcemanagerhybrid/azure-resourcemanager-resources/pom.xml
+++ b/sdk/resourcemanagerhybrid/azure-resourcemanager-resources/pom.xml
@@ -93,7 +93,7 @@
io.projectreactor
reactor-test
- 3.4.41
+ 3.7.5
test
diff --git a/sdk/servicebus/azure-messaging-servicebus-stress/src/main/java/com/azure/messaging/servicebus/stress/util/TelemetryHelper.java b/sdk/servicebus/azure-messaging-servicebus-stress/src/main/java/com/azure/messaging/servicebus/stress/util/TelemetryHelper.java
index e80d3b6cbff6..a28afb3807de 100644
--- a/sdk/servicebus/azure-messaging-servicebus-stress/src/main/java/com/azure/messaging/servicebus/stress/util/TelemetryHelper.java
+++ b/sdk/servicebus/azure-messaging-servicebus-stress/src/main/java/com/azure/messaging/servicebus/stress/util/TelemetryHelper.java
@@ -49,10 +49,16 @@ public class TelemetryHelper {
static {
// enables micrometer metrics from Reactor schedulers allowing to monitor thread pool usage and starvation
- Schedulers.enableMetrics();
+ enableMetrics();
OTEL = init();
}
+ @SuppressWarnings("deprecation")
+ private static void enableMetrics() {
+ // enables micrometer metrics from Reactor schedulers allowing to monitor thread pool usage and starvation
+ Schedulers.enableMetrics();
+ }
+
/**
* Creates an instance of telemetry helper.
* @param scenarioClass the scenario class
diff --git a/sdk/storage/azure-storage-stress/src/main/java/com/azure/storage/stress/TelemetryHelper.java b/sdk/storage/azure-storage-stress/src/main/java/com/azure/storage/stress/TelemetryHelper.java
index 135ff4e9073b..5ed5ac1e626a 100644
--- a/sdk/storage/azure-storage-stress/src/main/java/com/azure/storage/stress/TelemetryHelper.java
+++ b/sdk/storage/azure-storage-stress/src/main/java/com/azure/storage/stress/TelemetryHelper.java
@@ -60,9 +60,14 @@ public class TelemetryHelper {
private final AtomicLong failedRuns = new AtomicLong();
static {
+ enableMetrics();
+ OTEL = init();
+ }
+
+ @SuppressWarnings("deprecation")
+ private static void enableMetrics() {
// enables micrometer metrics from Reactor schedulers allowing to monitor thread pool usage and starvation
Schedulers.enableMetrics();
- OTEL = init();
}
/**
diff --git a/sdk/template/azure-template-stress/src/main/java/com/azure/sdk/template/stress/util/TelemetryHelper.java b/sdk/template/azure-template-stress/src/main/java/com/azure/sdk/template/stress/util/TelemetryHelper.java
index c14af3da571a..64e4be5f9022 100644
--- a/sdk/template/azure-template-stress/src/main/java/com/azure/sdk/template/stress/util/TelemetryHelper.java
+++ b/sdk/template/azure-template-stress/src/main/java/com/azure/sdk/template/stress/util/TelemetryHelper.java
@@ -60,6 +60,11 @@ public class TelemetryHelper {
private final Attributes canceledAttributes;
static {
+ enableMetrics();
+ }
+
+ @SuppressWarnings("deprecation")
+ private static void enableMetrics() {
// enables micrometer metrics from Reactor schedulers allowing to monitor thread pool usage and starvation
Schedulers.enableMetrics();
}
diff --git a/sdk/translation/azure-ai-translation-document/assets.json b/sdk/translation/azure-ai-translation-document/assets.json
index b04e81642271..f24e952d3d24 100644
--- a/sdk/translation/azure-ai-translation-document/assets.json
+++ b/sdk/translation/azure-ai-translation-document/assets.json
@@ -3,4 +3,4 @@
"AssetsRepoPrefixPath" : "java",
"TagPrefix" : "java/translation/azure-ai-translation-document",
"Tag" : "java/translation/azure-ai-translation-document_32dd6be902"
-}
\ No newline at end of file
+}
diff --git a/sdk/webpubsub/azure-messaging-webpubsub-client/pom.xml b/sdk/webpubsub/azure-messaging-webpubsub-client/pom.xml
index 47cd8d7a5bb6..7ce95fe3307b 100644
--- a/sdk/webpubsub/azure-messaging-webpubsub-client/pom.xml
+++ b/sdk/webpubsub/azure-messaging-webpubsub-client/pom.xml
@@ -57,7 +57,7 @@
io.netty
netty-codec-http
- 4.1.118.Final
+ 4.1.119.Final
@@ -103,7 +103,7 @@
- io.netty:netty-codec-http:[4.1.118.Final]
+ io.netty:netty-codec-http:[4.1.119.Final]