From b8c07eb8b5ea52db2dfb570447ceb156b07e697e Mon Sep 17 00:00:00 2001 From: alzimmermsft <48699787+alzimmermsft@users.noreply.github.com> Date: Fri, 11 Sep 2026 11:50:21 -0400 Subject: [PATCH 01/21] Upgrade Netty and Reactor versions --- common/perf-test-core/pom.xml | 2 +- eng/versioning/external_dependencies.txt | 34 +-- ...upported_external_dependency_versions.json | 8 +- sdk/clientcore/http-netty4/CHANGELOG.md | 4 + sdk/clientcore/http-netty4/pom.xml | 62 ++-- .../http/netty4/NettyHttpClientBuilder.java | 105 ++++--- .../netty4/implementation/Netty4Utility.java | 10 +- .../src/main/java/module-info.java | 1 + .../netty4/NettyHttp2HttpClientTests.java | 36 +++ .../netty4/NettyHttpClientBuilderTests.java | 269 +++++++++--------- .../Netty4ConnectionPoolTests.java | 5 +- .../implementation/Netty4UtilityTests.java | 28 ++ .../azure-communication-common/pom.xml | 2 +- sdk/core/azure-core-experimental/pom.xml | 2 +- .../azure-core-http-jdk-httpclient/pom.xml | 2 +- sdk/core/azure-core-http-netty/CHANGELOG.md | 8 +- sdk/core/azure-core-http-netty/README.md | 13 +- sdk/core/azure-core-http-netty/pom.xml | 50 ++-- .../netty/NettyAsyncHttpClientBuilder.java | 17 +- .../ByteBufWriteSubscriber.java | 38 ++- .../NettyAsyncHttpResponse.java | 6 +- .../netty/implementation/NettyUtility.java | 5 +- .../src/main/java/module-info.java | 3 + .../native-image.properties | 6 - ...cHttpClientBuilderJavaDocCodeSnippets.java | 7 +- .../NettyAsyncHttpClientBuilderTests.java | 51 +++- .../ByteBufWriterSubscriberTests.java | 43 +++ .../implementation/NettyUtilityTests.java | 4 + sdk/core/azure-core-http-okhttp/pom.xml | 2 +- sdk/core/azure-core-http-vertx/README.md | 5 +- sdk/core/azure-core-http-vertx/pom.xml | 2 +- sdk/core/azure-core-management/pom.xml | 2 +- sdk/core/azure-core-perf/pom.xml | 2 +- .../azure-core-serializer-avro-apache/pom.xml | 2 +- .../azure-core-serializer-json-gson/pom.xml | 2 +- .../pom.xml | 2 +- sdk/core/azure-core-test/CHANGELOG.md | 2 + sdk/core/azure-core-test/README.md | 1 - sdk/core/azure-core-test/pom.xml | 4 +- .../azure-core-tracing-opentelemetry/pom.xml | 2 +- sdk/core/azure-core-version-tests/pom.xml | 4 +- sdk/core/azure-core/CHANGELOG.md | 4 + sdk/core/azure-core/pom.xml | 6 +- sdk/cosmos/azure-cosmos-encryption/pom.xml | 2 +- .../pom.xml | 2 +- sdk/cosmos/azure-cosmos-spark_3/pom.xml | 2 +- sdk/cosmos/azure-cosmos-tests/pom.xml | 2 +- .../cosmos/implementation/ConfigsTests.java | 39 +++ .../TcpServerMock/TcpServer.java | 7 +- .../rntbd/RntbdLoopTests.java | 73 +++++ .../http/ReactorNettyHttpClientTest.java | 22 ++ .../cosmos/rx/proxy/HttpProxyServer.java | 7 +- sdk/cosmos/azure-cosmos/CHANGELOG.md | 1 + sdk/cosmos/azure-cosmos/pom.xml | 4 +- .../azure/cosmos/implementation/Configs.java | 5 +- .../rntbd/RntbdLoopEpoll.java | 5 +- .../rntbd/RntbdLoopNIO.java | 5 +- .../rntbd/RntbdServiceEndpoint.java | 2 +- .../guava25/hash/Striped64.java | 2 - .../http/ReactorNettyClient.java | 6 + .../src/main/java/module-info.java | 1 + sdk/e2e/pom.xml | 2 +- .../pom.xml | 2 +- .../azure-messaging-eventhubs/docs/pom.xml | 2 +- .../azure-ai-openai-realtime/CHANGELOG.md | 2 + sdk/openai/azure-ai-openai-realtime/pom.xml | 8 +- .../websocket/WebSocketSessionNettyImpl.java | 5 +- .../src/main/java/module-info.java | 1 + sdk/voicelive/azure-ai-voicelive/pom.xml | 2 +- .../CHANGELOG.md | 2 +- .../azure-messaging-webpubsub-client/pom.xml | 8 +- .../websocket/WebSocketSessionNettyImpl.java | 15 +- .../src/main/java/module-info.java | 1 + 73 files changed, 737 insertions(+), 363 deletions(-) create mode 100644 sdk/cosmos/azure-cosmos-tests/src/test/java/com/azure/cosmos/implementation/directconnectivity/rntbd/RntbdLoopTests.java diff --git a/common/perf-test-core/pom.xml b/common/perf-test-core/pom.xml index d2ffe784303e1..02f9205c79dd4 100644 --- a/common/perf-test-core/pom.xml +++ b/common/perf-test-core/pom.xml @@ -56,7 +56,7 @@ com.beust:jcommander:[1.82] io.vertx:vertx-codegen:[4.5.32] - io.projectreactor:reactor-core:[3.7.19] + io.projectreactor:reactor-core:[3.8.7] diff --git a/eng/versioning/external_dependencies.txt b/eng/versioning/external_dependencies.txt index c3829f0d3b30b..4d31a42cfe081 100644 --- a/eng/versioning/external_dependencies.txt +++ b/eng/versioning/external_dependencies.txt @@ -44,22 +44,22 @@ commons-net:commons-net;3.9.0 io.cloudevents:cloudevents-api;2.2.0 io.cloudevents:cloudevents-core;2.2.0 io.fabric8:kubernetes-client;6.12.1 -io.netty:netty-buffer;4.1.137.Final -io.netty:netty-common;4.1.137.Final -io.netty:netty-codec;4.1.137.Final -io.netty:netty-codec-http;4.1.137.Final -io.netty:netty-codec-http2;4.1.137.Final -io.netty:netty-handler;4.1.137.Final -io.netty:netty-handler-proxy;4.1.137.Final -io.netty:netty-resolver;4.1.137.Final -io.netty:netty-resolver-dns;4.1.137.Final +io.netty:netty-buffer;4.2.17.Final +io.netty:netty-common;4.2.17.Final +io.netty:netty-codec-base;4.2.17.Final +io.netty:netty-codec-http;4.2.17.Final +io.netty:netty-codec-http2;4.2.17.Final +io.netty:netty-handler;4.2.17.Final +io.netty:netty-handler-proxy;4.2.17.Final +io.netty:netty-resolver;4.2.17.Final +io.netty:netty-resolver-dns;4.2.17.Final io.netty:netty-tcnative-boringssl-static;2.0.81.Final -io.netty:netty-transport;4.1.137.Final -io.netty:netty-transport-native-epoll;4.1.137.Final -io.netty:netty-transport-native-unix-common;4.1.137.Final -io.netty:netty-transport-native-kqueue;4.1.137.Final -io.projectreactor.netty:reactor-netty-http;1.2.18 -io.projectreactor:reactor-core;3.7.19 +io.netty:netty-transport;4.2.17.Final +io.netty:netty-transport-native-epoll;4.2.17.Final +io.netty:netty-transport-native-unix-common;4.2.17.Final +io.netty:netty-transport-native-kqueue;4.2.17.Final +io.projectreactor.netty:reactor-netty-http;1.3.7 +io.projectreactor:reactor-core;3.8.7 io.vertx:vertx-codegen;4.5.32 io.vertx:vertx-core;4.5.32 javax.websocket:javax.websocket-api;1.1 @@ -125,7 +125,7 @@ io.opentelemetry:opentelemetry-bom;1.58.0 io.opentelemetry.instrumentation:opentelemetry-runtime-telemetry-java8;2.24.0-alpha io.opentelemetry.instrumentation:opentelemetry-spring-boot-starter;2.24.0 io.opentelemetry.instrumentation:opentelemetry-logback-appender-1.0;2.24.0-alpha -io.projectreactor:reactor-test;3.7.19 +io.projectreactor:reactor-test;3.8.7 io.github.hakky54:logcaptor;2.9.3 com.squareup.okio:okio;3.18.1 com.squareup.okio:okio-jvm;3.18.1 @@ -207,7 +207,7 @@ org.revapi:revapi-reporter-json;0.5.1 org.revapi:revapi-maven-plugin;0.15.1 # External Dependency Exceptions -# This section is for external dependencies whose versions were different than +# This section is for external dependencies whose versions were different from # what was defined in the parent pom. # Format; # _groupId:artifactId;dependency-version diff --git a/eng/versioning/supported_external_dependency_versions.json b/eng/versioning/supported_external_dependency_versions.json index 35fddef80f79f..722d67abfd9ee 100644 --- a/eng/versioning/supported_external_dependency_versions.json +++ b/eng/versioning/supported_external_dependency_versions.json @@ -162,10 +162,10 @@ ], "reactor_2025": [ - { "io.projectreactor.netty:reactor-netty": "1.3.0-M2" }, - { "io.projectreactor.netty:reactor-netty-http": "1.3.0-M2" }, - { "io.projectreactor:reactor-core": "3.8.0-M2" }, - { "io.projectreactor:reactor-test": "3.8.0-M2" } + { "io.projectreactor.netty:reactor-netty": "1.3.0" }, + { "io.projectreactor.netty:reactor-netty-http": "1.3.0" }, + { "io.projectreactor:reactor-core": "3.8.0" }, + { "io.projectreactor:reactor-test": "3.8.0" } ], "reactor_2024": [ diff --git a/sdk/clientcore/http-netty4/CHANGELOG.md b/sdk/clientcore/http-netty4/CHANGELOG.md index 13dd08af78abe..ca7dcbf1dc15b 100644 --- a/sdk/clientcore/http-netty4/CHANGELOG.md +++ b/sdk/clientcore/http-netty4/CHANGELOG.md @@ -9,3 +9,7 @@ ### Bugs Fixed ### Other Changes + +- Upgraded Netty to `4.2.17.Final`, using I/O handler factories for event loops while preserving pooled buffer allocation + unless `io.netty.allocator.type` is explicitly configured. +- Preserved HTTP/2 response decompression with Netty's separate compression module when using Java modules. diff --git a/sdk/clientcore/http-netty4/pom.xml b/sdk/clientcore/http-netty4/pom.xml index 9c02f031baea7..77dd38f833d52 100644 --- a/sdk/clientcore/http-netty4/pom.xml +++ b/sdk/clientcore/http-netty4/pom.xml @@ -56,7 +56,7 @@ io.clientcore.core.implementation*,io.clientcore.core.models,io.clientcore.core.util,io.clientcore.core.util* - 4.1.137.Final + 4.2.17.Final @@ -69,52 +69,52 @@ io.netty netty-buffer - 4.1.137.Final + 4.2.17.Final io.netty - netty-codec - 4.1.137.Final + netty-codec-base + 4.2.17.Final io.netty netty-codec-http - 4.1.137.Final + 4.2.17.Final io.netty netty-codec-http2 - 4.1.137.Final + 4.2.17.Final io.netty netty-common - 4.1.137.Final + 4.2.17.Final io.netty netty-handler - 4.1.137.Final + 4.2.17.Final io.netty netty-handler-proxy - 4.1.137.Final + 4.2.17.Final io.netty netty-resolver - 4.1.137.Final + 4.2.17.Final io.netty netty-resolver-dns - 4.1.137.Final + 4.2.17.Final io.netty netty-transport - 4.1.137.Final + 4.2.17.Final @@ -126,32 +126,18 @@ test - - io.netty - netty-transport-native-unix-common - 4.1.137.Final - linux-x86_64 - test - io.netty netty-transport-native-epoll - 4.1.137.Final + 4.2.17.Final linux-x86_64 test - - io.netty - netty-transport-native-unix-common - 4.1.137.Final - osx-x86_64 - test - io.netty netty-transport-native-kqueue - 4.1.137.Final + 4.2.17.Final osx-x86_64 test @@ -223,16 +209,16 @@ - io.netty:netty-buffer:[4.1.137.Final] - io.netty:netty-codec:[4.1.137.Final] - io.netty:netty-codec-http:[4.1.137.Final] - io.netty:netty-codec-http2:[4.1.137.Final] - io.netty:netty-common:[4.1.137.Final] - io.netty:netty-handler:[4.1.137.Final] - io.netty:netty-handler-proxy:[4.1.137.Final] - io.netty:netty-resolver:[4.1.137.Final] - io.netty:netty-resolver-dns:[4.1.137.Final] - io.netty:netty-transport:[4.1.137.Final] + io.netty:netty-buffer:[4.2.17.Final] + io.netty:netty-codec-base:[4.2.17.Final] + io.netty:netty-codec-http:[4.2.17.Final] + io.netty:netty-codec-http2:[4.2.17.Final] + io.netty:netty-common:[4.2.17.Final] + io.netty:netty-handler:[4.2.17.Final] + io.netty:netty-handler-proxy:[4.2.17.Final] + io.netty:netty-resolver:[4.2.17.Final] + io.netty:netty-resolver-dns:[4.2.17.Final] + io.netty:netty-transport:[4.2.17.Final] diff --git a/sdk/clientcore/http-netty4/src/main/java/io/clientcore/http/netty4/NettyHttpClientBuilder.java b/sdk/clientcore/http-netty4/src/main/java/io/clientcore/http/netty4/NettyHttpClientBuilder.java index 68c163abd0014..dde7adde03c7f 100644 --- a/sdk/clientcore/http-netty4/src/main/java/io/clientcore/http/netty4/NettyHttpClientBuilder.java +++ b/sdk/clientcore/http-netty4/src/main/java/io/clientcore/http/netty4/NettyHttpClientBuilder.java @@ -12,15 +12,22 @@ import io.clientcore.http.netty4.implementation.ChannelInitializationProxyHandler; import io.clientcore.http.netty4.implementation.Netty4ConnectionPool; import io.netty.bootstrap.Bootstrap; +import io.netty.buffer.ByteBufAllocator; +import io.netty.buffer.PooledByteBufAllocator; import io.netty.channel.Channel; import io.netty.channel.ChannelOption; import io.netty.channel.EventLoopGroup; -import io.netty.channel.nio.NioEventLoopGroup; +import io.netty.channel.IoEventLoopGroup; +import io.netty.channel.IoHandler; +import io.netty.channel.IoHandlerFactory; +import io.netty.channel.MultiThreadIoEventLoopGroup; +import io.netty.channel.nio.NioIoHandler; import io.netty.channel.socket.SocketChannel; import io.netty.channel.socket.nio.NioSocketChannel; import io.netty.handler.ssl.SslContext; import io.netty.handler.ssl.SslContextBuilder; import io.netty.util.concurrent.DefaultThreadFactory; +import io.netty.util.internal.SystemPropertyUtil; import java.lang.invoke.MethodHandle; import java.lang.invoke.MethodHandles; @@ -36,35 +43,35 @@ public class NettyHttpClientBuilder { private static final String EPOLL = "io.netty.channel.epoll.Epoll"; private static final String EPOLL_CHANNEL = "io.netty.channel.epoll.EpollSocketChannel"; - private static final String EPOLL_EVENT_LOOP_GROUP = "io.netty.channel.epoll.EpollEventLoopGroup"; + private static final String EPOLL_IO_HANDLER = "io.netty.channel.epoll.EpollIoHandler"; private static final boolean IS_EPOLL_AVAILABLE; private static final Class EPOLL_CHANNEL_CLASS; - private static final Class EPOLL_EVENT_LOOP_GROUP_CLASS; - private static final MethodHandle EPOLL_EVENT_LOOP_GROUP_CREATOR; + private static final Class EPOLL_IO_HANDLER_CLASS; + private static final MethodHandle EPOLL_IO_HANDLER_FACTORY_CREATOR; private static final String KQUEUE = "io.netty.channel.kqueue.KQueue"; private static final String KQUEUE_CHANNEL = "io.netty.channel.kqueue.KQueueSocketChannel"; - private static final String KQUEUE_EVENT_LOOP_GROUP = "io.netty.channel.kqueue.KQueueEventLoopGroup"; + private static final String KQUEUE_IO_HANDLER = "io.netty.channel.kqueue.KQueueIoHandler"; private static final boolean IS_KQUEUE_AVAILABLE; private static final Class KQUEUE_CHANNEL_CLASS; - private static final Class KQUEUE_EVENT_LOOP_GROUP_CLASS; - private static final MethodHandle KQUEUE_EVENT_LOOP_GROUP_CREATOR; + private static final Class KQUEUE_IO_HANDLER_CLASS; + private static final MethodHandle KQUEUE_IO_HANDLER_FACTORY_CREATOR; static { // Inspect the class path to determine is native transports are available. // If they are, this will determine runtime behaviors. boolean isEpollAvailable; Class epollChannelClass; - Class epollEventLoopGroupClass; - MethodHandle epollEventLoopGroupCreator; + Class epollIoHandlerClass; + MethodHandle epollIoHandlerFactoryCreator; try { Class epollClass = Class.forName(EPOLL); isEpollAvailable = (boolean) epollClass.getDeclaredMethod("isAvailable").invoke(null); epollChannelClass = getChannelClass(EPOLL_CHANNEL); - epollEventLoopGroupClass = Class.forName(EPOLL_EVENT_LOOP_GROUP); - epollEventLoopGroupCreator = MethodHandles.publicLookup() - .unreflectConstructor(epollEventLoopGroupClass.getDeclaredConstructor(ThreadFactory.class)); + epollIoHandlerClass = Class.forName(EPOLL_IO_HANDLER).asSubclass(IoHandler.class); + epollIoHandlerFactoryCreator + = MethodHandles.publicLookup().unreflect(epollIoHandlerClass.getDeclaredMethod("newFactory")); LOGGER.atVerbose() .addKeyValue("epollAvailable", isEpollAvailable) .log("Lookup for Epoll completed without error."); @@ -77,27 +84,27 @@ public class NettyHttpClientBuilder { LOGGER.atVerbose().log("Epoll is unavailable and won't be used."); isEpollAvailable = false; epollChannelClass = null; - epollEventLoopGroupClass = null; - epollEventLoopGroupCreator = null; + epollIoHandlerClass = null; + epollIoHandlerFactoryCreator = null; } IS_EPOLL_AVAILABLE = isEpollAvailable; EPOLL_CHANNEL_CLASS = epollChannelClass; - EPOLL_EVENT_LOOP_GROUP_CLASS = epollEventLoopGroupClass; - EPOLL_EVENT_LOOP_GROUP_CREATOR = epollEventLoopGroupCreator; + EPOLL_IO_HANDLER_CLASS = epollIoHandlerClass; + EPOLL_IO_HANDLER_FACTORY_CREATOR = epollIoHandlerFactoryCreator; boolean isKqueueAvailable; Class kqueueChannelClass; - Class kqueueEventLoopGroupClass; - MethodHandle kqueueEventLoopGroupCreator; + Class kqueueIoHandlerClass; + MethodHandle kqueueIoHandlerFactoryCreator; try { Class kqueueClass = Class.forName(KQUEUE); isKqueueAvailable = (boolean) kqueueClass.getDeclaredMethod("isAvailable").invoke(null); kqueueChannelClass = getChannelClass(KQUEUE_CHANNEL); - kqueueEventLoopGroupClass = Class.forName(KQUEUE_EVENT_LOOP_GROUP); - kqueueEventLoopGroupCreator = MethodHandles.publicLookup() - .unreflectConstructor(kqueueEventLoopGroupClass.getDeclaredConstructor(ThreadFactory.class)); + kqueueIoHandlerClass = Class.forName(KQUEUE_IO_HANDLER).asSubclass(IoHandler.class); + kqueueIoHandlerFactoryCreator + = MethodHandles.publicLookup().unreflect(kqueueIoHandlerClass.getDeclaredMethod("newFactory")); LOGGER.atVerbose() .addKeyValue("kqueueAvailable", isKqueueAvailable) .log("Lookup for KQueue completed without error."); @@ -110,14 +117,14 @@ public class NettyHttpClientBuilder { LOGGER.atVerbose().log("KQueue is unavailable and won't be used."); isKqueueAvailable = false; kqueueChannelClass = null; - kqueueEventLoopGroupClass = null; - kqueueEventLoopGroupCreator = null; + kqueueIoHandlerClass = null; + kqueueIoHandlerFactoryCreator = null; } IS_KQUEUE_AVAILABLE = isKqueueAvailable; KQUEUE_CHANNEL_CLASS = kqueueChannelClass; - KQUEUE_EVENT_LOOP_GROUP_CLASS = kqueueEventLoopGroupClass; - KQUEUE_EVENT_LOOP_GROUP_CREATOR = kqueueEventLoopGroupCreator; + KQUEUE_IO_HANDLER_CLASS = kqueueIoHandlerClass; + KQUEUE_IO_HANDLER_FACTORY_CREATOR = kqueueIoHandlerFactoryCreator; } @SuppressWarnings("unchecked") @@ -154,10 +161,10 @@ public NettyHttpClientBuilder() { * Sets the event loop group for the Netty client. *

* By default, if no {@code eventLoopGroup} is configured and no native transports are available (Epoll KQueue) - * {@link NioEventLoopGroup} will be used. + * a {@link MultiThreadIoEventLoopGroup} using {@link NioIoHandler} will be used. *

- * If native transports are available, the {@link EventLoopGroup} implementation for the native transport will be - * chosen over {@link NioEventLoopGroup}. + * If native transports are available, the {@link IoHandlerFactory} for the native transport will be + * chosen over {@link NioIoHandler}. * * @param eventLoopGroup The event loop group. * @return The updated builder. @@ -377,9 +384,9 @@ public NettyHttpClientBuilder maxPendingAcquires(int maxPendingAcquires) { */ public HttpClient build() { EventLoopGroup group = getEventLoopGroupToUse(this.eventLoopGroup, this.channelClass, IS_EPOLL_AVAILABLE, - EPOLL_EVENT_LOOP_GROUP_CREATOR, IS_KQUEUE_AVAILABLE, KQUEUE_EVENT_LOOP_GROUP_CREATOR); + EPOLL_IO_HANDLER_FACTORY_CREATOR, IS_KQUEUE_AVAILABLE, KQUEUE_IO_HANDLER_FACTORY_CREATOR); Class channelClass - = getChannelClass(this.channelClass, group.getClass(), IS_EPOLL_AVAILABLE, IS_KQUEUE_AVAILABLE); + = getChannelClass(this.channelClass, group, IS_EPOLL_AVAILABLE, IS_KQUEUE_AVAILABLE); // Leave breadcrumbs about the NettyHttpClient configuration, in case troubleshooting is needed. LoggingEvent loggingEvent = LOGGER.atVerbose() @@ -401,6 +408,11 @@ public HttpClient build() { Bootstrap bootstrap = new Bootstrap().group(group) .channel(channelClass) .option(ChannelOption.CONNECT_TIMEOUT_MILLIS, (int) getTimeoutMillis(connectTimeout, 10_000)); + // Preserve the pooled default from Netty 4.1 while honoring an explicitly configured Netty allocator. + bootstrap.option(ChannelOption.ALLOCATOR, + SystemPropertyUtil.contains("io.netty.allocator.type") + ? ByteBufAllocator.DEFAULT + : PooledByteBufAllocator.DEFAULT); // Disable auto-read as we want to control when and how data is read from the channel. bootstrap.option(ChannelOption.AUTO_READ, false); // Enable TCP keep-alive to proactively detect and clean up stale connections in the pool. This helps evict @@ -455,47 +467,52 @@ ProxyOptions getProxyOptions() { static EventLoopGroup getEventLoopGroupToUse(EventLoopGroup configuredGroup, Class configuredChannelClass, boolean isEpollAvailable, - MethodHandle epollEventLoopGroupCreator, boolean isKqueueAvailable, MethodHandle kqueueEventLoopGroupCreator) { + MethodHandle epollIoHandlerFactoryCreator, boolean isKqueueAvailable, + MethodHandle kqueueIoHandlerFactoryCreator) { if (configuredGroup != null) { return configuredGroup; } ThreadFactory threadFactory = new DefaultThreadFactory("clientcore-netty-client", true); - // Use EpollEventLoopGroup if Epoll is available and 'channelClass' wasn't configured or was configured to + // Use Epoll if available and 'channelClass' wasn't configured or was configured to // EpollSocketChannel. if (isEpollAvailable && (configuredChannelClass == null || configuredChannelClass == EPOLL_CHANNEL_CLASS)) { try { - return (EventLoopGroup) epollEventLoopGroupCreator.invoke(threadFactory); + return new MultiThreadIoEventLoopGroup(threadFactory, + (IoHandlerFactory) epollIoHandlerFactoryCreator.invoke()); } catch (Throwable ex) { - LOGGER.atVerbose().setThrowable(ex).log("Failed to create an EpollEventLoopGroup."); + LOGGER.atVerbose().setThrowable(ex).log("Failed to create an Epoll event loop group."); } } - // Use KQueueEventLoopGroup if KQueue is available and 'channelClass' wasn't configured or was configured to + // Use KQueue if available and 'channelClass' wasn't configured or was configured to // KQueueSocketChannel. if (isKqueueAvailable && (configuredChannelClass == null || configuredChannelClass == KQUEUE_CHANNEL_CLASS)) { try { - return (EventLoopGroup) kqueueEventLoopGroupCreator.invoke(threadFactory); + return new MultiThreadIoEventLoopGroup(threadFactory, + (IoHandlerFactory) kqueueIoHandlerFactoryCreator.invoke()); } catch (Throwable ex) { - LOGGER.atVerbose().setThrowable(ex).log("Failed to create a KQueueEventLoopGroup."); + LOGGER.atVerbose().setThrowable(ex).log("Failed to create a KQueue event loop group."); } } - // Fallback to NioEventLoopGroup. - return new NioEventLoopGroup(threadFactory); + // Fall back to NIO. + return new MultiThreadIoEventLoopGroup(threadFactory, NioIoHandler.newFactory()); } static Class getChannelClass(Class configuredChannelClass, - Class configuredGroupClass, boolean isEpollAvailable, boolean isKqueueAvailable) { + EventLoopGroup configuredGroup, boolean isEpollAvailable, boolean isKqueueAvailable) { if (configuredChannelClass != null) { // If the Channel class was manually set, use it. return configuredChannelClass; - } else if (isEpollAvailable && configuredGroupClass == EPOLL_EVENT_LOOP_GROUP_CLASS) { - // If Epoll is available and the EventLoopGroup is EpollEventLoopGroup, use EpollSocketChannel. + } else if (isEpollAvailable + && configuredGroup instanceof IoEventLoopGroup + && ((IoEventLoopGroup) configuredGroup).isIoType(EPOLL_IO_HANDLER_CLASS)) { return EPOLL_CHANNEL_CLASS; - } else if (isKqueueAvailable && configuredGroupClass == KQUEUE_EVENT_LOOP_GROUP_CLASS) { - // If KQueue is available and the EventLoopGroup is KQueueEventLoopGroup, use KQueueSocketChannel. + } else if (isKqueueAvailable + && configuredGroup instanceof IoEventLoopGroup + && ((IoEventLoopGroup) configuredGroup).isIoType(KQUEUE_IO_HANDLER_CLASS)) { return KQUEUE_CHANNEL_CLASS; } else { // Fallback to NioSocketChannel. diff --git a/sdk/clientcore/http-netty4/src/main/java/io/clientcore/http/netty4/implementation/Netty4Utility.java b/sdk/clientcore/http-netty4/src/main/java/io/clientcore/http/netty4/implementation/Netty4Utility.java index f0d7835c190f7..4bdffdc966f88 100644 --- a/sdk/clientcore/http-netty4/src/main/java/io/clientcore/http/netty4/implementation/Netty4Utility.java +++ b/sdk/clientcore/http-netty4/src/main/java/io/clientcore/http/netty4/implementation/Netty4Utility.java @@ -85,10 +85,12 @@ public final class Netty4Utility { // Non-native dependencies are required while native dependencies are optional. Without the native dependencies // the SDK will fall back to using the JDK implementations. private static final List REQUIRED_NETTY_VERSION_ARTIFACTS - = Arrays.asList("netty-buffer", "netty-codec", "netty-codec-http", "netty-codec-http2", "netty-common", - "netty-handler", "netty-handler-proxy", "netty-resolver", "netty-resolver-dns", "netty-transport"); - private static final List OPTIONAL_NETTY_VERSION_ARTIFACTS = Arrays - .asList("netty-transport-native-unix-common", "netty-transport-native-epoll", "netty-transport-native-kqueue"); + = Arrays.asList("netty-buffer", "netty-codec-base", "netty-codec-compression", "netty-codec-dns", + "netty-codec-socks", "netty-codec-http", "netty-codec-http2", "netty-common", "netty-handler", + "netty-handler-proxy", "netty-resolver", "netty-resolver-dns", "netty-transport"); + private static final List OPTIONAL_NETTY_VERSION_ARTIFACTS + = Arrays.asList("netty-transport-native-unix-common", "netty-transport-native-epoll", + "netty-transport-native-kqueue", "netty-transport-classes-epoll", "netty-transport-classes-kqueue"); private static final int TWO_FIFTY_SIX_KB = 256 * 1024; diff --git a/sdk/clientcore/http-netty4/src/main/java/module-info.java b/sdk/clientcore/http-netty4/src/main/java/module-info.java index 2ab0fc5e7223a..a9e31d53266bd 100644 --- a/sdk/clientcore/http-netty4/src/main/java/module-info.java +++ b/sdk/clientcore/http-netty4/src/main/java/module-info.java @@ -14,6 +14,7 @@ requires io.netty.common; requires io.netty.handler.proxy; requires io.netty.codec; + requires io.netty.codec.compression; requires io.netty.resolver; requires io.netty.codec.http2; requires java.sql; diff --git a/sdk/clientcore/http-netty4/src/test/java/io/clientcore/http/netty4/NettyHttp2HttpClientTests.java b/sdk/clientcore/http-netty4/src/test/java/io/clientcore/http/netty4/NettyHttp2HttpClientTests.java index dba6aa10bbeae..7a454a7650fe2 100644 --- a/sdk/clientcore/http-netty4/src/test/java/io/clientcore/http/netty4/NettyHttp2HttpClientTests.java +++ b/sdk/clientcore/http-netty4/src/test/java/io/clientcore/http/netty4/NettyHttp2HttpClientTests.java @@ -17,12 +17,21 @@ import org.junit.jupiter.api.BeforeAll; import org.junit.jupiter.api.Test; import org.junit.jupiter.api.Timeout; +import org.junit.jupiter.params.ParameterizedTest; +import org.junit.jupiter.params.provider.ValueSource; +import java.io.ByteArrayOutputStream; +import java.io.IOException; +import java.io.OutputStream; +import java.nio.charset.StandardCharsets; import java.security.SecureRandom; import java.util.concurrent.ThreadLocalRandom; import java.util.concurrent.TimeUnit; +import java.util.zip.DeflaterOutputStream; +import java.util.zip.GZIPOutputStream; import static org.junit.jupiter.api.Assertions.assertArrayEquals; +import static org.junit.jupiter.api.Assertions.assertEquals; @Timeout(value = 3, unit = TimeUnit.MINUTES) public class NettyHttp2HttpClientTests extends HttpClientTests { @@ -93,4 +102,31 @@ public void canSendBinaryDataDebug() { assertArrayEquals(expectedBytes, response.getValue().toBytes()); } } + + @ParameterizedTest + @ValueSource(strings = { "gzip", "deflate" }) + public void decompressesResponse(String contentEncoding) throws IOException { + byte[] expected = "Compressed HTTP/2 response".getBytes(StandardCharsets.UTF_8); + ByteArrayOutputStream compressed = new ByteArrayOutputStream(); + try (OutputStream compressor = "gzip".equals(contentEncoding) + ? new GZIPOutputStream(compressed) + : new DeflaterOutputStream(compressed)) { + compressor.write(expected); + } + byte[] compressedBytes = compressed.toByteArray(); + LocalTestServer compressedServer + = new LocalTestServer(HttpProtocolVersion.HTTP_2, true, (request, response, requestBody) -> { + response.setHeader("Content-Encoding", contentEncoding); + response.setContentLength(compressedBytes.length); + response.getOutputStream().write(compressedBytes); + }); + compressedServer.start(); + try (Response response = getHttpClient() + .send(new HttpRequest().setMethod(HttpMethod.GET).setUri(compressedServer.getHttpsUri()))) { + assertEquals(200, response.getStatusCode()); + assertArrayEquals(expected, response.getValue().toBytes()); + } finally { + compressedServer.stop(); + } + } } diff --git a/sdk/clientcore/http-netty4/src/test/java/io/clientcore/http/netty4/NettyHttpClientBuilderTests.java b/sdk/clientcore/http-netty4/src/test/java/io/clientcore/http/netty4/NettyHttpClientBuilderTests.java index a417ef32f253a..3263eeec0f780 100644 --- a/sdk/clientcore/http-netty4/src/test/java/io/clientcore/http/netty4/NettyHttpClientBuilderTests.java +++ b/sdk/clientcore/http-netty4/src/test/java/io/clientcore/http/netty4/NettyHttpClientBuilderTests.java @@ -13,15 +13,23 @@ import io.clientcore.core.utils.configuration.Configuration; import io.clientcore.http.netty4.implementation.NettyHttpClientLocalTestServer; import io.netty.bootstrap.BootstrapConfig; +import io.netty.buffer.ByteBufAllocator; +import io.netty.buffer.PooledByteBufAllocator; import io.netty.channel.Channel; +import io.netty.channel.ChannelOption; import io.netty.channel.EventLoopGroup; -import io.netty.channel.epoll.EpollEventLoopGroup; +import io.netty.channel.IoEventLoopGroup; +import io.netty.channel.IoHandler; +import io.netty.channel.IoHandlerFactory; +import io.netty.channel.MultiThreadIoEventLoopGroup; +import io.netty.channel.epoll.EpollIoHandler; import io.netty.channel.epoll.EpollSocketChannel; -import io.netty.channel.kqueue.KQueueEventLoopGroup; +import io.netty.channel.kqueue.KQueueIoHandler; import io.netty.channel.kqueue.KQueueSocketChannel; -import io.netty.channel.nio.NioEventLoopGroup; +import io.netty.channel.nio.NioIoHandler; import io.netty.channel.socket.SocketChannel; import io.netty.channel.socket.nio.NioSocketChannel; +import io.netty.resolver.DefaultAddressResolverGroup; import org.junit.jupiter.api.Test; import org.junit.jupiter.api.Timeout; import org.junit.jupiter.api.condition.EnabledOnOs; @@ -38,7 +46,6 @@ import java.time.Duration; import java.util.ArrayList; import java.util.List; -import java.util.concurrent.ThreadFactory; import java.util.concurrent.TimeUnit; import java.util.function.Supplier; import java.util.stream.Stream; @@ -50,6 +57,13 @@ import static org.junit.jupiter.api.Assertions.assertNull; import static org.junit.jupiter.api.Assertions.assertSame; import static org.junit.jupiter.api.Assertions.assertThrows; +import static org.junit.jupiter.api.Assertions.assertTrue; +import static org.mockito.ArgumentMatchers.any; +import static org.mockito.Mockito.atLeastOnce; +import static org.mockito.Mockito.mock; +import static org.mockito.Mockito.verify; +import static org.mockito.Mockito.verifyNoInteractions; +import static org.mockito.Mockito.when; /** * Tests {@link NettyHttpClientBuilder}. @@ -286,12 +300,16 @@ private static Stream buildWithExplicitConfigurationProxySupplier @Test public void buildEventLoopClient() { String expectedThreadName = "testEventLoop"; - NioEventLoopGroup eventLoopGroup = new NioEventLoopGroup(1, (Runnable r) -> new Thread(r, expectedThreadName)); - - NettyHttpClient nettyClient - = (NettyHttpClient) new NettyHttpClientBuilder().eventLoopGroup(eventLoopGroup).build(); - - assertSame(eventLoopGroup, nettyClient.getBootstrap().config().group()); + EventLoopGroup eventLoopGroup = new MultiThreadIoEventLoopGroup(1, + (Runnable r) -> new Thread(r, expectedThreadName), NioIoHandler.newFactory()); + + try { + NettyHttpClient nettyClient + = (NettyHttpClient) new NettyHttpClientBuilder().eventLoopGroup(eventLoopGroup).build(); + assertSame(eventLoopGroup, nettyClient.getBootstrap().config().group()); + } finally { + eventLoopGroup.shutdownGracefully(0, 5, TimeUnit.SECONDS).syncUninterruptibly(); + } } @ParameterizedTest @@ -307,13 +325,27 @@ private static Stream getTimeoutMillisSupplier() { Arguments.of(Duration.ofNanos(1), TimeUnit.MILLISECONDS.toMillis(1))); } + @Test + public void preservesAllocatorAndResolverDefaults() { + NettyHttpClient client = (NettyHttpClient) new NettyHttpClientBuilder().build(); + try { + ByteBufAllocator expectedAllocator = System.getProperty("io.netty.allocator.type") == null + ? PooledByteBufAllocator.DEFAULT + : ByteBufAllocator.DEFAULT; + assertSame(expectedAllocator, client.getBootstrap().config().options().get(ChannelOption.ALLOCATOR)); + assertSame(DefaultAddressResolverGroup.INSTANCE, client.getBootstrap().config().resolver()); + } finally { + client.getBootstrap().config().group().shutdownGracefully(0, 5, TimeUnit.SECONDS).syncUninterruptibly(); + } + } + @Test @EnabledOnOs(OS.WINDOWS) public void windowsUseNioByDefault() { NettyHttpClient nettyHttpClient = (NettyHttpClient) new NettyHttpClientBuilder().build(); BootstrapConfig config = nettyHttpClient.getBootstrap().config(); - assertInstanceOf(NioEventLoopGroup.class, config.group()); + assertTrue(assertInstanceOf(IoEventLoopGroup.class, config.group()).isIoType(NioIoHandler.class)); assertInstanceOf(NioSocketChannel.class, config.channelFactory().newChannel()); } @@ -323,7 +355,7 @@ public void macUsesKQueueByDefault() { NettyHttpClient nettyHttpClient = (NettyHttpClient) new NettyHttpClientBuilder().build(); BootstrapConfig config = nettyHttpClient.getBootstrap().config(); - assertInstanceOf(KQueueEventLoopGroup.class, config.group()); + assertTrue(assertInstanceOf(IoEventLoopGroup.class, config.group()).isIoType(KQueueIoHandler.class)); assertInstanceOf(KQueueSocketChannel.class, config.channelFactory().newChannel()); } @@ -332,11 +364,11 @@ public void macUsesKQueueByDefault() { public void macUsesNioIfConfigured() { NettyHttpClient nettyHttpClient = (NettyHttpClient) new NettyHttpClientBuilder().channelClass(NioSocketChannel.class) - .eventLoopGroup(new NioEventLoopGroup()) + .eventLoopGroup(new MultiThreadIoEventLoopGroup(NioIoHandler.newFactory())) .build(); BootstrapConfig config = nettyHttpClient.getBootstrap().config(); - assertInstanceOf(NioEventLoopGroup.class, config.group()); + assertTrue(assertInstanceOf(IoEventLoopGroup.class, config.group()).isIoType(NioIoHandler.class)); assertInstanceOf(NioSocketChannel.class, config.channelFactory().newChannel()); } @@ -346,7 +378,7 @@ public void linuxUsesEpollByDefault() { NettyHttpClient nettyHttpClient = (NettyHttpClient) new NettyHttpClientBuilder().build(); BootstrapConfig config = nettyHttpClient.getBootstrap().config(); - assertInstanceOf(EpollEventLoopGroup.class, config.group()); + assertTrue(assertInstanceOf(IoEventLoopGroup.class, config.group()).isIoType(EpollIoHandler.class)); assertInstanceOf(EpollSocketChannel.class, config.channelFactory().newChannel()); } @@ -355,24 +387,61 @@ public void linuxUsesEpollByDefault() { public void linuxUsesNioIfConfigured() { NettyHttpClient nettyHttpClient = (NettyHttpClient) new NettyHttpClientBuilder().channelClass(NioSocketChannel.class) - .eventLoopGroup(new NioEventLoopGroup()) + .eventLoopGroup(new MultiThreadIoEventLoopGroup(NioIoHandler.newFactory())) .build(); BootstrapConfig config = nettyHttpClient.getBootstrap().config(); - assertInstanceOf(NioEventLoopGroup.class, config.group()); + assertTrue(assertInstanceOf(IoEventLoopGroup.class, config.group()).isIoType(NioIoHandler.class)); assertInstanceOf(NioSocketChannel.class, config.channelFactory().newChannel()); } @ParameterizedTest @MethodSource("getEventLoopGroupToUseSupplier") - public void getEventLoopGroupToUse(Class expected, EventLoopGroup configuredGroup, - Class configuredChannelClass, boolean isEpollAvailable, - MethodHandle epollEventLoopGroupCreator, boolean isKqueueAvailable, MethodHandle kqueueEventLoopGroupCreator) { - EventLoopGroup eventLoopGroup - = NettyHttpClientBuilder.getEventLoopGroupToUse(configuredGroup, configuredChannelClass, isEpollAvailable, - epollEventLoopGroupCreator, isKqueueAvailable, kqueueEventLoopGroupCreator); - - assertInstanceOf(expected, eventLoopGroup); + public void getEventLoopGroupToUse(String expectedTransport, boolean configureGroup, + Class configuredChannelClass, boolean isEpollAvailable, boolean epollFails, + boolean isKqueueAvailable, boolean kqueueFails) { + IoHandlerFactory epollFactory = mockIoHandlerFactory(); + IoHandlerFactory kqueueFactory = mockIoHandlerFactory(); + MethodHandle exceptionCreator + = MethodHandles.throwException(IoHandlerFactory.class, IllegalStateException.class) + .bindTo(new IllegalStateException("Native transport unavailable")); + MethodHandle epollCreator + = epollFails ? exceptionCreator : MethodHandles.constant(IoHandlerFactory.class, epollFactory); + MethodHandle kqueueCreator + = kqueueFails ? exceptionCreator : MethodHandles.constant(IoHandlerFactory.class, kqueueFactory); + EventLoopGroup configuredGroup + = configureGroup ? new MultiThreadIoEventLoopGroup(1, NioIoHandler.newFactory()) : null; + EventLoopGroup eventLoopGroup = NettyHttpClientBuilder.getEventLoopGroupToUse(configuredGroup, + configuredChannelClass, isEpollAvailable, epollCreator, isKqueueAvailable, kqueueCreator); + + try { + assertInstanceOf(MultiThreadIoEventLoopGroup.class, eventLoopGroup); + if (configuredGroup != null) { + assertSame(configuredGroup, eventLoopGroup); + } + if ("epoll".equals(expectedTransport)) { + verify(epollFactory, atLeastOnce()).newHandler(any()); + verifyNoInteractions(kqueueFactory); + } else if ("kqueue".equals(expectedTransport)) { + verify(kqueueFactory, atLeastOnce()).newHandler(any()); + verifyNoInteractions(epollFactory); + } else { + verifyNoInteractions(epollFactory, kqueueFactory); + } + assertTrue(assertInstanceOf(IoEventLoopGroup.class, eventLoopGroup).isIoType(NioIoHandler.class)); + if (configuredGroup == null) { + assertTrue(eventLoopGroup.next() + .submit(() -> Thread.currentThread().isDaemon()) + .syncUninterruptibly() + .getNow()); + assertTrue(eventLoopGroup.next() + .submit(() -> Thread.currentThread().getName().startsWith("clientcore-netty-client")) + .syncUninterruptibly() + .getNow()); + } + } finally { + eventLoopGroup.shutdownGracefully(0, 5, TimeUnit.SECONDS).syncUninterruptibly(); + } } @Test @@ -404,128 +473,60 @@ public void testMaximumHttpVersion() throws NoSuchFieldException, IllegalAccessE assertEquals(HttpProtocolVersion.HTTP_2, httpVersionField.get(clientv2)); } - private static Stream getEventLoopGroupToUseSupplier() throws ReflectiveOperationException { - // Doesn't matter what this is calling, just needs to throw an exception. - // This will as it doesn't accept the arguments that it will be called with. - MethodHandle exceptionCreator - = MethodHandles.publicLookup().unreflectConstructor(NioEventLoopGroup.class.getDeclaredConstructor()); - - // NOTE: This test doesn't use EpollEventLoopGroup or KQueueEventLoopGroup directly, but rather uses different - // EventLoopGroup classes as the creation of those requires native libraries to be loaded. - // This is a workaround to avoid loading the native libraries in the test, as not all OSes can support the - // native transports. - MethodHandle epollCreator = MethodHandles.publicLookup() - .unreflectConstructor(MockEpollEventLoopGroup.class.getDeclaredConstructor(ThreadFactory.class)); - MethodHandle kqueueCreator = MethodHandles.publicLookup() - .unreflectConstructor(MockKQueueEventLoopGroup.class.getDeclaredConstructor(ThreadFactory.class)); - - // EventLoopGroup is configured, use it. - Arguments configuredGroup - = Arguments.of(NioEventLoopGroup.class, new NioEventLoopGroup(), null, false, null, false, null); - - // Epoll is available and nothing is configured, use EpollEventLoopGroup. - Arguments epollGroup = Arguments.of(MockEpollEventLoopGroup.class, null, null, true, epollCreator, false, null); - - // Epoll is available and EpollSocketChannel is configured, use EpollEventLoopGroup. - Arguments epollChannelGroup = Arguments.of(MockEpollEventLoopGroup.class, null, EpollSocketChannel.class, true, - epollCreator, false, null); - - // Epoll is available but throws an exception, use NioEventLoopGroup. - Arguments epollExceptionGroup - = Arguments.of(NioEventLoopGroup.class, null, null, true, exceptionCreator, false, null); - - // KQueue is available and nothing is configured, use KQueueEventLoopGroup. - Arguments kqueueGroup - = Arguments.of(MockKQueueEventLoopGroup.class, null, null, false, null, true, kqueueCreator); - - // KQueue is available and KQueueSocketChannel is configured, use KQueueEventLoopGroup. - Arguments kqueueChannelGroup = Arguments.of(MockKQueueEventLoopGroup.class, null, KQueueSocketChannel.class, - false, null, true, kqueueCreator); - - // KQueue is available but throws an exception, use NioEventLoopGroup. - Arguments kqueueExceptionGroup - = Arguments.of(NioEventLoopGroup.class, null, null, false, null, true, exceptionCreator); - - // Both Epoll and KQueue are available, use EpollEventLoopGroup. - Arguments epollAndKqueueGroup - = Arguments.of(MockEpollEventLoopGroup.class, null, null, true, epollCreator, true, kqueueCreator); - - // Both Epoll and KQueue are available but channel class is set to KQueueSocketChannel, use - // KQueueEventLoopGroup. - Arguments epollAndKqueueChannelGroup = Arguments.of(MockKQueueEventLoopGroup.class, null, - KQueueSocketChannel.class, true, epollCreator, true, kqueueCreator); - - // Both Epoll and KQueue are available but throws an exception, use NioEventLoopGroup. - Arguments epollAndKqueueExceptionGroup - = Arguments.of(NioEventLoopGroup.class, null, null, true, exceptionCreator, true, exceptionCreator); - - // Both Epoll and KQueue are available but channel class is set to EpollSocketChannel, use - // EpollEventLoopGroup. - Arguments epollAndKqueueChannelExceptionGroup = Arguments.of(MockEpollEventLoopGroup.class, null, - EpollSocketChannel.class, true, epollCreator, true, kqueueCreator); - - // Both Epoll and KQueue are available but channel class is set to NioSocketChannel, use - // NioEventLoopGroup. - Arguments epollAndKqueueChannelNioGroup = Arguments.of(NioEventLoopGroup.class, null, NioSocketChannel.class, - true, epollCreator, true, kqueueCreator); - - return Stream.of(configuredGroup, epollGroup, epollChannelGroup, epollExceptionGroup, kqueueGroup, - kqueueChannelGroup, kqueueExceptionGroup, epollAndKqueueGroup, epollAndKqueueChannelGroup, - epollAndKqueueExceptionGroup, epollAndKqueueChannelExceptionGroup, epollAndKqueueChannelNioGroup); + private static Stream getEventLoopGroupToUseSupplier() { + return Stream.of(Arguments.of("nio", true, null, true, true, true, true), + Arguments.of("epoll", false, null, true, false, false, false), + Arguments.of("epoll", false, EpollSocketChannel.class, true, false, false, false), + Arguments.of("nio", false, null, true, true, false, false), + Arguments.of("kqueue", false, null, false, false, true, false), + Arguments.of("kqueue", false, KQueueSocketChannel.class, false, false, true, false), + Arguments.of("nio", false, null, false, false, true, true), + Arguments.of("epoll", false, null, true, false, true, false), + Arguments.of("kqueue", false, KQueueSocketChannel.class, true, false, true, false), + Arguments.of("kqueue", false, null, true, true, true, false), + Arguments.of("nio", false, null, true, true, true, true), + Arguments.of("epoll", false, EpollSocketChannel.class, true, false, true, false), + Arguments.of("nio", false, NioSocketChannel.class, true, true, true, true), + Arguments.of("nio", false, null, false, false, false, false)); } - public static final class MockEpollEventLoopGroup extends NioEventLoopGroup { - public MockEpollEventLoopGroup(ThreadFactory threadFactory) { - super(threadFactory); - } - } - - public static final class MockKQueueEventLoopGroup extends NioEventLoopGroup { - public MockKQueueEventLoopGroup(ThreadFactory threadFactory) { - super(threadFactory); - } + private static IoHandlerFactory mockIoHandlerFactory() { + // Delegate to NIO so factory selection can be tested without loading native libraries. + IoHandlerFactory delegate = NioIoHandler.newFactory(); + IoHandlerFactory factory = mock(IoHandlerFactory.class); + when(factory.newHandler(any())).thenAnswer(invocation -> delegate.newHandler(invocation.getArgument(0))); + return factory; } @ParameterizedTest @MethodSource("getChannelClassSupplier") public void getChannelClass(Class expected, Class configuredChannelClass, - Class congiguredGroupClass, boolean isEpollAvailable, boolean isKqueueAvailable) { + EventLoopGroup configuredGroup, boolean isEpollAvailable, boolean isKqueueAvailable) { Class channelClass = NettyHttpClientBuilder.getChannelClass(configuredChannelClass, - congiguredGroupClass, isEpollAvailable, isKqueueAvailable); + configuredGroup, isEpollAvailable, isKqueueAvailable); assertEquals(expected, channelClass); } private static Stream getChannelClassSupplier() { - // Channel class is configured, use it. - Arguments configuredChannel = Arguments.of(NioSocketChannel.class, NioSocketChannel.class, null, false, false); - - // Epoll is available and EventLoopGroup is EpollEventLoopGroup, use EpollSocketChannel. - Arguments epollChannel = Arguments.of(EpollSocketChannel.class, null, EpollEventLoopGroup.class, true, false); - - // KQueue is available and EventLoopGroup is KQueueEventLoopGroup, use KQueueSocketChannel. - Arguments kqueueChannel - = Arguments.of(KQueueSocketChannel.class, null, KQueueEventLoopGroup.class, false, true); - - // Epoll is available and EventLoopGroup is NioEventLoopGroup, use NioSocketChannel. - Arguments epollNioChannel = Arguments.of(NioSocketChannel.class, null, NioEventLoopGroup.class, true, false); - - // KQueue is available and EventLoopGroup is NioEventLoopGroup, use NioSocketChannel. - Arguments kqueueNioChannel = Arguments.of(NioSocketChannel.class, null, NioEventLoopGroup.class, false, true); - - // Both Epoll and KQueue are available and EventLoopGroup is NioEventLoopGroup, use NioSocketChannel. - Arguments epollAndKqueueNioChannel - = Arguments.of(NioSocketChannel.class, null, NioEventLoopGroup.class, true, true); - - // Both Epoll and KQueue are available and EventLoopGroup is EpollEventLoopGroup, use EpollSocketChannel. - Arguments epollAndKqueueEpollChannel - = Arguments.of(EpollSocketChannel.class, null, EpollEventLoopGroup.class, true, true); - - // Both Epoll and KQueue are available and EventLoopGroup is KQueueEventLoopGroup, use KQueueSocketChannel. - Arguments epollAndKqueueKqueueChannel - = Arguments.of(KQueueSocketChannel.class, null, KQueueEventLoopGroup.class, true, true); + IoEventLoopGroup nioGroup = mockIoEventLoopGroup(NioIoHandler.class); + IoEventLoopGroup epollGroup = mockIoEventLoopGroup(EpollIoHandler.class); + IoEventLoopGroup kqueueGroup = mockIoEventLoopGroup(KQueueIoHandler.class); + + return Stream.of(Arguments.of(NioSocketChannel.class, NioSocketChannel.class, epollGroup, true, true), + Arguments.of(EpollSocketChannel.class, null, epollGroup, true, false), + Arguments.of(KQueueSocketChannel.class, null, kqueueGroup, false, true), + Arguments.of(NioSocketChannel.class, null, nioGroup, true, false), + Arguments.of(NioSocketChannel.class, null, nioGroup, false, true), + Arguments.of(NioSocketChannel.class, null, nioGroup, true, true), + Arguments.of(EpollSocketChannel.class, null, epollGroup, true, true), + Arguments.of(KQueueSocketChannel.class, null, kqueueGroup, true, true), + Arguments.of(NioSocketChannel.class, null, mock(EventLoopGroup.class), true, true)); + } - return Stream.of(configuredChannel, epollChannel, kqueueChannel, epollNioChannel, kqueueNioChannel, - epollAndKqueueNioChannel, epollAndKqueueEpollChannel, epollAndKqueueKqueueChannel); + private static IoEventLoopGroup mockIoEventLoopGroup(Class ioHandlerClass) { + IoEventLoopGroup group = mock(IoEventLoopGroup.class); + when(group.isIoType(ioHandlerClass)).thenReturn(true); + return group; } } diff --git a/sdk/clientcore/http-netty4/src/test/java/io/clientcore/http/netty4/implementation/Netty4ConnectionPoolTests.java b/sdk/clientcore/http-netty4/src/test/java/io/clientcore/http/netty4/implementation/Netty4ConnectionPoolTests.java index ba84eb3e90351..25f02cd4d45f6 100644 --- a/sdk/clientcore/http-netty4/src/test/java/io/clientcore/http/netty4/implementation/Netty4ConnectionPoolTests.java +++ b/sdk/clientcore/http-netty4/src/test/java/io/clientcore/http/netty4/implementation/Netty4ConnectionPoolTests.java @@ -10,7 +10,8 @@ import io.netty.channel.Channel; import io.netty.channel.ChannelOption; import io.netty.channel.EventLoopGroup; -import io.netty.channel.nio.NioEventLoopGroup; +import io.netty.channel.MultiThreadIoEventLoopGroup; +import io.netty.channel.nio.NioIoHandler; import io.netty.channel.socket.nio.NioSocketChannel; import io.netty.util.concurrent.Future; import org.junit.jupiter.api.AfterAll; @@ -63,7 +64,7 @@ public class Netty4ConnectionPoolTests { public static void startTestServerAndEventLoopGroup() { server = NettyHttpClientLocalTestServer.getServer(); server.start(); - eventLoopGroup = new NioEventLoopGroup(2); + eventLoopGroup = new MultiThreadIoEventLoopGroup(2, NioIoHandler.newFactory()); bootstrap = new Bootstrap().group(eventLoopGroup).channel(NioSocketChannel.class); bootstrap.option(ChannelOption.AUTO_READ, false); SocketAddress socketAddress = new InetSocketAddress("localhost", server.getPort()); diff --git a/sdk/clientcore/http-netty4/src/test/java/io/clientcore/http/netty4/implementation/Netty4UtilityTests.java b/sdk/clientcore/http-netty4/src/test/java/io/clientcore/http/netty4/implementation/Netty4UtilityTests.java index 468f57acffd0f..ffa52f66e01c0 100644 --- a/sdk/clientcore/http-netty4/src/test/java/io/clientcore/http/netty4/implementation/Netty4UtilityTests.java +++ b/sdk/clientcore/http-netty4/src/test/java/io/clientcore/http/netty4/implementation/Netty4UtilityTests.java @@ -2,15 +2,22 @@ // Licensed under the MIT License. package io.clientcore.http.netty4.implementation; +import io.clientcore.core.http.client.HttpProtocolVersion; import io.clientcore.core.http.models.HttpHeader; import io.clientcore.core.http.models.HttpHeaderName; import io.clientcore.core.http.models.HttpHeaders; import io.clientcore.core.utils.CoreUtils; +import io.netty.buffer.UnpooledByteBufAllocator; import io.netty.handler.codec.http.DefaultHttpHeaders; import io.netty.handler.codec.http.HttpHeaderNames; +import io.netty.handler.ssl.SslContext; +import io.netty.handler.ssl.SslProvider; import org.junit.jupiter.api.Test; import org.junit.jupiter.api.Timeout; +import org.junit.jupiter.params.ParameterizedTest; +import org.junit.jupiter.params.provider.EnumSource; +import javax.net.ssl.SSLException; import java.util.Arrays; import java.util.Map; import java.util.concurrent.TimeUnit; @@ -22,11 +29,32 @@ import static org.junit.jupiter.api.Assertions.assertFalse; import static org.junit.jupiter.api.Assertions.assertLinesMatch; import static org.junit.jupiter.api.Assertions.assertNotNull; +import static org.junit.jupiter.api.Assertions.assertNull; import static org.junit.jupiter.api.Assertions.assertSame; import static org.junit.jupiter.api.Assertions.assertTrue; @Timeout(value = 3, unit = TimeUnit.MINUTES) public class Netty4UtilityTests { + @ParameterizedTest + @EnumSource(HttpProtocolVersion.class) + public void sslContextEnablesHostnameVerification(HttpProtocolVersion protocolVersion) throws SSLException { + SslContext context + = Netty4Utility.buildSslContext(protocolVersion, builder -> builder.sslProvider(SslProvider.JDK)); + assertEquals("HTTPS", + context.newEngine(UnpooledByteBufAllocator.DEFAULT, "localhost", 443) + .getSSLParameters() + .getEndpointIdentificationAlgorithm()); + } + + @Test + public void sslContextHonorsHostnameVerificationModifier() throws SSLException { + SslContext context = Netty4Utility.buildSslContext(HttpProtocolVersion.HTTP_1_1, + builder -> builder.sslProvider(SslProvider.JDK).endpointIdentificationAlgorithm(null)); + assertNull(context.newEngine(UnpooledByteBufAllocator.DEFAULT, "localhost", 443) + .getSSLParameters() + .getEndpointIdentificationAlgorithm()); + } + @Test public void validateNettyVersionsWithWhatThePomSpecifies() { Map pomVersions = CoreUtils.getProperties(PROPERTIES_FILE_NAME); diff --git a/sdk/communication/azure-communication-common/pom.xml b/sdk/communication/azure-communication-common/pom.xml index cba34ced14f96..0a06e27dadbc0 100644 --- a/sdk/communication/azure-communication-common/pom.xml +++ b/sdk/communication/azure-communication-common/pom.xml @@ -83,7 +83,7 @@ io.projectreactor reactor-test - 3.7.19 + 3.8.7 test diff --git a/sdk/core/azure-core-experimental/pom.xml b/sdk/core/azure-core-experimental/pom.xml index 1ad8ea79775b6..0e4b1e740d257 100644 --- a/sdk/core/azure-core-experimental/pom.xml +++ b/sdk/core/azure-core-experimental/pom.xml @@ -100,7 +100,7 @@ io.projectreactor reactor-test - 3.7.19 + 3.8.7 test diff --git a/sdk/core/azure-core-http-jdk-httpclient/pom.xml b/sdk/core/azure-core-http-jdk-httpclient/pom.xml index f0d76eb2beb43..1c6ea1e4381c0 100644 --- a/sdk/core/azure-core-http-jdk-httpclient/pom.xml +++ b/sdk/core/azure-core-http-jdk-httpclient/pom.xml @@ -89,7 +89,7 @@ io.projectreactor reactor-test - 3.7.19 + 3.8.7 test diff --git a/sdk/core/azure-core-http-netty/CHANGELOG.md b/sdk/core/azure-core-http-netty/CHANGELOG.md index cb59402dcd740..e0a31bd14cf98 100644 --- a/sdk/core/azure-core-http-netty/CHANGELOG.md +++ b/sdk/core/azure-core-http-netty/CHANGELOG.md @@ -8,8 +8,15 @@ ### Bugs Fixed +- Preserved asynchronous file downloads when Netty uses scoped direct buffers on newer JDKs. + ### Other Changes +#### Dependency Updates + +- Migrated Netty dependencies from `4.1.137.Final` to `4.2.17.Final`. +- Upgraded Reactor Netty from `1.2.18` to `1.3.7` and Reactor from `3.7.19` to `3.8.7`. + ## 1.16.7 (2026-08-27) ### Other Changes @@ -809,4 +816,3 @@ This package's [documentation](https://github.com/Azure/azure-sdk-for-java/blob/azure-core-http-netty_1.0.0/sdk/core/azure-core-http-netty/README.md) and [samples](https://github.com/Azure/azure-sdk-for-java/tree/azure-core-http-netty_1.0.0/sdk/core/azure-core-http-netty/src/samples/java/com/azure/core/http/netty) - diff --git a/sdk/core/azure-core-http-netty/README.md b/sdk/core/azure-core-http-netty/README.md index 7369e4c51df37..9808315a9d9fe 100644 --- a/sdk/core/azure-core-http-netty/README.md +++ b/sdk/core/azure-core-http-netty/README.md @@ -55,6 +55,17 @@ add the direct dependency to your project as follows. ## Key concepts +### Netty 4.2 compatibility + +Starting with `1.17.0-beta.1`, this library uses Netty `4.2.17.Final`, Reactor Netty `1.3.7`, and Reactor `3.8.7`. +Netty 4.1 and 4.2 must not be mixed on the classpath. If your application or framework manages these dependencies, +align the entire Netty and Reactor stack when upgrading. Java 8 remains supported. + +Netty 4.2 enables TLS hostname verification by default and changes its default buffer allocator to the adaptive allocator. +This library retains pooled allocation unless the application explicitly configures an allocator. +See the [Netty 4.2 migration guide](https://netty.io/wiki/netty-4.2-migration-guide.html#recommended-upgrade-process) +for application-level migration guidance. + ## Examples The following sections provide several code snippets covering some of the most common client configuration scenarios. @@ -220,5 +231,3 @@ For details on contributing to this repository, see the [contributing guide](htt [logging]: https://learn.microsoft.com/azure/developer/java/sdk/logging-overview [jdk_link]: https://learn.microsoft.com/java/azure/jdk/?view=azure-java-stable [java8_client_compatibility]: https://learn.microsoft.com/azure/security/fundamentals/azure-ca-details?tabs=root-and-subordinate-cas-list#client-compatibility-for-public-pkis - - diff --git a/sdk/core/azure-core-http-netty/pom.xml b/sdk/core/azure-core-http-netty/pom.xml index d925ee1c8b205..1ccfa18cfd55c 100644 --- a/sdk/core/azure-core-http-netty/pom.xml +++ b/sdk/core/azure-core-http-netty/pom.xml @@ -64,7 +64,7 @@ false false - 4.1.137.Final + 4.2.17.Final 2.0.81.Final @@ -85,49 +85,49 @@ io.netty netty-handler - 4.1.137.Final + 4.2.17.Final io.netty netty-handler-proxy - 4.1.137.Final + 4.2.17.Final io.netty netty-buffer - 4.1.137.Final + 4.2.17.Final io.netty - netty-codec - 4.1.137.Final + netty-codec-base + 4.2.17.Final io.netty netty-codec-http - 4.1.137.Final + 4.2.17.Final io.netty netty-codec-http2 - 4.1.137.Final + 4.2.17.Final io.netty netty-transport-native-unix-common - 4.1.137.Final + 4.2.17.Final io.netty netty-transport-native-epoll - 4.1.137.Final + 4.2.17.Final linux-x86_64 io.netty netty-transport-native-kqueue - 4.1.137.Final + 4.2.17.Final osx-x86_64 @@ -141,13 +141,13 @@ io.projectreactor.netty reactor-netty-http - 1.2.18 + 1.3.7 io.netty netty-common - 4.1.137.Final + 4.2.17.Final @@ -161,7 +161,7 @@ io.projectreactor reactor-test - 3.7.19 + 3.8.7 test @@ -209,17 +209,17 @@ io.netty:netty-tcnative-boringssl-static:[2.0.81.Final] - io.projectreactor.netty:reactor-netty-http:[1.2.18] - io.netty:netty-buffer:[4.1.137.Final] - io.netty:netty-common:[4.1.137.Final] - io.netty:netty-codec:[4.1.137.Final] - io.netty:netty-codec-http:[4.1.137.Final] - io.netty:netty-codec-http2:[4.1.137.Final] - io.netty:netty-handler:[4.1.137.Final] - io.netty:netty-handler-proxy:[4.1.137.Final] - io.netty:netty-transport-native-unix-common:[4.1.137.Final] - io.netty:netty-transport-native-epoll:[4.1.137.Final] - io.netty:netty-transport-native-kqueue:[4.1.137.Final] + io.projectreactor.netty:reactor-netty-http:[1.3.7] + io.netty:netty-buffer:[4.2.17.Final] + io.netty:netty-common:[4.2.17.Final] + io.netty:netty-codec-base:[4.2.17.Final] + io.netty:netty-codec-http:[4.2.17.Final] + io.netty:netty-codec-http2:[4.2.17.Final] + io.netty:netty-handler:[4.2.17.Final] + io.netty:netty-handler-proxy:[4.2.17.Final] + io.netty:netty-transport-native-unix-common:[4.2.17.Final] + io.netty:netty-transport-native-epoll:[4.2.17.Final] + io.netty:netty-transport-native-kqueue:[4.2.17.Final] 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 1ee286d12e3ac..bc69d1485bb23 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 @@ -16,12 +16,13 @@ import com.azure.core.util.Context; import com.azure.core.util.CoreUtils; import com.azure.core.util.logging.ClientLogger; +import io.netty.buffer.PooledByteBufAllocator; import io.netty.channel.ChannelOption; import io.netty.channel.EventLoopGroup; -import io.netty.channel.nio.NioEventLoopGroup; import io.netty.handler.logging.LoggingHandler; import io.netty.resolver.DefaultAddressResolverGroup; import io.netty.resolver.NoopAddressResolverGroup; +import io.netty.util.internal.SystemPropertyUtil; import reactor.netty.Connection; import reactor.netty.NettyPipeline; import reactor.netty.http.HttpDecoderSpec; @@ -151,7 +152,7 @@ public NettyAsyncHttpClientBuilder() { * .wiretap(TcpClient.class.getName(), LogLevel.INFO); * // Create an HttpClient based on above reactor-netty client and configure EventLoop count. * HttpClient client = new NettyAsyncHttpClientBuilder(baseHttpClient) - * .eventLoopGroup(new NioEventLoopGroup(5)) + * .eventLoopGroup(new MultiThreadIoEventLoopGroup(5, NioIoHandler.newFactory())) * .build(); * * @@ -202,6 +203,12 @@ public com.azure.core.http.HttpClient build() { nettyHttpClient = HttpClient.create(); } + // Keep the pooled default while respecting allocator choices made by the application. + if (!nettyHttpClient.configuration().options().containsKey(ChannelOption.ALLOCATOR) + && !SystemPropertyUtil.contains("io.netty.allocator.type")) { + nettyHttpClient = nettyHttpClient.option(ChannelOption.ALLOCATOR, PooledByteBufAllocator.DEFAULT); + } + // If a resolver hasn't been set, set the default one. if (nettyHttpClient.configuration().resolver() == null) { nettyHttpClient = nettyHttpClient.resolver(DefaultAddressResolverGroup.INSTANCE); @@ -385,12 +392,12 @@ public NettyAsyncHttpClientBuilder port(int port) { /** * Sets the NIO event loop group that will be used to run IO loops. * - * @param nioEventLoopGroup The {@link NioEventLoopGroup} that will run IO loops. + * @param nioEventLoopGroup The {@link io.netty.channel.nio.NioEventLoopGroup} that will run IO loops. * @return the updated NettyAsyncHttpClientBuilder object. * @deprecated deprecated in favor of {@link #eventLoopGroup(EventLoopGroup)}. */ @Deprecated - public NettyAsyncHttpClientBuilder nioEventLoopGroup(NioEventLoopGroup nioEventLoopGroup) { + public NettyAsyncHttpClientBuilder nioEventLoopGroup(io.netty.channel.nio.NioEventLoopGroup nioEventLoopGroup) { this.eventLoopGroup = nioEventLoopGroup; return this; } @@ -404,7 +411,7 @@ public NettyAsyncHttpClientBuilder nioEventLoopGroup(NioEventLoopGroup nioEventL *

      * int threadCount = 5;
      * HttpClient client = new NettyAsyncHttpClientBuilder()
-     *     .eventLoopGroup(new NioEventLoopGroup(threadCount))
+     *     .eventLoopGroup(new MultiThreadIoEventLoopGroup(threadCount, NioIoHandler.newFactory()))
      *     .build();
      * 
* diff --git a/sdk/core/azure-core-http-netty/src/main/java/com/azure/core/http/netty/implementation/ByteBufWriteSubscriber.java b/sdk/core/azure-core-http-netty/src/main/java/com/azure/core/http/netty/implementation/ByteBufWriteSubscriber.java index a827169f0e2b6..4b4fb0b6c7ef6 100644 --- a/sdk/core/azure-core-http-netty/src/main/java/com/azure/core/http/netty/implementation/ByteBufWriteSubscriber.java +++ b/sdk/core/azure-core-http-netty/src/main/java/com/azure/core/http/netty/implementation/ByteBufWriteSubscriber.java @@ -23,6 +23,7 @@ public class ByteBufWriteSubscriber implements Subscriber { private final MonoSink emitter; private final int bufferSize; private final ByteBuf buffer; + private final boolean useHeapBuffer; // This subscriber is effectively synchronous so there is no need for these fields to be volatile. private Subscription subscription; @@ -36,12 +37,28 @@ public class ByteBufWriteSubscriber implements Subscriber { * @param bodySize The size of the request body, if known. */ public ByteBufWriteSubscriber(ExceptionThrowingConsumer writer, MonoSink emitter, Long bodySize) { + this(writer, emitter, bodySize, false); + } + + /** + * Creates a new {@link ByteBufWriteSubscriber} with control over direct buffer writes. + * + * @param writer Where to write the {@link ByteBuf ByteBufs}. + * @param emitter {@link MonoSink} to emit completion or error signals. + * @param bodySize The size of the request body, if known. + * @param useHeapBuffer Whether to copy all writes through a bounded heap buffer. + */ + public ByteBufWriteSubscriber(ExceptionThrowingConsumer writer, MonoSink emitter, Long bodySize, + boolean useHeapBuffer) { this.writer = writer; this.emitter = emitter; + this.useHeapBuffer = useHeapBuffer; // Create a writing buffer that has a minimum bound of 8KB and a maximum bound of 64KB. // This is safe as the writer performs writes synchronously. this.bufferSize = (bodySize == null) ? 65536 : (int) Math.max(8192, Math.min(bodySize, 65536)); - this.buffer = PooledByteBufAllocator.DEFAULT.buffer(bufferSize); + this.buffer = useHeapBuffer + ? PooledByteBufAllocator.DEFAULT.heapBuffer(bufferSize) + : PooledByteBufAllocator.DEFAULT.buffer(bufferSize); } @Override @@ -69,11 +86,25 @@ public void onNext(ByteBuf bytes) { return; } - if (bytes.readableBytes() > bufferSize) { + if (useHeapBuffer) { + while (bytes.isReadable()) { + buffer.writeBytes(bytes, Math.min(bytes.readableBytes(), buffer.writableBytes())); + if (!buffer.isWritable()) { + write(buffer); + if (done) { + return; + } + buffer.clear(); + } + } + } else if (bytes.readableBytes() > bufferSize) { // If the next ByteBuf is larger than the buffer write the buffer, if there is any data to write, then // write the passed ByteBuf without buffering. if (buffer.readableBytes() > 0) { write(buffer); + if (done) { + return; + } buffer.clear(); } @@ -84,6 +115,9 @@ public void onNext(ByteBuf bytes) { } else { // If the next ByteBuf can't fit in the buffer write the buffer then buffer the passed ByteBuf. write(buffer); + if (done) { + return; + } buffer.clear(); buffer.writeBytes(bytes); } diff --git a/sdk/core/azure-core-http-netty/src/main/java/com/azure/core/http/netty/implementation/NettyAsyncHttpResponse.java b/sdk/core/azure-core-http-netty/src/main/java/com/azure/core/http/netty/implementation/NettyAsyncHttpResponse.java index 0634e15241261..080aec218ac09 100644 --- a/sdk/core/azure-core-http-netty/src/main/java/com/azure/core/http/netty/implementation/NettyAsyncHttpResponse.java +++ b/sdk/core/azure-core-http-netty/src/main/java/com/azure/core/http/netty/implementation/NettyAsyncHttpResponse.java @@ -80,9 +80,9 @@ public Mono getBodyAsInputStream() { @Override public Mono writeBodyToAsync(AsynchronousByteChannel channel) { Long length = getContentLength(); - return Mono.using(() -> this, - response -> Mono.create(sink -> response.bodyIntern() - .subscribe(new ByteBufWriteSubscriber(byteBuffer -> channel.write(byteBuffer).get(), sink, length))), + // Asynchronous file channels cannot accept scoped direct buffers allocated by Netty on newer JDKs. + return Mono.using(() -> this, response -> Mono.create(sink -> response.bodyIntern() + .subscribe(new ByteBufWriteSubscriber(byteBuffer -> channel.write(byteBuffer).get(), sink, length, true))), NettyAsyncHttpResponse::close); } 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 a0eba784b12f7..d72427d235cb3 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 @@ -36,8 +36,9 @@ public final class NettyUtility { // List of Netty artifacts that should match the 'netty.version' property in the pom.xml file. // Non-native dependencies are required while native dependencies are optional. Without the native dependencies // the SDK will fall back to using the JDK implementations. - private static final List REQUIRED_NETTY_VERSION_ARTIFACTS = Arrays.asList("netty-common", "netty-handler", - "netty-handler-proxy", "netty-buffer", "netty-codec", "netty-codec-http", "netty-codec-http2"); + private static final List REQUIRED_NETTY_VERSION_ARTIFACTS + = Arrays.asList("netty-common", "netty-handler", "netty-handler-proxy", "netty-buffer", "netty-codec-base", + "netty-codec-compression", "netty-codec-http", "netty-codec-http2", "netty-codec-socks"); private static final List OPTIONAL_NETTY_VERSION_ARTIFACTS = Arrays .asList("netty-transport-native-unix-common", "netty-transport-native-epoll", "netty-transport-native-kqueue"); diff --git a/sdk/core/azure-core-http-netty/src/main/java/module-info.java b/sdk/core/azure-core-http-netty/src/main/java/module-info.java index 30d30814abe41..4ac1c23b8ae0f 100644 --- a/sdk/core/azure-core-http-netty/src/main/java/module-info.java +++ b/sdk/core/azure-core-http-netty/src/main/java/module-info.java @@ -5,11 +5,14 @@ requires transitive com.azure.core; requires io.netty.buffer; requires io.netty.codec; + requires io.netty.codec.compression; requires io.netty.codec.http; + requires io.netty.codec.http2; requires io.netty.common; requires io.netty.handler; requires io.netty.handler.proxy; requires io.netty.resolver; + requires io.netty.resolver.dns; requires io.netty.transport; requires reactor.netty.core; requires reactor.netty.http; diff --git a/sdk/core/azure-core-http-netty/src/main/resources/META-INF/native-image/com.azure/azure-core-http-netty/native-image.properties b/sdk/core/azure-core-http-netty/src/main/resources/META-INF/native-image/com.azure/azure-core-http-netty/native-image.properties index 58d7ea86ca259..86c33a53652fa 100644 --- a/sdk/core/azure-core-http-netty/src/main/resources/META-INF/native-image/com.azure/azure-core-http-netty/native-image.properties +++ b/sdk/core/azure-core-http-netty/src/main/resources/META-INF/native-image/com.azure/azure-core-http-netty/native-image.properties @@ -12,7 +12,6 @@ Args=\ io.netty.channel.epoll.Native,\ io.netty.channel.kqueue.KQueue,\ io.netty.channel.kqueue.KQueueEventArray,\ - io.netty.channel.kqueue.KQueueEventLoop,\ io.netty.channel.kqueue.Native,\ io.netty.channel.unix.Errors,\ io.netty.channel.unix.IovArray,\ @@ -24,10 +23,6 @@ Args=\ io.netty.handler.codec.http.websocketx.WebSocket00FrameEncoder,\ io.netty.handler.ssl.BouncyCastleAlpnSslUtils,\ io.netty.handler.ssl.ConscryptAlpnSslEngine,\ - io.netty.handler.ssl.JdkNpnApplicationProtocolNegotiator,\ - io.netty.handler.ssl.JettyAlpnSslEngine$ClientEngine,\ - io.netty.handler.ssl.JettyAlpnSslEngine$ServerEngine,\ - io.netty.handler.ssl.JettyNpnSslEngine,\ io.netty.handler.ssl.OpenSsl,\ io.netty.handler.ssl.OpenSslAsyncPrivateKeyMethod,\ io.netty.handler.ssl.OpenSslPrivateKeyMethod,\ @@ -44,4 +39,3 @@ Args=\ io.netty.internal.tcnative.SSLPrivateKeyMethod,\ io.netty.util.AbstractReferenceCounted,\ io.netty.util.internal.logging.Log4JLogger - diff --git a/sdk/core/azure-core-http-netty/src/samples/java/com/azure/core/http/netty/NettyAsyncHttpClientBuilderJavaDocCodeSnippets.java b/sdk/core/azure-core-http-netty/src/samples/java/com/azure/core/http/netty/NettyAsyncHttpClientBuilderJavaDocCodeSnippets.java index 348e8b1b20f89..0d60c8e6b6f22 100644 --- a/sdk/core/azure-core-http-netty/src/samples/java/com/azure/core/http/netty/NettyAsyncHttpClientBuilderJavaDocCodeSnippets.java +++ b/sdk/core/azure-core-http-netty/src/samples/java/com/azure/core/http/netty/NettyAsyncHttpClientBuilderJavaDocCodeSnippets.java @@ -7,7 +7,8 @@ import com.azure.core.http.HttpMethod; import com.azure.core.http.HttpRequest; import com.azure.core.http.ProxyOptions; -import io.netty.channel.nio.NioEventLoopGroup; +import io.netty.channel.MultiThreadIoEventLoopGroup; +import io.netty.channel.nio.NioIoHandler; import io.netty.handler.logging.LogLevel; import reactor.netty.resources.ConnectionProvider; import reactor.netty.tcp.TcpClient; @@ -39,7 +40,7 @@ public void fixedThreadPoolSample() { // BEGIN: com.azure.core.http.netty.NettyAsyncHttpClientBuilder#eventLoopGroup int threadCount = 5; HttpClient client = new NettyAsyncHttpClientBuilder() - .eventLoopGroup(new NioEventLoopGroup(threadCount)) + .eventLoopGroup(new MultiThreadIoEventLoopGroup(threadCount, NioIoHandler.newFactory())) .build(); // END: com.azure.core.http.netty.NettyAsyncHttpClientBuilder#eventLoopGroup } @@ -87,7 +88,7 @@ public void fromExistingReactorNettyClient() { .wiretap(TcpClient.class.getName(), LogLevel.INFO); // Create an HttpClient based on above reactor-netty client and configure EventLoop count. HttpClient client = new NettyAsyncHttpClientBuilder(baseHttpClient) - .eventLoopGroup(new NioEventLoopGroup(5)) + .eventLoopGroup(new MultiThreadIoEventLoopGroup(5, NioIoHandler.newFactory())) .build(); // END: com.azure.core.http.netty.from-existing-http-client } diff --git a/sdk/core/azure-core-http-netty/src/test/java/com/azure/core/http/netty/NettyAsyncHttpClientBuilderTests.java b/sdk/core/azure-core-http-netty/src/test/java/com/azure/core/http/netty/NettyAsyncHttpClientBuilderTests.java index c6a4f68e1b0e8..adb258481a3f1 100644 --- a/sdk/core/azure-core-http-netty/src/test/java/com/azure/core/http/netty/NettyAsyncHttpClientBuilderTests.java +++ b/sdk/core/azure-core-http-netty/src/test/java/com/azure/core/http/netty/NettyAsyncHttpClientBuilderTests.java @@ -11,17 +11,23 @@ import com.azure.core.util.Configuration; import com.azure.core.util.ConfigurationBuilder; import com.azure.core.util.ConfigurationSource; +import io.netty.buffer.ByteBufAllocator; +import io.netty.buffer.PooledByteBufAllocator; +import io.netty.buffer.UnpooledByteBufAllocator; import io.netty.channel.ChannelDuplexHandler; import io.netty.channel.ChannelHandlerContext; +import io.netty.channel.ChannelOption; import io.netty.channel.ChannelPromise; -import io.netty.channel.nio.NioEventLoop; -import io.netty.channel.nio.NioEventLoopGroup; +import io.netty.channel.MultiThreadIoEventLoopGroup; +import io.netty.channel.SingleThreadIoEventLoop; +import io.netty.channel.nio.NioIoHandler; import io.netty.handler.codec.http.cookie.DefaultCookie; import io.netty.handler.logging.LoggingHandler; import io.netty.handler.proxy.HttpProxyHandler; import io.netty.handler.proxy.ProxyHandler; import io.netty.handler.proxy.Socks4ProxyHandler; import io.netty.handler.proxy.Socks5ProxyHandler; +import io.netty.util.internal.SystemPropertyUtil; import org.junit.jupiter.api.Test; import org.junit.jupiter.api.parallel.Execution; import org.junit.jupiter.api.parallel.ExecutionMode; @@ -52,6 +58,7 @@ import static org.junit.jupiter.api.Assertions.assertInstanceOf; import static org.junit.jupiter.api.Assertions.assertNotNull; import static org.junit.jupiter.api.Assertions.assertNull; +import static org.junit.jupiter.api.Assertions.assertSame; import static org.junit.jupiter.api.Assertions.assertThrows; import static org.junit.jupiter.api.Assertions.assertTrue; import static org.junit.jupiter.api.Assertions.fail; @@ -104,6 +111,24 @@ public void startingWithNullClientThrows() { assertThrows(NullPointerException.class, () -> new NettyAsyncHttpClientBuilder(null)); } + @Test + public void defaultAllocatorRespectsSystemProperty() { + NettyAsyncHttpClient client = (NettyAsyncHttpClient) new NettyAsyncHttpClientBuilder().build(); + ByteBufAllocator expectedAllocator = SystemPropertyUtil.contains("io.netty.allocator.type") + ? ByteBufAllocator.DEFAULT + : PooledByteBufAllocator.DEFAULT; + Object configuredAllocator = client.nettyClient.configuration().options().get(ChannelOption.ALLOCATOR); + assertSame(expectedAllocator, configuredAllocator == null ? ByteBufAllocator.DEFAULT : configuredAllocator); + } + + @Test + public void preconfiguredAllocatorIsMaintained() { + HttpClient baseClient = HttpClient.create().option(ChannelOption.ALLOCATOR, UnpooledByteBufAllocator.DEFAULT); + NettyAsyncHttpClient client = (NettyAsyncHttpClient) new NettyAsyncHttpClientBuilder(baseClient).build(); + assertSame(UnpooledByteBufAllocator.DEFAULT, + client.nettyClient.configuration().options().get(ChannelOption.ALLOCATOR)); + } + /** * Tests that creating a client with a {@link ConnectionProvider} will use it to create connections to a server. */ @@ -524,22 +549,26 @@ public void buildPortClient() { public void buildEventLoopClient() { String expectedThreadName = "testEventLoop"; HttpClient validatorClient = HttpClient.create().doAfterResponseSuccess((response, connection) -> { - // Validate that the EventLoop being used is a NioEventLoop. - NioEventLoop eventLoop = (NioEventLoop) connection.channel().eventLoop(); + SingleThreadIoEventLoop eventLoop = (SingleThreadIoEventLoop) connection.channel().eventLoop(); assertNotNull(eventLoop); assertEquals(expectedThreadName, eventLoop.threadProperties().name()); }); - NioEventLoopGroup eventLoopGroup = new NioEventLoopGroup(1, (Runnable r) -> new Thread(r, expectedThreadName)); + MultiThreadIoEventLoopGroup eventLoopGroup = new MultiThreadIoEventLoopGroup(1, + (Runnable r) -> new Thread(r, expectedThreadName), NioIoHandler.newFactory()); - NettyAsyncHttpClient nettyClient - = (NettyAsyncHttpClient) new NettyAsyncHttpClientBuilder(validatorClient).eventLoopGroup(eventLoopGroup) - .build(); + try { + NettyAsyncHttpClient nettyClient + = (NettyAsyncHttpClient) new NettyAsyncHttpClientBuilder(validatorClient).eventLoopGroup(eventLoopGroup) + .build(); - StepVerifier.create(nettyClient.send(new HttpRequest(HttpMethod.GET, DEFAULT_URL))) - .assertNext(response -> assertEquals(200, response.getStatusCode())) - .verifyComplete(); + StepVerifier.create(nettyClient.send(new HttpRequest(HttpMethod.GET, DEFAULT_URL))) + .assertNext(response -> assertEquals(200, response.getStatusCode())) + .verifyComplete(); + } finally { + eventLoopGroup.shutdownGracefully().syncUninterruptibly(); + } } @ParameterizedTest diff --git a/sdk/core/azure-core-http-netty/src/test/java/com/azure/core/http/netty/implementation/ByteBufWriterSubscriberTests.java b/sdk/core/azure-core-http-netty/src/test/java/com/azure/core/http/netty/implementation/ByteBufWriterSubscriberTests.java index 752bc322d0a4d..988ba5467941a 100644 --- a/sdk/core/azure-core-http-netty/src/test/java/com/azure/core/http/netty/implementation/ByteBufWriterSubscriberTests.java +++ b/sdk/core/azure-core-http-netty/src/test/java/com/azure/core/http/netty/implementation/ByteBufWriterSubscriberTests.java @@ -6,11 +6,13 @@ import com.azure.core.http.netty.mocking.MockMonoSink; import com.azure.core.http.netty.mocking.WriteCountTrackingChannel; import io.netty.buffer.ByteBuf; +import io.netty.buffer.PooledByteBufAllocator; import io.netty.buffer.Unpooled; import org.junit.jupiter.api.Test; import org.junit.jupiter.params.ParameterizedTest; import org.junit.jupiter.params.provider.Arguments; import org.junit.jupiter.params.provider.MethodSource; +import org.junit.jupiter.params.provider.ValueSource; import org.reactivestreams.Subscription; import reactor.core.publisher.Flux; import reactor.core.publisher.Mono; @@ -30,14 +32,55 @@ import static com.azure.core.validation.http.HttpValidatonUtils.assertArraysEqual; import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertFalse; import static org.junit.jupiter.api.Assertions.assertInstanceOf; import static org.junit.jupiter.api.Assertions.assertSame; +import static org.junit.jupiter.api.Assertions.assertTrue; /** * Tests {@link ByteBufWriteSubscriber}. */ @SuppressWarnings("resource") public class ByteBufWriterSubscriberTests { + @ParameterizedTest + @ValueSource(ints = { 4096, 65536, 131136 }) + public void heapBufferWritesDirectBuffersInBoundedChunks(int size) { + byte[] expected = new byte[size]; + ThreadLocalRandom.current().nextBytes(expected); + ByteBuf data = PooledByteBufAllocator.DEFAULT.directBuffer(size).writeBytes(expected); + WriteCountTrackingChannel channel = new WriteCountTrackingChannel(); + try { + StepVerifier + .create(Mono.create(sink -> Flux.just(data).subscribe(new ByteBufWriteSubscriber(buffer -> { + assertFalse(buffer.isDirect()); + assertTrue(buffer.remaining() <= 65536); + channel.write(buffer); + }, sink, null, true)))) + .verifyComplete(); + + assertArraysEqual(expected, channel.getDataWritten()); + } finally { + data.release(); + } + } + + @Test + public void heapBufferWriteFailureStopsBeforeWritingRemainingData() { + ByteBuf data = PooledByteBufAllocator.DEFAULT.directBuffer(131136).writeZero(131136); + AtomicInteger writes = new AtomicInteger(); + try { + StepVerifier + .create(Mono.create(sink -> Flux.just(data).subscribe(new ByteBufWriteSubscriber(buffer -> { + writes.incrementAndGet(); + throw new IOException("write failed"); + }, sink, null, true)))) + .verifyError(IOException.class); + assertEquals(1, writes.get()); + } finally { + data.release(); + } + } + /** * Tests that when multiple subscriptions are made to the subscriber all subscriptions after the first are ignored * and cancelled. diff --git a/sdk/core/azure-core-http-netty/src/test/java/com/azure/core/http/netty/implementation/NettyUtilityTests.java b/sdk/core/azure-core-http-netty/src/test/java/com/azure/core/http/netty/implementation/NettyUtilityTests.java index 5a71bba892f80..0b6013caa7846 100644 --- a/sdk/core/azure-core-http-netty/src/test/java/com/azure/core/http/netty/implementation/NettyUtilityTests.java +++ b/sdk/core/azure-core-http-netty/src/test/java/com/azure/core/http/netty/implementation/NettyUtilityTests.java @@ -23,6 +23,10 @@ public void validateNettyVersionsWithWhatThePomSpecifies() { // Should never have version mismatches when running tests, that would mean either the version properties are // wrong or there is a dependency diamond within azure-core-http-netty. Either way, it should be fixed. assertFalse(logInformation.shouldLog()); + assertTrue(logInformation.classpathNettyVersions.containsKey("io.netty:netty-codec-base")); + assertTrue(logInformation.classpathNettyVersions.containsKey("io.netty:netty-codec-compression")); + assertTrue(logInformation.classpathNettyVersions.containsKey("io.netty:netty-codec-socks")); + assertFalse(logInformation.classpathNettyVersions.containsKey("io.netty:netty-codec")); for (String artifactFullName : logInformation.classpathNettyVersions.keySet()) { assertTrue(artifactFullName.startsWith("io.netty:netty-"), "All artifact information should start with 'io.netty:netty-'"); diff --git a/sdk/core/azure-core-http-okhttp/pom.xml b/sdk/core/azure-core-http-okhttp/pom.xml index d4641d63ada74..14907e8c85b7b 100644 --- a/sdk/core/azure-core-http-okhttp/pom.xml +++ b/sdk/core/azure-core-http-okhttp/pom.xml @@ -108,7 +108,7 @@ io.projectreactor reactor-test - 3.7.19 + 3.8.7 test diff --git a/sdk/core/azure-core-http-vertx/README.md b/sdk/core/azure-core-http-vertx/README.md index 2aac5a57e0a0f..d9feb3a318616 100644 --- a/sdk/core/azure-core-http-vertx/README.md +++ b/sdk/core/azure-core-http-vertx/README.md @@ -10,6 +10,10 @@ Azure Core Vert.x HTTP client is a plugin for the `azure-core` HTTP client API. - Here are details about [Java 8 client compatibility with Azure Certificate Authority][java8_client_compatibility]. ### Include the package + +This transport remains on Vert.x 4.5 and Netty 4.1 to support Java 8. Do not combine it with the Netty 4.2-based +`azure-core-http-netty` library on the same classpath. + #### Include the BOM file Please include the azure-sdk-bom to your project to take dependency on the General Availability (GA) version of the library. In the following snippet, replace the {bom_version_to_target} placeholder with the version number. @@ -137,4 +141,3 @@ For details on contributing to this repository, see the [contributing guide](htt [jdk_link]: https://learn.microsoft.com/java/azure/jdk/?view=azure-java-stable [java8_client_compatibility]: https://learn.microsoft.com/azure/security/fundamentals/azure-ca-details?tabs=root-and-subordinate-cas-list#client-compatibility-for-public-pkis - diff --git a/sdk/core/azure-core-http-vertx/pom.xml b/sdk/core/azure-core-http-vertx/pom.xml index dab6c74dd4170..832526f534593 100644 --- a/sdk/core/azure-core-http-vertx/pom.xml +++ b/sdk/core/azure-core-http-vertx/pom.xml @@ -104,7 +104,7 @@ io.projectreactor reactor-test - 3.7.19 + 3.8.7 test diff --git a/sdk/core/azure-core-management/pom.xml b/sdk/core/azure-core-management/pom.xml index e7c0995ab28e9..f94b71feddb5c 100644 --- a/sdk/core/azure-core-management/pom.xml +++ b/sdk/core/azure-core-management/pom.xml @@ -103,7 +103,7 @@ io.projectreactor reactor-test - 3.7.19 + 3.8.7 test diff --git a/sdk/core/azure-core-perf/pom.xml b/sdk/core/azure-core-perf/pom.xml index 2879c6fb5e021..85534404eabf5 100644 --- a/sdk/core/azure-core-perf/pom.xml +++ b/sdk/core/azure-core-perf/pom.xml @@ -63,7 +63,7 @@ io.projectreactor reactor-test - 3.7.19 + 3.8.7 test
diff --git a/sdk/core/azure-core-serializer-avro-apache/pom.xml b/sdk/core/azure-core-serializer-avro-apache/pom.xml index 98886afeb619b..55ea4568bc983 100644 --- a/sdk/core/azure-core-serializer-avro-apache/pom.xml +++ b/sdk/core/azure-core-serializer-avro-apache/pom.xml @@ -102,7 +102,7 @@ io.projectreactor reactor-test - 3.7.19 + 3.8.7 test diff --git a/sdk/core/azure-core-serializer-json-gson/pom.xml b/sdk/core/azure-core-serializer-json-gson/pom.xml index dcad2265cdac3..fb2b70d38c341 100644 --- a/sdk/core/azure-core-serializer-json-gson/pom.xml +++ b/sdk/core/azure-core-serializer-json-gson/pom.xml @@ -118,7 +118,7 @@ io.projectreactor reactor-test - 3.7.19 + 3.8.7 test diff --git a/sdk/core/azure-core-serializer-json-jackson/pom.xml b/sdk/core/azure-core-serializer-json-jackson/pom.xml index 2bf6fe41ee71f..ff09055edbf8d 100644 --- a/sdk/core/azure-core-serializer-json-jackson/pom.xml +++ b/sdk/core/azure-core-serializer-json-jackson/pom.xml @@ -148,7 +148,7 @@ io.projectreactor reactor-test - 3.7.19 + 3.8.7 test diff --git a/sdk/core/azure-core-test/CHANGELOG.md b/sdk/core/azure-core-test/CHANGELOG.md index 51db9ae57da23..25b7f86019919 100644 --- a/sdk/core/azure-core-test/CHANGELOG.md +++ b/sdk/core/azure-core-test/CHANGELOG.md @@ -10,6 +10,8 @@ ### Other Changes +- Upgraded Reactor to `3.8.7` and the shared Netty transport to Netty `4.2.17.Final` / Reactor Netty `1.3.7`. + ## 1.27.0-beta.18 (2026-08-27) ### Other Changes diff --git a/sdk/core/azure-core-test/README.md b/sdk/core/azure-core-test/README.md index c18e6b07642c0..cf2de2763ee69 100644 --- a/sdk/core/azure-core-test/README.md +++ b/sdk/core/azure-core-test/README.md @@ -353,4 +353,3 @@ This project has adopted the [Microsoft Open Source Code of Conduct][coc]. For m [coc]: https://opensource.microsoft.com/codeofconduct/ [coc_faq]: https://opensource.microsoft.com/codeofconduct/faq/ - diff --git a/sdk/core/azure-core-test/pom.xml b/sdk/core/azure-core-test/pom.xml index b4a9d6c7f58f7..6c7b8a832901a 100644 --- a/sdk/core/azure-core-test/pom.xml +++ b/sdk/core/azure-core-test/pom.xml @@ -99,7 +99,7 @@ io.projectreactor reactor-test - 3.7.19 + 3.8.7 @@ -142,7 +142,7 @@ org.junit.jupiter:junit-jupiter-api:[5.13.4] org.junit.jupiter:junit-jupiter-engine:[5.13.4] org.junit.jupiter:junit-jupiter-params:[5.13.4] - io.projectreactor:reactor-test:[3.7.19] + io.projectreactor:reactor-test:[3.8.7] org.apache.ant:ant:[1.10.15] diff --git a/sdk/core/azure-core-tracing-opentelemetry/pom.xml b/sdk/core/azure-core-tracing-opentelemetry/pom.xml index ccfd021becc4f..8ce7746ce90f1 100644 --- a/sdk/core/azure-core-tracing-opentelemetry/pom.xml +++ b/sdk/core/azure-core-tracing-opentelemetry/pom.xml @@ -100,7 +100,7 @@ io.projectreactor reactor-test - 3.7.19 + 3.8.7 test diff --git a/sdk/core/azure-core-version-tests/pom.xml b/sdk/core/azure-core-version-tests/pom.xml index 97390b12205a7..751d28641bb51 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.7.19 + 3.8.7 + io.projectreactor:reactor-core:[3.8.7] com.fasterxml.jackson.core:jackson-annotations:[2.18.9] com.fasterxml.jackson.core:jackson-core:[2.18.9] com.fasterxml.jackson.core:jackson-databind:[2.18.9] diff --git a/sdk/core/azure-core/CHANGELOG.md b/sdk/core/azure-core/CHANGELOG.md index 4ea9e501ce5ad..9076b26d1a60d 100644 --- a/sdk/core/azure-core/CHANGELOG.md +++ b/sdk/core/azure-core/CHANGELOG.md @@ -10,6 +10,10 @@ ### Other Changes +#### Dependency Updates + +- Upgraded Reactor from `3.7.19` to `3.8.7`. + ## 1.59.1 (2026-08-27) ### Bugs Fixed diff --git a/sdk/core/azure-core/pom.xml b/sdk/core/azure-core/pom.xml index 735261e8a2c50..cbef65d6fd0b2 100644 --- a/sdk/core/azure-core/pom.xml +++ b/sdk/core/azure-core/pom.xml @@ -146,7 +146,7 @@ io.projectreactor reactor-core - 3.7.19 + 3.8.7 @@ -166,7 +166,7 @@ io.projectreactor reactor-test - 3.7.19 + 3.8.7 test @@ -223,7 +223,7 @@ - io.projectreactor:reactor-core:[3.7.19] + io.projectreactor:reactor-core:[3.8.7] com.fasterxml.jackson.core:jackson-annotations:[2.18.9] com.fasterxml.jackson.core:jackson-core:[2.18.9] com.fasterxml.jackson.core:jackson-databind:[2.18.9] diff --git a/sdk/cosmos/azure-cosmos-encryption/pom.xml b/sdk/cosmos/azure-cosmos-encryption/pom.xml index 0c0ec8870d22f..f946283f16335 100644 --- a/sdk/cosmos/azure-cosmos-encryption/pom.xml +++ b/sdk/cosmos/azure-cosmos-encryption/pom.xml @@ -178,7 +178,7 @@ Licensed under the MIT License. io.projectreactor reactor-test - 3.7.19 + 3.8.7 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 489920ab1ceeb..24f689438cda2 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.7.19 + 3.8.7 test diff --git a/sdk/cosmos/azure-cosmos-spark_3/pom.xml b/sdk/cosmos/azure-cosmos-spark_3/pom.xml index 7613e6539955e..b43c2c80a0796 100644 --- a/sdk/cosmos/azure-cosmos-spark_3/pom.xml +++ b/sdk/cosmos/azure-cosmos-spark_3/pom.xml @@ -198,7 +198,7 @@ io.projectreactor reactor-test - 3.7.19 + 3.8.7 test diff --git a/sdk/cosmos/azure-cosmos-tests/pom.xml b/sdk/cosmos/azure-cosmos-tests/pom.xml index 24c47db0c3925..be44443fb194d 100644 --- a/sdk/cosmos/azure-cosmos-tests/pom.xml +++ b/sdk/cosmos/azure-cosmos-tests/pom.xml @@ -181,7 +181,7 @@ Licensed under the MIT License. io.projectreactor reactor-test - 3.7.19 + 3.8.7 test diff --git a/sdk/cosmos/azure-cosmos-tests/src/test/java/com/azure/cosmos/implementation/ConfigsTests.java b/sdk/cosmos/azure-cosmos-tests/src/test/java/com/azure/cosmos/implementation/ConfigsTests.java index f8d0a5c0292bc..ea7ba842d37fe 100644 --- a/sdk/cosmos/azure-cosmos-tests/src/test/java/com/azure/cosmos/implementation/ConfigsTests.java +++ b/sdk/cosmos/azure-cosmos-tests/src/test/java/com/azure/cosmos/implementation/ConfigsTests.java @@ -6,8 +6,14 @@ import com.azure.cosmos.implementation.clienttelemetry.MetricCategory; import com.azure.cosmos.implementation.clienttelemetry.TagName; import com.azure.cosmos.implementation.directconnectivity.Protocol; +import io.netty.buffer.ByteBufAllocator; +import io.netty.handler.ssl.SslContext; +import io.netty.util.ReferenceCountUtil; +import org.apache.commons.lang3.reflect.FieldUtils; +import org.testng.annotations.DataProvider; import org.testng.annotations.Test; +import javax.net.ssl.SSLEngine; import java.net.URI; import java.time.Duration; import java.util.EnumSet; @@ -16,6 +22,39 @@ public class ConfigsTests { + @DataProvider(name = "sslValidationSettings") + public Object[][] sslValidationSettings() { + return new Object[][] { + { false, false, false }, { false, false, true }, + { false, true, false }, { false, true, true }, + { true, false, false }, { true, false, true }, + { true, true, false }, { true, true, true } + }; + } + + @Test(groups = { "unit" }, dataProvider = "sslValidationSettings") + public void sslContextPreservesHostnameValidationSettings( + boolean serverCertValidationDisabled, boolean hostnameValidationDisabled, boolean http2Enabled) + throws IllegalAccessException { + + Object original = FieldUtils.readStaticField(Configs.class, "cachedIsHostnameValidationDisabled", true); + SslContext sslContext = null; + SSLEngine engine = null; + try { + FieldUtils.writeStaticField(Configs.class, "cachedIsHostnameValidationDisabled", + hostnameValidationDisabled, true); + sslContext = new Configs().getSslContext(serverCertValidationDisabled, http2Enabled); + engine = sslContext.newEngine(ByteBufAllocator.DEFAULT, "localhost", 443); + + assertThat(engine.getSSLParameters().getEndpointIdentificationAlgorithm()) + .isEqualTo(serverCertValidationDisabled || hostnameValidationDisabled ? null : "HTTPS"); + } finally { + ReferenceCountUtil.release(engine); + ReferenceCountUtil.release(sslContext); + FieldUtils.writeStaticField(Configs.class, "cachedIsHostnameValidationDisabled", original, true); + } + } + @Test(groups = { "unit" }) public void maxHttpHeaderSize() { Configs config = new Configs(); diff --git a/sdk/cosmos/azure-cosmos-tests/src/test/java/com/azure/cosmos/implementation/directconnectivity/TcpServerMock/TcpServer.java b/sdk/cosmos/azure-cosmos-tests/src/test/java/com/azure/cosmos/implementation/directconnectivity/TcpServerMock/TcpServer.java index 3a5ff7605c8db..84deac4399f48 100644 --- a/sdk/cosmos/azure-cosmos-tests/src/test/java/com/azure/cosmos/implementation/directconnectivity/TcpServerMock/TcpServer.java +++ b/sdk/cosmos/azure-cosmos-tests/src/test/java/com/azure/cosmos/implementation/directconnectivity/TcpServerMock/TcpServer.java @@ -36,7 +36,8 @@ import io.netty.channel.ChannelOption; import io.netty.channel.ChannelPipeline; import io.netty.channel.EventLoopGroup; -import io.netty.channel.nio.NioEventLoopGroup; +import io.netty.channel.MultiThreadIoEventLoopGroup; +import io.netty.channel.nio.NioIoHandler; import io.netty.channel.socket.SocketChannel; import io.netty.channel.socket.nio.NioServerSocketChannel; import io.netty.handler.logging.LogLevel; @@ -60,8 +61,8 @@ public class TcpServer { public TcpServer(int port) { this.port = port; - this.parent = new NioEventLoopGroup(); - this.child = new NioEventLoopGroup(); + this.parent = new MultiThreadIoEventLoopGroup(NioIoHandler.newFactory()); + this.child = new MultiThreadIoEventLoopGroup(NioIoHandler.newFactory()); requestManager = new ServerRntbdRequestManager(); } diff --git a/sdk/cosmos/azure-cosmos-tests/src/test/java/com/azure/cosmos/implementation/directconnectivity/rntbd/RntbdLoopTests.java b/sdk/cosmos/azure-cosmos-tests/src/test/java/com/azure/cosmos/implementation/directconnectivity/rntbd/RntbdLoopTests.java new file mode 100644 index 0000000000000..ecac817f63f71 --- /dev/null +++ b/sdk/cosmos/azure-cosmos-tests/src/test/java/com/azure/cosmos/implementation/directconnectivity/rntbd/RntbdLoopTests.java @@ -0,0 +1,73 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. + +package com.azure.cosmos.implementation.directconnectivity.rntbd; + +import io.netty.bootstrap.Bootstrap; +import io.netty.channel.Channel; +import io.netty.channel.ChannelInboundHandlerAdapter; +import io.netty.channel.EventLoopGroup; +import io.netty.channel.MultiThreadIoEventLoopGroup; +import io.netty.channel.SingleThreadIoEventLoop; +import io.netty.channel.epoll.Epoll; +import io.netty.util.concurrent.DefaultThreadFactory; +import org.testng.SkipException; +import org.testng.annotations.Test; + +import java.util.concurrent.TimeUnit; + +import static org.assertj.core.api.Assertions.assertThat; + +public class RntbdLoopTests { + + @Test(groups = { "unit" }) + public void nioChannelRegistration() throws Exception { + RntbdLoop loop = RntbdLoopNativeDetector.getRntbdLoop(false); + assertThat(loop.getName()).isEqualTo("nio"); + verifyChannelRegistration(loop); + } + + @Test(groups = { "unit" }) + public void preferredTransportChannelRegistration() throws Exception { + RntbdLoop loop = RntbdLoopNativeDetector.getRntbdLoop(true); + assertThat(loop.getName()).isEqualTo(Epoll.isAvailable() ? "epoll" : "nio"); + verifyChannelRegistration(loop); + } + + @Test(groups = { "unit" }) + public void epollChannelRegistration() throws Exception { + if (!Epoll.isAvailable()) { + throw new SkipException("Epoll is not available on this platform", Epoll.unavailabilityCause()); + } + verifyChannelRegistration(new RntbdLoopEpoll()); + } + + private static void verifyChannelRegistration(RntbdLoop loop) throws Exception { + String threadName = "rntbd-loop-test-" + loop.getName(); + EventLoopGroup group = loop.newEventLoopGroup(1, new DefaultThreadFactory(threadName)); + Channel channel = null; + try { + assertThat(group).isInstanceOf(MultiThreadIoEventLoopGroup.class); + assertThat(((MultiThreadIoEventLoopGroup) group).executorCount()).isEqualTo(1); + channel = new Bootstrap() + .group(group) + .channel(loop.getChannelClass()) + .handler(new ChannelInboundHandlerAdapter()) + .register().sync().channel(); + + assertThat(channel.isRegistered()).isTrue(); + assertThat(channel).isInstanceOf(loop.getChannelClass()); + assertThat(channel.eventLoop()).isInstanceOf(SingleThreadIoEventLoop.class); + assertThat(RntbdUtils.tryGetExecutorTaskQueueSize(channel.eventLoop())).isGreaterThanOrEqualTo(0); + assertThat(channel.eventLoop().submit(() -> Thread.currentThread().getName()).get(10, TimeUnit.SECONDS)) + .startsWith(threadName); + assertThat(channel.eventLoop().schedule(() -> true, 1, TimeUnit.MILLISECONDS).get(10, TimeUnit.SECONDS)) + .isTrue(); + } finally { + if (channel != null) { + channel.close().sync(); + } + group.shutdownGracefully(0, 5, TimeUnit.SECONDS).sync(); + } + } +} diff --git a/sdk/cosmos/azure-cosmos-tests/src/test/java/com/azure/cosmos/implementation/http/ReactorNettyHttpClientTest.java b/sdk/cosmos/azure-cosmos-tests/src/test/java/com/azure/cosmos/implementation/http/ReactorNettyHttpClientTest.java index 88b85abbdf683..b867c9fed47c8 100644 --- a/sdk/cosmos/azure-cosmos-tests/src/test/java/com/azure/cosmos/implementation/http/ReactorNettyHttpClientTest.java +++ b/sdk/cosmos/azure-cosmos-tests/src/test/java/com/azure/cosmos/implementation/http/ReactorNettyHttpClientTest.java @@ -9,6 +9,8 @@ import com.azure.cosmos.implementation.Configs; import com.azure.cosmos.implementation.LifeCycleUtils; import com.azure.cosmos.implementation.directconnectivity.ReflectionUtils; +import io.netty.buffer.ByteBufAllocator; +import io.netty.buffer.PooledByteBufAllocator; import io.netty.channel.ChannelOption; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -46,6 +48,26 @@ public void after_ReactorNettyHttpClientTest() throws Exception { } } + @Test(groups = "unit") + public void httpClientAllocatorRespectsConfiguration() { + ByteBufAllocator expectedAllocator = System.getProperty("io.netty.allocator.type") == null + ? PooledByteBufAllocator.DEFAULT : ByteBufAllocator.DEFAULT; + reactor.netty.http.client.HttpClient httpClient = + ReflectionUtils.get(reactor.netty.http.client.HttpClient.class, this.reactorNettyHttpClient, "httpClient"); + assertThat(httpClient.configuration().options().get(ChannelOption.ALLOCATOR)) + .isSameAs(expectedAllocator); + + HttpClient unpooledConnectionClient = HttpClient.create(new HttpClientConfig(new Configs())); + try { + httpClient = + ReflectionUtils.get(reactor.netty.http.client.HttpClient.class, unpooledConnectionClient, "httpClient"); + assertThat(httpClient.configuration().options().get(ChannelOption.ALLOCATOR)) + .isSameAs(expectedAllocator); + } finally { + LifeCycleUtils.closeQuietly(unpooledConnectionClient); + } + } + @Test(groups = "unit") public void httpClientWithMaxHeaderSize() { reactor.netty.http.client.HttpClient httpClient = diff --git a/sdk/cosmos/azure-cosmos-tests/src/test/java/com/azure/cosmos/rx/proxy/HttpProxyServer.java b/sdk/cosmos/azure-cosmos-tests/src/test/java/com/azure/cosmos/rx/proxy/HttpProxyServer.java index b518db313ee20..6a731f27381b8 100644 --- a/sdk/cosmos/azure-cosmos-tests/src/test/java/com/azure/cosmos/rx/proxy/HttpProxyServer.java +++ b/sdk/cosmos/azure-cosmos-tests/src/test/java/com/azure/cosmos/rx/proxy/HttpProxyServer.java @@ -4,7 +4,8 @@ import io.netty.bootstrap.ServerBootstrap; import io.netty.channel.EventLoopGroup; -import io.netty.channel.nio.NioEventLoopGroup; +import io.netty.channel.MultiThreadIoEventLoopGroup; +import io.netty.channel.nio.NioIoHandler; import io.netty.channel.socket.nio.NioServerSocketChannel; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -20,8 +21,8 @@ public class HttpProxyServer { EventLoopGroup bossGroup; EventLoopGroup workerGroup; public HttpProxyServer() { - bossGroup = new NioEventLoopGroup(1); - workerGroup = new NioEventLoopGroup(); + bossGroup = new MultiThreadIoEventLoopGroup(1, NioIoHandler.newFactory()); + workerGroup = new MultiThreadIoEventLoopGroup(NioIoHandler.newFactory()); } public void start() { diff --git a/sdk/cosmos/azure-cosmos/CHANGELOG.md b/sdk/cosmos/azure-cosmos/CHANGELOG.md index d99a6b198f3d6..a259c0f577bd3 100644 --- a/sdk/cosmos/azure-cosmos/CHANGELOG.md +++ b/sdk/cosmos/azure-cosmos/CHANGELOG.md @@ -11,6 +11,7 @@ #### Bugs Fixed #### Other Changes +* Updated Netty to `4.2.17.Final`, Reactor Netty to `1.3.7`, and Reactor Core to `3.8.7`. Migrated direct TCP event loops to the Netty 4.2 I/O handler API while preserving pooled buffers and explicit TLS validation settings. ### 4.82.0 (2026-08-26) diff --git a/sdk/cosmos/azure-cosmos/pom.xml b/sdk/cosmos/azure-cosmos/pom.xml index 943713ae8c371..18e08e9306fa1 100644 --- a/sdk/cosmos/azure-cosmos/pom.xml +++ b/sdk/cosmos/azure-cosmos/pom.xml @@ -67,12 +67,12 @@ Licensed under the MIT License. com.azure azure-core - 1.59.1 + 1.60.0-beta.1 com.azure azure-core-http-netty - 1.16.7 + 1.17.0-beta.1 com.azure diff --git a/sdk/cosmos/azure-cosmos/src/main/java/com/azure/cosmos/implementation/Configs.java b/sdk/cosmos/azure-cosmos/src/main/java/com/azure/cosmos/implementation/Configs.java index bdb83171ee6e1..b152a8f6e3b02 100644 --- a/sdk/cosmos/azure-cosmos/src/main/java/com/azure/cosmos/implementation/Configs.java +++ b/sdk/cosmos/azure-cosmos/src/main/java/com/azure/cosmos/implementation/Configs.java @@ -500,9 +500,10 @@ private SslContext sslContextInit(boolean serverCertVerificationDisabled, boolea if (serverCertVerificationDisabled) { sslContextBuilder.trustManager(InsecureTrustManagerFactory.INSTANCE); // disable cert verification - } else if (!isHostnameValidationDisabled()) { - sslContextBuilder.endpointIdentificationAlgorithm("HTTPS"); } + // Netty 4.2 enables hostname validation by default; preserve explicit Cosmos opt-outs. + sslContextBuilder.endpointIdentificationAlgorithm( + serverCertVerificationDisabled || isHostnameValidationDisabled() ? null : "HTTPS"); if (http2Enabled) { sslContextBuilder diff --git a/sdk/cosmos/azure-cosmos/src/main/java/com/azure/cosmos/implementation/directconnectivity/rntbd/RntbdLoopEpoll.java b/sdk/cosmos/azure-cosmos/src/main/java/com/azure/cosmos/implementation/directconnectivity/rntbd/RntbdLoopEpoll.java index 78f2e2e19bc17..711cfa9471c60 100644 --- a/sdk/cosmos/azure-cosmos/src/main/java/com/azure/cosmos/implementation/directconnectivity/rntbd/RntbdLoopEpoll.java +++ b/sdk/cosmos/azure-cosmos/src/main/java/com/azure/cosmos/implementation/directconnectivity/rntbd/RntbdLoopEpoll.java @@ -4,7 +4,8 @@ package com.azure.cosmos.implementation.directconnectivity.rntbd; import io.netty.channel.EventLoopGroup; -import io.netty.channel.epoll.EpollEventLoopGroup; +import io.netty.channel.MultiThreadIoEventLoopGroup; +import io.netty.channel.epoll.EpollIoHandler; import io.netty.channel.epoll.EpollSocketChannel; import io.netty.channel.socket.SocketChannel; @@ -19,7 +20,7 @@ public String getName() { @Override public EventLoopGroup newEventLoopGroup(int threads, ThreadFactory threadFactory) { - return new EpollEventLoopGroup(threads, threadFactory); + return new MultiThreadIoEventLoopGroup(threads, threadFactory, EpollIoHandler.newFactory()); } @Override diff --git a/sdk/cosmos/azure-cosmos/src/main/java/com/azure/cosmos/implementation/directconnectivity/rntbd/RntbdLoopNIO.java b/sdk/cosmos/azure-cosmos/src/main/java/com/azure/cosmos/implementation/directconnectivity/rntbd/RntbdLoopNIO.java index 197231a06ea1d..72c24016c44e1 100644 --- a/sdk/cosmos/azure-cosmos/src/main/java/com/azure/cosmos/implementation/directconnectivity/rntbd/RntbdLoopNIO.java +++ b/sdk/cosmos/azure-cosmos/src/main/java/com/azure/cosmos/implementation/directconnectivity/rntbd/RntbdLoopNIO.java @@ -4,7 +4,8 @@ package com.azure.cosmos.implementation.directconnectivity.rntbd; import io.netty.channel.EventLoopGroup; -import io.netty.channel.nio.NioEventLoopGroup; +import io.netty.channel.MultiThreadIoEventLoopGroup; +import io.netty.channel.nio.NioIoHandler; import io.netty.channel.socket.SocketChannel; import io.netty.channel.socket.nio.NioSocketChannel; @@ -19,7 +20,7 @@ public String getName() { @Override public EventLoopGroup newEventLoopGroup(int threads, ThreadFactory threadFactory) { - return new NioEventLoopGroup(threads, threadFactory); + return new MultiThreadIoEventLoopGroup(threads, threadFactory, NioIoHandler.newFactory()); } @Override diff --git a/sdk/cosmos/azure-cosmos/src/main/java/com/azure/cosmos/implementation/directconnectivity/rntbd/RntbdServiceEndpoint.java b/sdk/cosmos/azure-cosmos/src/main/java/com/azure/cosmos/implementation/directconnectivity/rntbd/RntbdServiceEndpoint.java index 04db3536834c1..da83532855293 100644 --- a/sdk/cosmos/azure-cosmos/src/main/java/com/azure/cosmos/implementation/directconnectivity/rntbd/RntbdServiceEndpoint.java +++ b/sdk/cosmos/azure-cosmos/src/main/java/com/azure/cosmos/implementation/directconnectivity/rntbd/RntbdServiceEndpoint.java @@ -202,7 +202,7 @@ private Bootstrap getBootStrap(EventLoopGroup eventLoopGroup, Config config) { .option(ChannelOption.ALLOCATOR, config.allocator()) .option(ChannelOption.AUTO_READ, true) .option(ChannelOption.CONNECT_TIMEOUT_MILLIS, config.connectTimeoutInMillis()) - .option(ChannelOption.RCVBUF_ALLOCATOR, receiveBufferAllocator) + .option(ChannelOption.RECVBUF_ALLOCATOR, receiveBufferAllocator) .option(ChannelOption.SO_KEEPALIVE, true) .remoteAddress(this.serverKey.getHost(), this.serverKey.getPort()); diff --git a/sdk/cosmos/azure-cosmos/src/main/java/com/azure/cosmos/implementation/guava25/hash/Striped64.java b/sdk/cosmos/azure-cosmos/src/main/java/com/azure/cosmos/implementation/guava25/hash/Striped64.java index df3dff010fb87..972b20ca5a37a 100644 --- a/sdk/cosmos/azure-cosmos/src/main/java/com/azure/cosmos/implementation/guava25/hash/Striped64.java +++ b/sdk/cosmos/azure-cosmos/src/main/java/com/azure/cosmos/implementation/guava25/hash/Striped64.java @@ -24,8 +24,6 @@ import java.util.concurrent.atomic.AtomicIntegerFieldUpdater; import java.util.concurrent.atomic.AtomicLongFieldUpdater; -import static io.netty.util.internal.shaded.org.jctools.util.UnsafeAccess.UNSAFE; - /** * A package-local class holding common representation and mechanics for classes supporting dynamic * striping on 64bit values. The class extends Number so that concrete subclasses must publicly do diff --git a/sdk/cosmos/azure-cosmos/src/main/java/com/azure/cosmos/implementation/http/ReactorNettyClient.java b/sdk/cosmos/azure-cosmos/src/main/java/com/azure/cosmos/implementation/http/ReactorNettyClient.java index f62082edaacc8..1753b826c2abd 100644 --- a/sdk/cosmos/azure-cosmos/src/main/java/com/azure/cosmos/implementation/http/ReactorNettyClient.java +++ b/sdk/cosmos/azure-cosmos/src/main/java/com/azure/cosmos/implementation/http/ReactorNettyClient.java @@ -6,6 +6,8 @@ import com.azure.cosmos.implementation.Configs; import com.azure.cosmos.implementation.ImplementationBridgeHelpers; import io.netty.buffer.ByteBuf; +import io.netty.buffer.ByteBufAllocator; +import io.netty.buffer.PooledByteBufAllocator; import io.netty.channel.Channel; import io.netty.channel.ChannelId; import io.netty.channel.ChannelOption; @@ -16,6 +18,7 @@ import io.netty.resolver.DefaultAddressResolverGroup; import io.netty.util.ReferenceCountUtil; import io.netty.util.ResourceLeakDetector; +import io.netty.util.internal.SystemPropertyUtil; import org.reactivestreams.Publisher; import org.reactivestreams.Subscription; import org.slf4j.Logger; @@ -51,6 +54,8 @@ private static ImplementationBridgeHelpers.Http2ConnectionConfigHelper.Http2Conn private static final boolean leakDetectionDebuggingEnabled = ResourceLeakDetector.getLevel().ordinal() >= ResourceLeakDetector.Level.ADVANCED.ordinal(); private static final String REACTOR_NETTY_REQUEST_RECORD_KEY = "reactorNettyRequestRecordKey"; + private static final ByteBufAllocator DEFAULT_ALLOCATOR = SystemPropertyUtil.contains("io.netty.allocator.type") + ? ByteBufAllocator.DEFAULT : PooledByteBufAllocator.DEFAULT; private static final Logger logger = LoggerFactory.getLogger(ReactorNettyClient.class.getSimpleName()); @@ -134,6 +139,7 @@ private void configureChannelPipelineHandlers() { configs.getSslContext( httpClientConfig.isServerCertValidationDisabled(), false))) + .option(ChannelOption.ALLOCATOR, DEFAULT_ALLOCATOR) .option(ChannelOption.CONNECT_TIMEOUT_MILLIS, (int) this.httpClientConfig.getConnectionAcquireTimeout().toMillis()) .httpResponseDecoder(httpResponseDecoderSpec -> httpResponseDecoderSpec.maxInitialLineLength(this.httpClientConfig.getMaxInitialLineLength()) diff --git a/sdk/cosmos/azure-cosmos/src/main/java/module-info.java b/sdk/cosmos/azure-cosmos/src/main/java/module-info.java index f3faeda09014b..1b1ac64ec04f3 100644 --- a/sdk/cosmos/azure-cosmos/src/main/java/module-info.java +++ b/sdk/cosmos/azure-cosmos/src/main/java/module-info.java @@ -12,6 +12,7 @@ requires io.netty.common; requires io.netty.buffer; requires io.netty.codec; + requires io.netty.codec.compression; requires io.netty.resolver; requires io.netty.codec.http; requires io.netty.codec.http2; diff --git a/sdk/e2e/pom.xml b/sdk/e2e/pom.xml index dbabd6f05bf0a..bea1b049a71fc 100644 --- a/sdk/e2e/pom.xml +++ b/sdk/e2e/pom.xml @@ -82,7 +82,7 @@ io.projectreactor reactor-test - 3.7.19 + 3.8.7 test diff --git a/sdk/eventhubs/azure-messaging-eventhubs-checkpointstore-jedis/pom.xml b/sdk/eventhubs/azure-messaging-eventhubs-checkpointstore-jedis/pom.xml index 548ae65bada24..165877e265b5c 100644 --- a/sdk/eventhubs/azure-messaging-eventhubs-checkpointstore-jedis/pom.xml +++ b/sdk/eventhubs/azure-messaging-eventhubs-checkpointstore-jedis/pom.xml @@ -81,7 +81,7 @@ io.projectreactor reactor-test - 3.7.19 + 3.8.7 test diff --git a/sdk/eventhubs/azure-messaging-eventhubs/docs/pom.xml b/sdk/eventhubs/azure-messaging-eventhubs/docs/pom.xml index ee3fc592a1525..a858aa97c1292 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.7.19 + 3.8.7 diff --git a/sdk/openai/azure-ai-openai-realtime/CHANGELOG.md b/sdk/openai/azure-ai-openai-realtime/CHANGELOG.md index b64e6ac33abd5..c1cd59d241655 100644 --- a/sdk/openai/azure-ai-openai-realtime/CHANGELOG.md +++ b/sdk/openai/azure-ai-openai-realtime/CHANGELOG.md @@ -2,6 +2,8 @@ #### Dependency Updates +- Migrated `netty-codec-http` to `4.2.17.Final` and updated WebSocket event loops for Netty 4.2. + ## 1.0.0-beta.1 (TBD) - Azure OpenAI Realtime client library for Java. \ No newline at end of file diff --git a/sdk/openai/azure-ai-openai-realtime/pom.xml b/sdk/openai/azure-ai-openai-realtime/pom.xml index 7eb0ba2df0438..ebc65ef3638e6 100644 --- a/sdk/openai/azure-ai-openai-realtime/pom.xml +++ b/sdk/openai/azure-ai-openai-realtime/pom.xml @@ -59,14 +59,14 @@ com.azure azure-core - 1.59.1 + 1.60.0-beta.1 io.netty netty-codec-http - 4.1.137.Final + 4.2.17.Final @@ -81,7 +81,7 @@ com.azure azure-core-test - 1.27.0-beta.18 + 1.27.0-beta.19 test @@ -102,7 +102,7 @@ - io.netty:netty-codec-http:[4.1.137.Final] + io.netty:netty-codec-http:[4.2.17.Final] diff --git a/sdk/openai/azure-ai-openai-realtime/src/main/java/com/azure/ai/openai/realtime/implementation/websocket/WebSocketSessionNettyImpl.java b/sdk/openai/azure-ai-openai-realtime/src/main/java/com/azure/ai/openai/realtime/implementation/websocket/WebSocketSessionNettyImpl.java index a033e6c6cac74..8fcd01077fc0d 100644 --- a/sdk/openai/azure-ai-openai-realtime/src/main/java/com/azure/ai/openai/realtime/implementation/websocket/WebSocketSessionNettyImpl.java +++ b/sdk/openai/azure-ai-openai-realtime/src/main/java/com/azure/ai/openai/realtime/implementation/websocket/WebSocketSessionNettyImpl.java @@ -14,7 +14,8 @@ import io.netty.channel.ChannelOption; import io.netty.channel.ChannelPipeline; import io.netty.channel.EventLoopGroup; -import io.netty.channel.nio.NioEventLoopGroup; +import io.netty.channel.MultiThreadIoEventLoopGroup; +import io.netty.channel.nio.NioIoHandler; import io.netty.channel.socket.SocketChannel; import io.netty.channel.socket.nio.NioSocketChannel; import io.netty.handler.codec.http.HttpClientCodec; @@ -131,7 +132,7 @@ void connect() throws URISyntaxException, SSLException, InterruptedException, Ex sslCtx = null; } - group = new NioEventLoopGroup(); + group = new MultiThreadIoEventLoopGroup(NioIoHandler.newFactory()); handshaker = WebSocketClientHandshakerFactory.newHandshaker(uri, WebSocketVersion.V13, this.subProtocol, true, this.headers); diff --git a/sdk/openai/azure-ai-openai-realtime/src/main/java/module-info.java b/sdk/openai/azure-ai-openai-realtime/src/main/java/module-info.java index 6ea952fb0ced4..e53704ff8e5e8 100644 --- a/sdk/openai/azure-ai-openai-realtime/src/main/java/module-info.java +++ b/sdk/openai/azure-ai-openai-realtime/src/main/java/module-info.java @@ -10,6 +10,7 @@ requires io.netty.transport; requires io.netty.handler; requires io.netty.codec; + requires io.netty.codec.compression; requires io.netty.codec.http; exports com.azure.ai.openai.realtime; diff --git a/sdk/voicelive/azure-ai-voicelive/pom.xml b/sdk/voicelive/azure-ai-voicelive/pom.xml index f943f33eae2d9..50eff6f067b27 100644 --- a/sdk/voicelive/azure-ai-voicelive/pom.xml +++ b/sdk/voicelive/azure-ai-voicelive/pom.xml @@ -84,7 +84,7 @@ Code generated by Microsoft (R) TypeSpec Code Generator. io.projectreactor reactor-test - 3.7.19 + 3.8.7 test diff --git a/sdk/webpubsub/azure-messaging-webpubsub-client/CHANGELOG.md b/sdk/webpubsub/azure-messaging-webpubsub-client/CHANGELOG.md index 1cf59d6b09699..626467ed29462 100644 --- a/sdk/webpubsub/azure-messaging-webpubsub-client/CHANGELOG.md +++ b/sdk/webpubsub/azure-messaging-webpubsub-client/CHANGELOG.md @@ -14,7 +14,7 @@ #### Dependency Updates -- Upgraded `netty-codec-http` from `4.1.135.Final` to version `4.1.136.Final`. +- Migrated `netty-codec-http` to `4.2.17.Final` and updated WebSocket event loops for Netty 4.2. ## 1.1.10 (2026-08-18) diff --git a/sdk/webpubsub/azure-messaging-webpubsub-client/pom.xml b/sdk/webpubsub/azure-messaging-webpubsub-client/pom.xml index 4127e75641c04..b997dc78ecc63 100644 --- a/sdk/webpubsub/azure-messaging-webpubsub-client/pom.xml +++ b/sdk/webpubsub/azure-messaging-webpubsub-client/pom.xml @@ -48,21 +48,21 @@ com.azure azure-core - 1.59.1 + 1.60.0-beta.1 io.netty netty-codec-http - 4.1.137.Final + 4.2.17.Final com.azure azure-core-test - 1.27.0-beta.18 + 1.27.0-beta.19 test @@ -101,7 +101,7 @@ - io.netty:netty-codec-http:[4.1.137.Final] + io.netty:netty-codec-http:[4.2.17.Final] diff --git a/sdk/webpubsub/azure-messaging-webpubsub-client/src/main/java/com/azure/messaging/webpubsub/client/implementation/websocket/WebSocketSessionNettyImpl.java b/sdk/webpubsub/azure-messaging-webpubsub-client/src/main/java/com/azure/messaging/webpubsub/client/implementation/websocket/WebSocketSessionNettyImpl.java index 8229e60f16cf8..0b449dde5516c 100644 --- a/sdk/webpubsub/azure-messaging-webpubsub-client/src/main/java/com/azure/messaging/webpubsub/client/implementation/websocket/WebSocketSessionNettyImpl.java +++ b/sdk/webpubsub/azure-messaging-webpubsub-client/src/main/java/com/azure/messaging/webpubsub/client/implementation/websocket/WebSocketSessionNettyImpl.java @@ -10,11 +10,15 @@ import com.azure.messaging.webpubsub.client.implementation.models.WebPubSubMessage; import com.azure.messaging.webpubsub.client.models.ConnectFailedException; import io.netty.bootstrap.Bootstrap; +import io.netty.buffer.ByteBufAllocator; +import io.netty.buffer.PooledByteBufAllocator; import io.netty.channel.Channel; import io.netty.channel.ChannelInitializer; +import io.netty.channel.ChannelOption; import io.netty.channel.ChannelPipeline; import io.netty.channel.EventLoopGroup; -import io.netty.channel.nio.NioEventLoopGroup; +import io.netty.channel.MultiThreadIoEventLoopGroup; +import io.netty.channel.nio.NioIoHandler; import io.netty.channel.socket.SocketChannel; import io.netty.channel.socket.nio.NioSocketChannel; import io.netty.handler.codec.http.DefaultHttpHeaders; @@ -29,6 +33,7 @@ import io.netty.handler.codec.http.websocketx.extensions.compression.WebSocketClientCompressionHandler; import io.netty.handler.ssl.SslContext; import io.netty.handler.ssl.SslContextBuilder; +import io.netty.util.internal.SystemPropertyUtil; import javax.net.ssl.SSLException; import java.net.URI; @@ -75,7 +80,7 @@ protected void initChannel(SocketChannel ch) { p.addLast(sslCtx.newHandler(ch.alloc(), host, port)); } - p.addLast(new HttpClientCodec(), new HttpObjectAggregator(8192), WebSocketClientCompressionHandler.INSTANCE, + p.addLast(new HttpClientCodec(), new HttpObjectAggregator(8192), new WebSocketClientCompressionHandler(0), handler); } } @@ -123,7 +128,7 @@ void connect() throws URISyntaxException, SSLException, InterruptedException, Ex sslCtx = null; } - group = new NioEventLoopGroup(); + group = new MultiThreadIoEventLoopGroup(NioIoHandler.newFactory()); handshaker = WebSocketClientHandshakerFactory.newHandshaker(uri, WebSocketVersion.V13, protocol, true, new DefaultHttpHeaders().add(HttpHeaderName.USER_AGENT.getCaseInsensitiveName(), userAgent)); @@ -133,6 +138,10 @@ void connect() throws URISyntaxException, SSLException, InterruptedException, Ex Bootstrap b = new Bootstrap(); b.group(group) .channel(NioSocketChannel.class) + .option(ChannelOption.ALLOCATOR, + SystemPropertyUtil.contains("io.netty.allocator.type") + ? ByteBufAllocator.DEFAULT + : PooledByteBufAllocator.DEFAULT) .handler(new WebSocketChannelHandler(host, port, sslCtx, clientHandler)); final CompletableFuture handshakeCallbackFuture = new CompletableFuture<>(); diff --git a/sdk/webpubsub/azure-messaging-webpubsub-client/src/main/java/module-info.java b/sdk/webpubsub/azure-messaging-webpubsub-client/src/main/java/module-info.java index b701da2f86b2b..478c4b9eb9a9d 100644 --- a/sdk/webpubsub/azure-messaging-webpubsub-client/src/main/java/module-info.java +++ b/sdk/webpubsub/azure-messaging-webpubsub-client/src/main/java/module-info.java @@ -9,6 +9,7 @@ requires io.netty.transport; requires io.netty.handler; requires io.netty.codec; + requires io.netty.codec.compression; requires io.netty.codec.http; exports com.azure.messaging.webpubsub.client; From 65963a7f6f911ea18c4b2fcb409cda8d117f6e59 Mon Sep 17 00:00:00 2001 From: alzimmermsft <48699787+alzimmermsft@users.noreply.github.com> Date: Mon, 21 Sep 2026 16:42:46 -0400 Subject: [PATCH 02/21] Update versions --- eng/versioning/external_dependencies.txt | 28 +++++------ sdk/ai/azure-ai-agents/pom.xml | 26 ++++------ sdk/clientcore/http-netty4/pom.xml | 46 +++++++++--------- sdk/core/azure-core-http-netty/pom.xml | 48 +++++++++---------- sdk/openai/azure-ai-openai-realtime/pom.xml | 4 +- .../azure-messaging-webpubsub-chat/pom.xml | 4 +- .../azure-messaging-webpubsub-client/pom.xml | 4 +- 7 files changed, 77 insertions(+), 83 deletions(-) diff --git a/eng/versioning/external_dependencies.txt b/eng/versioning/external_dependencies.txt index cfb52059512eb..32743899667b4 100644 --- a/eng/versioning/external_dependencies.txt +++ b/eng/versioning/external_dependencies.txt @@ -44,20 +44,20 @@ commons-net:commons-net;3.9.0 io.cloudevents:cloudevents-api;2.2.0 io.cloudevents:cloudevents-core;2.2.0 io.fabric8:kubernetes-client;6.12.1 -io.netty:netty-buffer;4.2.17.Final -io.netty:netty-common;4.2.17.Final -io.netty:netty-codec-base;4.2.17.Final -io.netty:netty-codec-http;4.2.17.Final -io.netty:netty-codec-http2;4.2.17.Final -io.netty:netty-handler;4.2.17.Final -io.netty:netty-handler-proxy;4.2.17.Final -io.netty:netty-resolver;4.2.17.Final -io.netty:netty-resolver-dns;4.2.17.Final -io.netty:netty-tcnative-boringssl-static;2.0.81.Final -io.netty:netty-transport;4.2.17.Final -io.netty:netty-transport-native-epoll;4.2.17.Final -io.netty:netty-transport-native-unix-common;4.2.17.Final -io.netty:netty-transport-native-kqueue;4.2.17.Final +io.netty:netty-buffer;4.2.18.Final +io.netty:netty-common;4.2.18.Final +io.netty:netty-codec-base;4.2.18.Final +io.netty:netty-codec-http;4.2.18.Final +io.netty:netty-codec-http2;4.2.18.Final +io.netty:netty-handler;4.2.18.Final +io.netty:netty-handler-proxy;4.2.18.Final +io.netty:netty-resolver;4.2.18.Final +io.netty:netty-resolver-dns;4.2.18.Final +io.netty:netty-tcnative-boringssl-static;2.0.84.Final +io.netty:netty-transport;4.2.18.Final +io.netty:netty-transport-native-epoll;4.2.18.Final +io.netty:netty-transport-native-unix-common;4.2.18.Final +io.netty:netty-transport-native-kqueue;4.2.18.Final io.projectreactor.netty:reactor-netty-http;1.3.7 io.projectreactor:reactor-core;3.8.7 io.vertx:vertx-codegen;4.5.32 diff --git a/sdk/ai/azure-ai-agents/pom.xml b/sdk/ai/azure-ai-agents/pom.xml index ba9357dcb2830..2a3a6f76ba642 100644 --- a/sdk/ai/azure-ai-agents/pom.xml +++ b/sdk/ai/azure-ai-agents/pom.xml @@ -73,32 +73,27 @@ io.projectreactor.netty reactor-netty-http - 1.2.18 + 1.3.7 io.netty netty-codec-http - 4.1.137.Final + 4.2.18.Final io.netty netty-transport - 4.1.137.Final + 4.2.18.Final io.netty netty-common - 4.1.137.Final - - - io.netty - netty-codec - 4.1.137.Final + 4.2.18.Final io.netty netty-buffer - 4.1.137.Final + 4.2.18.Final com.squareup.okhttp3 @@ -150,12 +145,11 @@ com.openai:openai-java:[4.45.0] - io.projectreactor.netty:reactor-netty-http:[1.2.18] - io.netty:netty-codec-http:[4.1.137.Final] - io.netty:netty-transport:[4.1.137.Final] - io.netty:netty-common:[4.1.137.Final] - io.netty:netty-codec:[4.1.137.Final] - io.netty:netty-buffer:[4.1.137.Final] + io.projectreactor.netty:reactor-netty-http:[1.3.7] + io.netty:netty-codec-http:[4.2.18.Final] + io.netty:netty-transport:[4.2.18.Final] + io.netty:netty-common:[4.2.18.Final] + io.netty:netty-buffer:[4.2.18.Final] com.squareup.okhttp3:okhttp:[4.12.0] com.squareup.okio:okio-jvm:[3.18.1] diff --git a/sdk/clientcore/http-netty4/pom.xml b/sdk/clientcore/http-netty4/pom.xml index 77dd38f833d52..63caa03641869 100644 --- a/sdk/clientcore/http-netty4/pom.xml +++ b/sdk/clientcore/http-netty4/pom.xml @@ -56,7 +56,7 @@ io.clientcore.core.implementation*,io.clientcore.core.models,io.clientcore.core.util,io.clientcore.core.util* - 4.2.17.Final + 4.2.18.Final @@ -69,52 +69,52 @@ io.netty netty-buffer - 4.2.17.Final + 4.2.18.Final io.netty netty-codec-base - 4.2.17.Final + 4.2.18.Final io.netty netty-codec-http - 4.2.17.Final + 4.2.18.Final io.netty netty-codec-http2 - 4.2.17.Final + 4.2.18.Final io.netty netty-common - 4.2.17.Final + 4.2.18.Final io.netty netty-handler - 4.2.17.Final + 4.2.18.Final io.netty netty-handler-proxy - 4.2.17.Final + 4.2.18.Final io.netty netty-resolver - 4.2.17.Final + 4.2.18.Final io.netty netty-resolver-dns - 4.2.17.Final + 4.2.18.Final io.netty netty-transport - 4.2.17.Final + 4.2.18.Final @@ -129,7 +129,7 @@ io.netty netty-transport-native-epoll - 4.2.17.Final + 4.2.18.Final linux-x86_64 test @@ -137,7 +137,7 @@ io.netty netty-transport-native-kqueue - 4.2.17.Final + 4.2.18.Final osx-x86_64 test @@ -209,16 +209,16 @@ - io.netty:netty-buffer:[4.2.17.Final] - io.netty:netty-codec-base:[4.2.17.Final] - io.netty:netty-codec-http:[4.2.17.Final] - io.netty:netty-codec-http2:[4.2.17.Final] - io.netty:netty-common:[4.2.17.Final] - io.netty:netty-handler:[4.2.17.Final] - io.netty:netty-handler-proxy:[4.2.17.Final] - io.netty:netty-resolver:[4.2.17.Final] - io.netty:netty-resolver-dns:[4.2.17.Final] - io.netty:netty-transport:[4.2.17.Final] + io.netty:netty-buffer:[4.2.18.Final] + io.netty:netty-codec-base:[4.2.18.Final] + io.netty:netty-codec-http:[4.2.18.Final] + io.netty:netty-codec-http2:[4.2.18.Final] + io.netty:netty-common:[4.2.18.Final] + io.netty:netty-handler:[4.2.18.Final] + io.netty:netty-handler-proxy:[4.2.18.Final] + io.netty:netty-resolver:[4.2.18.Final] + io.netty:netty-resolver-dns:[4.2.18.Final] + io.netty:netty-transport:[4.2.18.Final] diff --git a/sdk/core/azure-core-http-netty/pom.xml b/sdk/core/azure-core-http-netty/pom.xml index 1ccfa18cfd55c..8b441e1eaac51 100644 --- a/sdk/core/azure-core-http-netty/pom.xml +++ b/sdk/core/azure-core-http-netty/pom.xml @@ -64,8 +64,8 @@ false false - 4.2.17.Final - 2.0.81.Final + 4.2.18.Final + 2.0.84.Final @@ -85,56 +85,56 @@ io.netty netty-handler - 4.2.17.Final + 4.2.18.Final io.netty netty-handler-proxy - 4.2.17.Final + 4.2.18.Final io.netty netty-buffer - 4.2.17.Final + 4.2.18.Final io.netty netty-codec-base - 4.2.17.Final + 4.2.18.Final io.netty netty-codec-http - 4.2.17.Final + 4.2.18.Final io.netty netty-codec-http2 - 4.2.17.Final + 4.2.18.Final io.netty netty-transport-native-unix-common - 4.2.17.Final + 4.2.18.Final io.netty netty-transport-native-epoll - 4.2.17.Final + 4.2.18.Final linux-x86_64 io.netty netty-transport-native-kqueue - 4.2.17.Final + 4.2.18.Final osx-x86_64 io.netty netty-tcnative-boringssl-static - 2.0.81.Final + 2.0.84.Final ${boring-ssl-classifier} @@ -147,7 +147,7 @@ io.netty netty-common - 4.2.17.Final + 4.2.18.Final @@ -208,18 +208,18 @@ - io.netty:netty-tcnative-boringssl-static:[2.0.81.Final] + io.netty:netty-tcnative-boringssl-static:[2.0.84.Final] io.projectreactor.netty:reactor-netty-http:[1.3.7] - io.netty:netty-buffer:[4.2.17.Final] - io.netty:netty-common:[4.2.17.Final] - io.netty:netty-codec-base:[4.2.17.Final] - io.netty:netty-codec-http:[4.2.17.Final] - io.netty:netty-codec-http2:[4.2.17.Final] - io.netty:netty-handler:[4.2.17.Final] - io.netty:netty-handler-proxy:[4.2.17.Final] - io.netty:netty-transport-native-unix-common:[4.2.17.Final] - io.netty:netty-transport-native-epoll:[4.2.17.Final] - io.netty:netty-transport-native-kqueue:[4.2.17.Final] + io.netty:netty-buffer:[4.2.18.Final] + io.netty:netty-common:[4.2.18.Final] + io.netty:netty-codec-base:[4.2.18.Final] + io.netty:netty-codec-http:[4.2.18.Final] + io.netty:netty-codec-http2:[4.2.18.Final] + io.netty:netty-handler:[4.2.18.Final] + io.netty:netty-handler-proxy:[4.2.18.Final] + io.netty:netty-transport-native-unix-common:[4.2.18.Final] + io.netty:netty-transport-native-epoll:[4.2.18.Final] + io.netty:netty-transport-native-kqueue:[4.2.18.Final] diff --git a/sdk/openai/azure-ai-openai-realtime/pom.xml b/sdk/openai/azure-ai-openai-realtime/pom.xml index ebc65ef3638e6..76cb0c9b96cc8 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.2.17.Final + 4.2.18.Final @@ -102,7 +102,7 @@ - io.netty:netty-codec-http:[4.2.17.Final] + io.netty:netty-codec-http:[4.2.18.Final] diff --git a/sdk/webpubsub/azure-messaging-webpubsub-chat/pom.xml b/sdk/webpubsub/azure-messaging-webpubsub-chat/pom.xml index 66d18fe76678d..5a173ea31d352 100644 --- a/sdk/webpubsub/azure-messaging-webpubsub-chat/pom.xml +++ b/sdk/webpubsub/azure-messaging-webpubsub-chat/pom.xml @@ -75,7 +75,7 @@ io.projectreactor.netty reactor-netty-http - 1.2.18 + 1.3.7 test @@ -90,7 +90,7 @@ com.nimbusds:nimbus-jose-jwt:[9.37.3] - io.projectreactor.netty:reactor-netty-http:[1.2.18] + io.projectreactor.netty:reactor-netty-http:[1.3.7] diff --git a/sdk/webpubsub/azure-messaging-webpubsub-client/pom.xml b/sdk/webpubsub/azure-messaging-webpubsub-client/pom.xml index b997dc78ecc63..6994d8228c76a 100644 --- a/sdk/webpubsub/azure-messaging-webpubsub-client/pom.xml +++ b/sdk/webpubsub/azure-messaging-webpubsub-client/pom.xml @@ -55,7 +55,7 @@ io.netty netty-codec-http - 4.2.17.Final + 4.2.18.Final @@ -101,7 +101,7 @@ - io.netty:netty-codec-http:[4.2.17.Final] + io.netty:netty-codec-http:[4.2.18.Final] From 8739832382fcc50a67a51332bf288aa9ca7f8081 Mon Sep 17 00:00:00 2001 From: alzimmermsft <48699787+alzimmermsft@users.noreply.github.com> Date: Tue, 22 Sep 2026 08:30:00 -0400 Subject: [PATCH 03/21] Fix build --- eng/versioning/version_client.txt | 1 + sdk/ai/azure-ai-agents/pom.xml | 8 +++++++- .../azure-ai-agents/src/main/java/module-info.java | 12 +++++++----- sdk/cosmos/azure-cosmos/pom.xml | 6 ------ 4 files changed, 15 insertions(+), 12 deletions(-) diff --git a/eng/versioning/version_client.txt b/eng/versioning/version_client.txt index 9b31748dfa397..fd24f34e7bd64 100644 --- a/eng/versioning/version_client.txt +++ b/eng/versioning/version_client.txt @@ -576,6 +576,7 @@ io.clientcore:optional-dependency-tests;1.0.0-beta.1;1.0.0-beta.1 # In the pom, the version update tag after the version should name the unreleased package and the dependency version: # +unreleased_com.azure:azure-core-http-netty;1.17.0-beta.1 unreleased_com.azure.v2:azure-core;2.0.0-beta.1 unreleased_com.azure.v2:azure-identity;2.0.0-beta.1 unreleased_com.azure.v2:azure-data-appconfiguration;2.0.0-beta.1 diff --git a/sdk/ai/azure-ai-agents/pom.xml b/sdk/ai/azure-ai-agents/pom.xml index 2a3a6f76ba642..42f090478ab1e 100644 --- a/sdk/ai/azure-ai-agents/pom.xml +++ b/sdk/ai/azure-ai-agents/pom.xml @@ -68,13 +68,18 @@ com.azure azure-core-http-netty - 1.16.7 + 1.17.0-beta.1 io.projectreactor.netty reactor-netty-http 1.3.7 + + io.netty + netty-codec-base + 4.2.18.Final + io.netty netty-codec-http @@ -146,6 +151,7 @@ com.openai:openai-java:[4.45.0] io.projectreactor.netty:reactor-netty-http:[1.3.7] + io.netty:netty-codec-base:[4.2.18.Final] io.netty:netty-codec-http:[4.2.18.Final] io.netty:netty-transport:[4.2.18.Final] io.netty:netty-common:[4.2.18.Final] diff --git a/sdk/ai/azure-ai-agents/src/main/java/module-info.java b/sdk/ai/azure-ai-agents/src/main/java/module-info.java index 06498120ce9ef..c2dc1a7fa3e35 100644 --- a/sdk/ai/azure-ai-agents/src/main/java/module-info.java +++ b/sdk/ai/azure-ai-agents/src/main/java/module-info.java @@ -6,15 +6,17 @@ requires transitive com.azure.core; requires transitive openai.java.core; requires transitive openai.java.client.okhttp; - requires reactor.netty.http; - requires reactor.netty.core; + + requires io.netty.buffer; + requires io.netty.codec; + requires io.netty.codec.compression; requires io.netty.codec.http; - requires io.netty.transport; requires io.netty.common; - requires io.netty.codec; - requires io.netty.buffer; + requires io.netty.transport; requires okhttp3; requires okio; + requires reactor.netty.core; + requires reactor.netty.http; exports com.azure.ai.agents; exports com.azure.ai.agents.models; diff --git a/sdk/cosmos/azure-cosmos/pom.xml b/sdk/cosmos/azure-cosmos/pom.xml index 18e08e9306fa1..d9f08fea0cfad 100644 --- a/sdk/cosmos/azure-cosmos/pom.xml +++ b/sdk/cosmos/azure-cosmos/pom.xml @@ -73,12 +73,6 @@ Licensed under the MIT License. com.azure azure-core-http-netty 1.17.0-beta.1 - - - com.azure - azure-core - - com.fasterxml.jackson.module From 219ff7c92a059219ab5984a2f87aaa9c6ce11ed6 Mon Sep 17 00:00:00 2001 From: alzimmermsft <48699787+alzimmermsft@users.noreply.github.com> Date: Thu, 24 Sep 2026 17:05:18 -0400 Subject: [PATCH 04/21] Remove usage of Netty where it isn't available --- sdk/clientcore/cspell.yml | 1 + sdk/cosmos/cspell.yml | 1 + .../ai/formrecognizer/FormTrainingAsyncClientTest.java | 7 +++---- .../azure/ai/formrecognizer/FormTrainingClientTest.java | 9 ++++----- .../administration/DocumentModelAdminClientTest.java | 7 +++---- .../azure/ai/metricsadvisor/DataFeedAsyncClientTest.java | 5 ++--- .../com/azure/ai/metricsadvisor/DataFeedClientTest.java | 6 ++---- .../ServiceBusAdministrationAsyncClientTest.java | 7 +++---- 8 files changed, 19 insertions(+), 24 deletions(-) diff --git a/sdk/clientcore/cspell.yml b/sdk/clientcore/cspell.yml index 1874e7c0202fc..a285a56a850db 100644 --- a/sdk/clientcore/cspell.yml +++ b/sdk/clientcore/cspell.yml @@ -14,6 +14,7 @@ words: - "erroronmissingdir" - "fqcn" - "httpheadename" + - "jpms" - "lmolkova" - "replayablity" - "serializables" diff --git a/sdk/cosmos/cspell.yml b/sdk/cosmos/cspell.yml index 31e8b2522d0bf..a0a1da433f555 100644 --- a/sdk/cosmos/cspell.yml +++ b/sdk/cosmos/cspell.yml @@ -42,6 +42,7 @@ words: - "jgss" - "jnilib" - "jodd" + - "jpms" - "kihn" - "ksql" - "latencyutils" diff --git a/sdk/formrecognizer/azure-ai-formrecognizer/src/test/java/com/azure/ai/formrecognizer/FormTrainingAsyncClientTest.java b/sdk/formrecognizer/azure-ai-formrecognizer/src/test/java/com/azure/ai/formrecognizer/FormTrainingAsyncClientTest.java index 9aef13b3fe99f..d7ff043a5d1f0 100644 --- a/sdk/formrecognizer/azure-ai-formrecognizer/src/test/java/com/azure/ai/formrecognizer/FormTrainingAsyncClientTest.java +++ b/sdk/formrecognizer/azure-ai-formrecognizer/src/test/java/com/azure/ai/formrecognizer/FormTrainingAsyncClientTest.java @@ -21,7 +21,6 @@ import com.azure.core.http.HttpClient; import com.azure.core.util.polling.PollerFlux; import com.azure.core.util.polling.SyncPoller; -import io.netty.handler.codec.http.HttpResponseStatus; import org.junit.jupiter.api.Disabled; import org.junit.jupiter.params.ParameterizedTest; import org.junit.jupiter.params.provider.MethodSource; @@ -90,7 +89,7 @@ public void getCustomModelWithResponse(HttpClient httpClient, FormRecognizerServ StepVerifier.create(client.getCustomModelWithResponse(trainedModel.getModelId())) .assertNext(customFormModelResponse -> { - assertEquals(customFormModelResponse.getStatusCode(), HttpResponseStatus.OK.code()); + assertEquals(200, customFormModelResponse.getStatusCode()); validateCustomModelData(syncPoller.getFinalResult(), false, false); }); }); @@ -182,7 +181,7 @@ public void deleteModelValidModelIdWithResponse(HttpClient httpClient, CustomFormModel createdModel = syncPoller.getFinalResult(); StepVerifier.create(client.deleteModelWithResponse(createdModel.getModelId())) - .assertNext(response -> assertEquals(response.getStatusCode(), HttpResponseStatus.NO_CONTENT.code())) + .assertNext(response -> assertEquals(204, response.getStatusCode())) .expectComplete() .verify(DEFAULT_TIMEOUT); @@ -212,7 +211,7 @@ public void deleteModelValidModelIdWithResponseWithoutTrainingLabels(HttpClient CustomFormModel createdModel = syncPoller.getFinalResult(); StepVerifier.create(client.deleteModelWithResponse(createdModel.getModelId())) - .assertNext(response -> assertEquals(response.getStatusCode(), HttpResponseStatus.NO_CONTENT.code())) + .assertNext(response -> assertEquals(204, response.getStatusCode())) .expectComplete() .verify(DEFAULT_TIMEOUT); diff --git a/sdk/formrecognizer/azure-ai-formrecognizer/src/test/java/com/azure/ai/formrecognizer/FormTrainingClientTest.java b/sdk/formrecognizer/azure-ai-formrecognizer/src/test/java/com/azure/ai/formrecognizer/FormTrainingClientTest.java index 36f92011b7faf..7be659ce61242 100644 --- a/sdk/formrecognizer/azure-ai-formrecognizer/src/test/java/com/azure/ai/formrecognizer/FormTrainingClientTest.java +++ b/sdk/formrecognizer/azure-ai-formrecognizer/src/test/java/com/azure/ai/formrecognizer/FormTrainingClientTest.java @@ -23,7 +23,6 @@ import com.azure.core.http.rest.Response; import com.azure.core.util.Context; import com.azure.core.util.polling.SyncPoller; -import io.netty.handler.codec.http.HttpResponseStatus; import org.junit.jupiter.api.Disabled; import org.junit.jupiter.params.ParameterizedTest; import org.junit.jupiter.params.provider.MethodSource; @@ -81,7 +80,7 @@ public void getCustomModelWithResponse(HttpClient httpClient, FormRecognizerServ .getFinalResult(); Response customModelWithResponse = client.getCustomModelWithResponse(trainedUnlabeledModel.getModelId(), Context.NONE); - assertEquals(customModelWithResponse.getStatusCode(), HttpResponseStatus.OK.code()); + assertEquals(200, customModelWithResponse.getStatusCode()); validateCustomModelData(customModelWithResponse.getValue(), false, false); }); } @@ -143,7 +142,7 @@ public void validGetAccountPropertiesWithResponse(HttpClient httpClient, // TODO (service bug): APIM error client = getFormTrainingClient(httpClient, serviceVersion); Response accountPropertiesResponse = client.getAccountPropertiesWithResponse(Context.NONE); - assertEquals(accountPropertiesResponse.getStatusCode(), HttpResponseStatus.OK.code()); + assertEquals(200, accountPropertiesResponse.getStatusCode()); validateAccountProperties(accountPropertiesResponse.getValue()); } @@ -161,7 +160,7 @@ public void deleteModelValidModelIdWithResponse(HttpClient httpClient, final Response deleteModelWithResponse = client.deleteModelWithResponse(createdModel.getModelId(), Context.NONE); - assertEquals(deleteModelWithResponse.getStatusCode(), HttpResponseStatus.NO_CONTENT.code()); + assertEquals(204, deleteModelWithResponse.getStatusCode()); final HttpResponseException exception = assertThrows(HttpResponseException.class, () -> client.getCustomModelWithResponse(createdModel.getModelId(), Context.NONE)); final FormRecognizerErrorInformation errorInformation @@ -184,7 +183,7 @@ public void deleteModelValidModelIdWithResponseWithoutTrainingLabels(HttpClient final Response deleteModelWithResponse = client.deleteModelWithResponse(createdModel.getModelId(), Context.NONE); - assertEquals(deleteModelWithResponse.getStatusCode(), HttpResponseStatus.NO_CONTENT.code()); + assertEquals(204, deleteModelWithResponse.getStatusCode()); final HttpResponseException exception = assertThrows(HttpResponseException.class, () -> client.getCustomModelWithResponse(createdModel.getModelId(), Context.NONE)); final FormRecognizerErrorInformation errorInformation diff --git a/sdk/formrecognizer/azure-ai-formrecognizer/src/test/java/com/azure/ai/formrecognizer/documentanalysis/administration/DocumentModelAdminClientTest.java b/sdk/formrecognizer/azure-ai-formrecognizer/src/test/java/com/azure/ai/formrecognizer/documentanalysis/administration/DocumentModelAdminClientTest.java index 01c8fe2412403..54176159d33d2 100644 --- a/sdk/formrecognizer/azure-ai-formrecognizer/src/test/java/com/azure/ai/formrecognizer/documentanalysis/administration/DocumentModelAdminClientTest.java +++ b/sdk/formrecognizer/azure-ai-formrecognizer/src/test/java/com/azure/ai/formrecognizer/documentanalysis/administration/DocumentModelAdminClientTest.java @@ -29,7 +29,6 @@ import com.azure.core.util.BinaryData; import com.azure.core.util.Context; import com.azure.core.util.polling.SyncPoller; -import io.netty.handler.codec.http.HttpResponseStatus; import org.junit.jupiter.api.Assertions; import org.junit.jupiter.params.ParameterizedTest; import org.junit.jupiter.params.provider.MethodSource; @@ -110,7 +109,7 @@ public void getModelWithResponse(HttpClient httpClient, DocumentAnalysisServiceV = client.getDocumentModelWithResponse(documentModelDetails.getModelId(), Context.NONE); client.deleteDocumentModel(documentModelDetails.getModelId()); - assertEquals(documentModelResponse.getStatusCode(), HttpResponseStatus.OK.code()); + assertEquals(200, documentModelResponse.getStatusCode()); validateDocumentModelData(documentModelResponse.getValue()); }); } @@ -134,7 +133,7 @@ public void validGetResourceDetailsWithResponse(HttpClient httpClient, DocumentAnalysisServiceVersion serviceVersion) { client = getDocumentModelAdministrationClient(httpClient, serviceVersion); Response resourceDetailsResponse = client.getResourceDetailsWithResponse(Context.NONE); - assertEquals(resourceDetailsResponse.getStatusCode(), HttpResponseStatus.OK.code()); + assertEquals(200, resourceDetailsResponse.getStatusCode()); validateResourceInfo(resourceDetailsResponse.getValue()); } @@ -166,7 +165,7 @@ public void deleteModelValidModelIDWithResponse(HttpClient httpClient, final Response deleteModelWithResponse = client.deleteDocumentModelWithResponse(createdModel.getModelId(), Context.NONE); - assertEquals(deleteModelWithResponse.getStatusCode(), HttpResponseStatus.NO_CONTENT.code()); + assertEquals(204, deleteModelWithResponse.getStatusCode()); final HttpResponseException exception = assertThrows(HttpResponseException.class, () -> client.getDocumentModelWithResponse(createdModel.getModelId(), Context.NONE)); final ResponseError responseError = (ResponseError) exception.getValue(); diff --git a/sdk/metricsadvisor/azure-ai-metricsadvisor/src/test/java/com/azure/ai/metricsadvisor/DataFeedAsyncClientTest.java b/sdk/metricsadvisor/azure-ai-metricsadvisor/src/test/java/com/azure/ai/metricsadvisor/DataFeedAsyncClientTest.java index e809843003ff0..dcc8660bd6c6e 100644 --- a/sdk/metricsadvisor/azure-ai-metricsadvisor/src/test/java/com/azure/ai/metricsadvisor/DataFeedAsyncClientTest.java +++ b/sdk/metricsadvisor/azure-ai-metricsadvisor/src/test/java/com/azure/ai/metricsadvisor/DataFeedAsyncClientTest.java @@ -16,7 +16,6 @@ import com.azure.core.test.annotation.DoNotRecord; import com.azure.core.test.http.MockHttpResponse; import com.azure.core.util.CoreUtils; -import io.netty.handler.codec.http.HttpResponseStatus; import org.junit.jupiter.api.Test; import org.junit.jupiter.params.ParameterizedTest; import org.junit.jupiter.params.provider.MethodSource; @@ -346,7 +345,7 @@ public void getDataFeedValidId(HttpClient httpClient, MetricsAdvisorServiceVersi // Act & Assert StepVerifier.create(client.getDataFeedWithResponse(createdDataFeed.getId())) .assertNext(dataFeedResponse -> { - assertEquals(dataFeedResponse.getStatusCode(), HttpResponseStatus.OK.code()); + assertEquals(200, dataFeedResponse.getStatusCode()); validateDataFeedResult(createdDataFeed, dataFeedResponse.getValue(), SQL_SERVER_DB); }); // TODO (alzimmer): This test needs to be recorded again as it was never verifying, therefore never @@ -725,7 +724,7 @@ public void deleteDataFeedIdWithResponse(HttpClient httpClient, MetricsAdvisorSe assertNotNull(createdDataFeed); StepVerifier.create(client.deleteDataFeedWithResponse(createdDataFeed.getId())) - .assertNext(response -> assertEquals(response.getStatusCode(), HttpResponseStatus.NO_CONTENT.code())) + .assertNext(response -> assertEquals(204, response.getStatusCode())) .expectComplete() .verify(DEFAULT_TIMEOUT); diff --git a/sdk/metricsadvisor/azure-ai-metricsadvisor/src/test/java/com/azure/ai/metricsadvisor/DataFeedClientTest.java b/sdk/metricsadvisor/azure-ai-metricsadvisor/src/test/java/com/azure/ai/metricsadvisor/DataFeedClientTest.java index c6f1ec9b5b355..a81dcc4edf2ed 100644 --- a/sdk/metricsadvisor/azure-ai-metricsadvisor/src/test/java/com/azure/ai/metricsadvisor/DataFeedClientTest.java +++ b/sdk/metricsadvisor/azure-ai-metricsadvisor/src/test/java/com/azure/ai/metricsadvisor/DataFeedClientTest.java @@ -23,7 +23,6 @@ import com.azure.core.test.http.MockHttpResponse; import com.azure.core.util.Context; import com.azure.core.util.CoreUtils; -import io.netty.handler.codec.http.HttpResponseStatus; import org.junit.jupiter.api.Test; import org.junit.jupiter.params.ParameterizedTest; import org.junit.jupiter.params.provider.MethodSource; @@ -316,7 +315,7 @@ public void getDataFeedValidId(HttpClient httpClient, MetricsAdvisorServiceVersi // Act & Assert final Response dataFeedResponse = client.getDataFeedWithResponse(createdDataFeed.getId(), Context.NONE); - assertEquals(dataFeedResponse.getStatusCode(), HttpResponseStatus.OK.code()); + assertEquals(200, dataFeedResponse.getStatusCode()); validateDataFeedResult(createdDataFeed, dataFeedResponse.getValue(), SQL_SERVER_DB); }, SQL_SERVER_DB); } finally { @@ -706,8 +705,7 @@ public void deleteDataFeedIdWithResponse(HttpClient httpClient, MetricsAdvisorSe creatDataFeedRunner(dataFeed -> { final DataFeed createdDataFeed = client.createDataFeed(dataFeed); - assertEquals(HttpResponseStatus.NO_CONTENT.code(), - client.deleteDataFeedWithResponse(createdDataFeed.getId(), Context.NONE).getStatusCode()); + assertEquals(204, client.deleteDataFeedWithResponse(createdDataFeed.getId(), Context.NONE).getStatusCode()); // Act & Assert MetricsAdvisorResponseException exception = assertThrows(MetricsAdvisorResponseException.class, diff --git a/sdk/servicebus/azure-messaging-servicebus/src/test/java/com/azure/messaging/servicebus/administration/ServiceBusAdministrationAsyncClientTest.java b/sdk/servicebus/azure-messaging-servicebus/src/test/java/com/azure/messaging/servicebus/administration/ServiceBusAdministrationAsyncClientTest.java index 8e607a15a11af..206cc29a186cd 100644 --- a/sdk/servicebus/azure-messaging-servicebus/src/test/java/com/azure/messaging/servicebus/administration/ServiceBusAdministrationAsyncClientTest.java +++ b/sdk/servicebus/azure-messaging-servicebus/src/test/java/com/azure/messaging/servicebus/administration/ServiceBusAdministrationAsyncClientTest.java @@ -38,7 +38,6 @@ import com.azure.messaging.servicebus.administration.models.QueueRuntimeProperties; import com.azure.xml.XmlSerializable; import com.azure.xml.XmlWriter; -import io.netty.handler.codec.http.HttpResponseStatus; import org.junit.jupiter.api.AfterEach; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; @@ -528,7 +527,7 @@ void deleteRuleWithResponse() { // Act & Assert StepVerifier.create(client.deleteRuleWithResponse(topicName, subscriptionName, ruleName)) - .assertNext(actual -> assertEquals(actual.getStatusCode(), HttpResponseStatus.NO_CONTENT.code())) + .assertNext(actual -> assertEquals(204, actual.getStatusCode())) .expectComplete() .verify(DEFAULT_TIMEOUT); } @@ -555,7 +554,7 @@ void deleteSubscriptionWithResponse() { // Act & Assert StepVerifier.create(client.deleteSubscriptionWithResponse(topicName, subscriptionName)) - .assertNext(actual -> assertEquals(actual.getStatusCode(), HttpResponseStatus.NO_CONTENT.code())) + .assertNext(actual -> assertEquals(204, actual.getStatusCode())) .expectComplete() .verify(DEFAULT_TIMEOUT); } @@ -581,7 +580,7 @@ void deleteTopicWithResponse() { // Act & Assert StepVerifier.create(client.deleteTopicWithResponse(topicName)) - .assertNext(actual -> assertEquals(actual.getStatusCode(), HttpResponseStatus.NO_CONTENT.code())) + .assertNext(actual -> assertEquals(204, actual.getStatusCode())) .expectComplete() .verify(DEFAULT_TIMEOUT); } From b8d5111c226c9c95ae654e8b94cc2c61861297bd Mon Sep 17 00:00:00 2001 From: alzimmermsft <48699787+alzimmermsft@users.noreply.github.com> Date: Tue, 29 Sep 2026 16:59:26 -0400 Subject: [PATCH 05/21] Some cleanup --- sdk/clientcore/http-netty4/pom.xml | 82 ------------------- .../http/netty4/NettyHttpClientBuilder.java | 4 +- .../netty/NettyAsyncHttpClientBuilder.java | 4 + .../http/ReactorNettyClient.java | 3 + .../websocket/WebSocketSessionNettyImpl.java | 2 +- .../websocket/WebSocketSessionNettyImpl.java | 3 + 6 files changed, 14 insertions(+), 84 deletions(-) diff --git a/sdk/clientcore/http-netty4/pom.xml b/sdk/clientcore/http-netty4/pom.xml index d282189d0b929..63caa03641869 100644 --- a/sdk/clientcore/http-netty4/pom.xml +++ b/sdk/clientcore/http-netty4/pom.xml @@ -56,11 +56,7 @@ io.clientcore.core.implementation*,io.clientcore.core.models,io.clientcore.core.util,io.clientcore.core.util* -<<<<<<< HEAD 4.2.18.Final -======= - 4.1.138.Final ->>>>>>> 712f05ce16b48cd1d57d9131b8acbe502a379c6f @@ -73,93 +69,52 @@ io.netty netty-buffer -<<<<<<< HEAD 4.2.18.Final io.netty netty-codec-base 4.2.18.Final -======= - 4.1.138.Final - - - io.netty - netty-codec - 4.1.138.Final ->>>>>>> 712f05ce16b48cd1d57d9131b8acbe502a379c6f io.netty netty-codec-http -<<<<<<< HEAD 4.2.18.Final -======= - 4.1.138.Final ->>>>>>> 712f05ce16b48cd1d57d9131b8acbe502a379c6f io.netty netty-codec-http2 -<<<<<<< HEAD 4.2.18.Final -======= - 4.1.138.Final ->>>>>>> 712f05ce16b48cd1d57d9131b8acbe502a379c6f io.netty netty-common -<<<<<<< HEAD 4.2.18.Final -======= - 4.1.138.Final ->>>>>>> 712f05ce16b48cd1d57d9131b8acbe502a379c6f io.netty netty-handler -<<<<<<< HEAD 4.2.18.Final -======= - 4.1.138.Final ->>>>>>> 712f05ce16b48cd1d57d9131b8acbe502a379c6f io.netty netty-handler-proxy -<<<<<<< HEAD 4.2.18.Final -======= - 4.1.138.Final ->>>>>>> 712f05ce16b48cd1d57d9131b8acbe502a379c6f io.netty netty-resolver -<<<<<<< HEAD 4.2.18.Final -======= - 4.1.138.Final ->>>>>>> 712f05ce16b48cd1d57d9131b8acbe502a379c6f io.netty netty-resolver-dns -<<<<<<< HEAD 4.2.18.Final -======= - 4.1.138.Final ->>>>>>> 712f05ce16b48cd1d57d9131b8acbe502a379c6f io.netty netty-transport -<<<<<<< HEAD 4.2.18.Final -======= - 4.1.138.Final ->>>>>>> 712f05ce16b48cd1d57d9131b8acbe502a379c6f @@ -173,40 +128,16 @@ io.netty -<<<<<<< HEAD netty-transport-native-epoll 4.2.18.Final -======= - netty-transport-native-unix-common - 4.1.138.Final - linux-x86_64 - test - - - io.netty - netty-transport-native-epoll - 4.1.138.Final ->>>>>>> 712f05ce16b48cd1d57d9131b8acbe502a379c6f linux-x86_64 test io.netty -<<<<<<< HEAD netty-transport-native-kqueue 4.2.18.Final -======= - netty-transport-native-unix-common - 4.1.138.Final - osx-x86_64 - test - - - io.netty - netty-transport-native-kqueue - 4.1.138.Final ->>>>>>> 712f05ce16b48cd1d57d9131b8acbe502a379c6f osx-x86_64 test @@ -278,7 +209,6 @@ -<<<<<<< HEAD io.netty:netty-buffer:[4.2.18.Final] io.netty:netty-codec-base:[4.2.18.Final] io.netty:netty-codec-http:[4.2.18.Final] @@ -289,18 +219,6 @@ io.netty:netty-resolver:[4.2.18.Final] io.netty:netty-resolver-dns:[4.2.18.Final] io.netty:netty-transport:[4.2.18.Final] -======= - io.netty:netty-buffer:[4.1.138.Final] - io.netty:netty-codec:[4.1.138.Final] - io.netty:netty-codec-http:[4.1.138.Final] - io.netty:netty-codec-http2:[4.1.138.Final] - io.netty:netty-common:[4.1.138.Final] - io.netty:netty-handler:[4.1.138.Final] - io.netty:netty-handler-proxy:[4.1.138.Final] - io.netty:netty-resolver:[4.1.138.Final] - io.netty:netty-resolver-dns:[4.1.138.Final] - io.netty:netty-transport:[4.1.138.Final] ->>>>>>> 712f05ce16b48cd1d57d9131b8acbe502a379c6f diff --git a/sdk/clientcore/http-netty4/src/main/java/io/clientcore/http/netty4/NettyHttpClientBuilder.java b/sdk/clientcore/http-netty4/src/main/java/io/clientcore/http/netty4/NettyHttpClientBuilder.java index dde7adde03c7f..ef38cddf23eeb 100644 --- a/sdk/clientcore/http-netty4/src/main/java/io/clientcore/http/netty4/NettyHttpClientBuilder.java +++ b/sdk/clientcore/http-netty4/src/main/java/io/clientcore/http/netty4/NettyHttpClientBuilder.java @@ -408,8 +408,10 @@ public HttpClient build() { Bootstrap bootstrap = new Bootstrap().group(group) .channel(channelClass) .option(ChannelOption.CONNECT_TIMEOUT_MILLIS, (int) getTimeoutMillis(connectTimeout, 10_000)); - // Preserve the pooled default from Netty 4.1 while honoring an explicitly configured Netty allocator. bootstrap.option(ChannelOption.ALLOCATOR, + // If io.netty.allocator.type was configured, respect the configuration. Otherwise, fallback to the default + // setting from Netty 4.1 which was the pooled allocator. In the future, this should be validated for if + // this should use the new Netty 4.2 default which is an adaptive allocator. SystemPropertyUtil.contains("io.netty.allocator.type") ? ByteBufAllocator.DEFAULT : PooledByteBufAllocator.DEFAULT); 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 bc69d1485bb23..2909fb0cd2926 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 @@ -206,6 +206,10 @@ public com.azure.core.http.HttpClient build() { // Keep the pooled default while respecting allocator choices made by the application. if (!nettyHttpClient.configuration().options().containsKey(ChannelOption.ALLOCATOR) && !SystemPropertyUtil.contains("io.netty.allocator.type")) { + // If ChannelOptions and io.netty.allocator.type wasn't configured with an allocator fallback to the default + // setting from Netty 4.1 which was the pooled allocator. Otherwise, respect the configuration, be it + // ChannelOptions or io.netty.allocator.type. In the future, this should be validated for if this should use + // the new Netty 4.2 default which is an adaptive allocator. nettyHttpClient = nettyHttpClient.option(ChannelOption.ALLOCATOR, PooledByteBufAllocator.DEFAULT); } diff --git a/sdk/cosmos/azure-cosmos/src/main/java/com/azure/cosmos/implementation/http/ReactorNettyClient.java b/sdk/cosmos/azure-cosmos/src/main/java/com/azure/cosmos/implementation/http/ReactorNettyClient.java index 1753b826c2abd..674af8a174a92 100644 --- a/sdk/cosmos/azure-cosmos/src/main/java/com/azure/cosmos/implementation/http/ReactorNettyClient.java +++ b/sdk/cosmos/azure-cosmos/src/main/java/com/azure/cosmos/implementation/http/ReactorNettyClient.java @@ -54,6 +54,9 @@ private static ImplementationBridgeHelpers.Http2ConnectionConfigHelper.Http2Conn private static final boolean leakDetectionDebuggingEnabled = ResourceLeakDetector.getLevel().ordinal() >= ResourceLeakDetector.Level.ADVANCED.ordinal(); private static final String REACTOR_NETTY_REQUEST_RECORD_KEY = "reactorNettyRequestRecordKey"; + // If io.netty.allocator.type was configured, respect the configuration. Otherwise, fallback to the default setting + // from Netty 4.1 which was the pooled allocator. In the future, this should be validated for if this should use the + // new Netty 4.2 default which is an adaptive allocator. private static final ByteBufAllocator DEFAULT_ALLOCATOR = SystemPropertyUtil.contains("io.netty.allocator.type") ? ByteBufAllocator.DEFAULT : PooledByteBufAllocator.DEFAULT; diff --git a/sdk/openai/azure-ai-openai-realtime/src/main/java/com/azure/ai/openai/realtime/implementation/websocket/WebSocketSessionNettyImpl.java b/sdk/openai/azure-ai-openai-realtime/src/main/java/com/azure/ai/openai/realtime/implementation/websocket/WebSocketSessionNettyImpl.java index 8fcd01077fc0d..221c91b27d8cb 100644 --- a/sdk/openai/azure-ai-openai-realtime/src/main/java/com/azure/ai/openai/realtime/implementation/websocket/WebSocketSessionNettyImpl.java +++ b/sdk/openai/azure-ai-openai-realtime/src/main/java/com/azure/ai/openai/realtime/implementation/websocket/WebSocketSessionNettyImpl.java @@ -104,7 +104,7 @@ protected void initChannel(SocketChannel ch) { this.closeHandler = closeHandler; } - void connect() throws URISyntaxException, SSLException, InterruptedException, ExecutionException { + void connect() throws SSLException, InterruptedException, ExecutionException { String scheme = uri.getScheme() == null ? "ws" : uri.getScheme(); final String host = uri.getHost() == null ? "127.0.0.1" : uri.getHost(); final int port; diff --git a/sdk/webpubsub/azure-messaging-webpubsub-client/src/main/java/com/azure/messaging/webpubsub/client/implementation/websocket/WebSocketSessionNettyImpl.java b/sdk/webpubsub/azure-messaging-webpubsub-client/src/main/java/com/azure/messaging/webpubsub/client/implementation/websocket/WebSocketSessionNettyImpl.java index 0b449dde5516c..9f46a915ee102 100644 --- a/sdk/webpubsub/azure-messaging-webpubsub-client/src/main/java/com/azure/messaging/webpubsub/client/implementation/websocket/WebSocketSessionNettyImpl.java +++ b/sdk/webpubsub/azure-messaging-webpubsub-client/src/main/java/com/azure/messaging/webpubsub/client/implementation/websocket/WebSocketSessionNettyImpl.java @@ -139,6 +139,9 @@ void connect() throws URISyntaxException, SSLException, InterruptedException, Ex b.group(group) .channel(NioSocketChannel.class) .option(ChannelOption.ALLOCATOR, + // If io.netty.allocator.type was configured, respect the configuration. Otherwise, fallback to the + // default setting from Netty 4.1 which was the pooled allocator. In the future, this should be + // validated for if this should use the new Netty 4.2 default which is an adaptive allocator. SystemPropertyUtil.contains("io.netty.allocator.type") ? ByteBufAllocator.DEFAULT : PooledByteBufAllocator.DEFAULT) From 4b4f7c7a3dc3fe8b0064cc6b123c0fb90350d00e Mon Sep 17 00:00:00 2001 From: alzimmermsft <48699787+alzimmermsft@users.noreply.github.com> Date: Wed, 30 Sep 2026 15:08:38 -0400 Subject: [PATCH 06/21] Fix azure-core CHANGELOG --- sdk/core/azure-core/CHANGELOG.md | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/sdk/core/azure-core/CHANGELOG.md b/sdk/core/azure-core/CHANGELOG.md index a595c5e71c43c..1def8c71d7090 100644 --- a/sdk/core/azure-core/CHANGELOG.md +++ b/sdk/core/azure-core/CHANGELOG.md @@ -10,6 +10,10 @@ ### Other Changes +#### Dependency Updates + +- Upgraded Reactor from `3.7.19` to `3.8.7`. + ## 1.60.0 (2026-09-29) ### Features Added @@ -29,7 +33,6 @@ #### Dependency Updates -- Upgraded Reactor from `3.7.19` to `3.8.7`. - Upgraded Jackson from `2.18.9` to `2.18.11`. ## 1.59.1 (2026-08-27) From a314c421e0bd8cc0d1d993366dc5498a5f993148 Mon Sep 17 00:00:00 2001 From: alzimmermsft <48699787+alzimmermsft@users.noreply.github.com> Date: Thu, 1 Oct 2026 11:44:17 -0400 Subject: [PATCH 07/21] Fix Netty 4.2 migration test compatibility Add test-only JPMS reads for SDK and Cosmos Encryption tests. Align Spark Netty dependencies and Spring test transport/Reactive dependency resolution without changing production module exports. Add offline transport regression tests and update contributor documentation and release notes. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> --- docs/contributor/building.md | 20 ++++++++++ eng/versioning/external_dependencies.txt | 2 + .../azure-security-confidentialledger/pom.xml | 3 ++ sdk/core/azure-core-http-netty/CHANGELOG.md | 1 + sdk/core/azure-core-http-netty/pom.xml | 6 +++ sdk/cosmos/azure-cosmos-encryption/pom.xml | 3 ++ .../azure-cosmos-spark_3-3_2-12/CHANGELOG.md | 1 + .../azure-cosmos-spark_3-4_2-12/CHANGELOG.md | 1 + .../azure-cosmos-spark_3-5_2-12/CHANGELOG.md | 1 + .../azure-cosmos-spark_3-5_2-13/CHANGELOG.md | 2 + sdk/cosmos/azure-cosmos-spark_3/pom.xml | 20 +++++++++- .../cosmos/spark/NettyCompatibilitySpec.scala | 37 +++++++++++++++++++ .../azure-cosmos-spark_4-0_2-13/CHANGELOG.md | 2 + .../azure-cosmos-spark_4-1_2-13/CHANGELOG.md | 2 + .../azure-ai-documentintelligence/pom.xml | 1 + .../azure-ai-formrecognizer/pom.xml | 1 + .../azure-security-keyvault-secrets/pom.xml | 1 + .../pom.xml | 1 + .../azure-messaging-servicebus/pom.xml | 1 + .../CHANGELOG.md | 3 +- .../spring-cloud-azure-autoconfigure/pom.xml | 16 ++++++++ .../http/NettyCompatibilityTests.java | 37 +++++++++++++++++++ 22 files changed, 160 insertions(+), 2 deletions(-) create mode 100644 sdk/cosmos/azure-cosmos-spark_3/src/test/scala/com/azure/cosmos/spark/NettyCompatibilitySpec.scala create mode 100644 sdk/spring/spring-cloud-azure-autoconfigure/src/test/java/com/azure/spring/cloud/autoconfigure/implementation/useragent/http/NettyCompatibilityTests.java diff --git a/docs/contributor/building.md b/docs/contributor/building.md index c5e37a8574b3f..8a897d96f6681 100644 --- a/docs/contributor/building.md +++ b/docs/contributor/building.md @@ -43,6 +43,26 @@ mvn install -f sdk/appconfiguration/pom.xml -Dgpg.skip -Drevapi.skip -DskipTests Remove `-DskipTests` from any of the above commands. +### Test-only Java module dependencies + +On JDK 9 and later, tests run as part of their library's named module. When tests directly use classes +from a dependency that the production module does not read, add a narrow `--add-reads` option to the +package's `javaModulesSurefireArgLine` property. Failsafe inherits this property through +`javaModulesFailsafeArgLine`. + +For example, tests using Netty's `HttpResponseStatus` need to read the explicit `io.netty.codec.http` +module in Netty 4.2: + +```xml + + --add-reads com.azure.ai.documentintelligence=io.netty.codec.http + +``` + +Keep these test-only reads out of production `module-info.java` descriptors. Preserve any existing +options in the property, and add reads for each module directly used by the tests. These options are +only applied by the Java 9+ build profile and do not affect Java 8 test runs. + ### Build the Track 2 client libraries ```bash diff --git a/eng/versioning/external_dependencies.txt b/eng/versioning/external_dependencies.txt index 6bd7265022e72..0597ef6c20ad6 100644 --- a/eng/versioning/external_dependencies.txt +++ b/eng/versioning/external_dependencies.txt @@ -44,6 +44,7 @@ commons-net:commons-net;3.9.0 io.cloudevents:cloudevents-api;2.2.0 io.cloudevents:cloudevents-core;2.2.0 io.fabric8:kubernetes-client;6.12.1 +io.netty:netty-bom;4.2.18.Final io.netty:netty-buffer;4.2.18.Final io.netty:netty-common;4.2.18.Final io.netty:netty-codec-base;4.2.18.Final @@ -57,6 +58,7 @@ io.netty:netty-resolver-dns;4.2.18.Final io.netty:netty-resolver-dns-native-macos;4.2.18.Final io.netty:netty-tcnative-boringssl-static;2.0.84.Final io.netty:netty-transport;4.2.18.Final +io.netty:netty-transport-classes-epoll;4.2.18.Final io.netty:netty-transport-native-epoll;4.2.18.Final io.netty:netty-transport-native-unix-common;4.2.18.Final io.netty:netty-transport-native-kqueue;4.2.18.Final diff --git a/sdk/confidentialledger/azure-security-confidentialledger/pom.xml b/sdk/confidentialledger/azure-security-confidentialledger/pom.xml index 369e94f2d5128..2652df64f9d65 100644 --- a/sdk/confidentialledger/azure-security-confidentialledger/pom.xml +++ b/sdk/confidentialledger/azure-security-confidentialledger/pom.xml @@ -39,6 +39,9 @@ --add-exports com.azure.http.netty/com.azure.core.http.netty=com.azure.security.confidentialledger --add-reads com.azure.security.confidentialledger=com.azure.http.netty + --add-reads com.azure.security.confidentialledger=io.netty.handler + --add-reads com.azure.security.confidentialledger=reactor.netty.core + --add-reads com.azure.security.confidentialledger=reactor.netty.http false diff --git a/sdk/core/azure-core-http-netty/CHANGELOG.md b/sdk/core/azure-core-http-netty/CHANGELOG.md index f0a0b5288ca59..517b4d625e2ed 100644 --- a/sdk/core/azure-core-http-netty/CHANGELOG.md +++ b/sdk/core/azure-core-http-netty/CHANGELOG.md @@ -9,6 +9,7 @@ ### Bugs Fixed - Preserved asynchronous file downloads when Netty uses scoped direct buffers on newer JDKs. +- Declared the Netty transport dependency directly to prevent older transitive transports from being selected. ### Other Changes diff --git a/sdk/core/azure-core-http-netty/pom.xml b/sdk/core/azure-core-http-netty/pom.xml index e1a14048844ea..be001dd83147d 100644 --- a/sdk/core/azure-core-http-netty/pom.xml +++ b/sdk/core/azure-core-http-netty/pom.xml @@ -97,6 +97,11 @@ netty-buffer 4.2.18.Final + + io.netty + netty-transport + 4.2.18.Final + io.netty netty-codec-base @@ -227,6 +232,7 @@ io.netty:netty-tcnative-boringssl-static:[2.0.84.Final] io.projectreactor.netty:reactor-netty-http:[1.3.7] io.netty:netty-buffer:[4.2.18.Final] + io.netty:netty-transport:[4.2.18.Final] io.netty:netty-common:[4.2.18.Final] io.netty:netty-codec-base:[4.2.18.Final] io.netty:netty-codec-http:[4.2.18.Final] diff --git a/sdk/cosmos/azure-cosmos-encryption/pom.xml b/sdk/cosmos/azure-cosmos-encryption/pom.xml index 256af983877aa..cfa31912f76ae 100644 --- a/sdk/cosmos/azure-cosmos-encryption/pom.xml +++ b/sdk/cosmos/azure-cosmos-encryption/pom.xml @@ -51,6 +51,9 @@ Licensed under the MIT License. --add-opens com.azure.cosmos/com.azure.cosmos.implementation=ALL-UNNAMED --add-modules java.management --add-reads com.azure.cosmos.encryption=java.management + --add-reads com.azure.cosmos.encryption=io.netty.common + --add-reads com.azure.cosmos.encryption=io.netty.buffer + --add-reads com.azure.cosmos.encryption=io.netty.codec.http - true diff --git a/sdk/cosmos/azure-cosmos-spark_3-3_2-12/CHANGELOG.md b/sdk/cosmos/azure-cosmos-spark_3-3_2-12/CHANGELOG.md index f36026e15308d..b1500d6bc9bb3 100644 --- a/sdk/cosmos/azure-cosmos-spark_3-3_2-12/CHANGELOG.md +++ b/sdk/cosmos/azure-cosmos-spark_3-3_2-12/CHANGELOG.md @@ -10,6 +10,7 @@ #### Other Changes +* Aligned the connector's Netty dependencies with Netty `4.2.18.Final` and `azure-core-http-netty` `1.17.0-beta.1`. * Upgraded Jackson from `2.18.9` to `2.18.11`. ### 4.50.0 (2026-09-22) diff --git a/sdk/cosmos/azure-cosmos-spark_3-4_2-12/CHANGELOG.md b/sdk/cosmos/azure-cosmos-spark_3-4_2-12/CHANGELOG.md index 9df05af420081..93c8022cebcd4 100644 --- a/sdk/cosmos/azure-cosmos-spark_3-4_2-12/CHANGELOG.md +++ b/sdk/cosmos/azure-cosmos-spark_3-4_2-12/CHANGELOG.md @@ -10,6 +10,7 @@ #### Other Changes +* Aligned the connector's Netty dependencies with Netty `4.2.18.Final` and `azure-core-http-netty` `1.17.0-beta.1`. * Upgraded Jackson from `2.18.9` to `2.18.11`. ### 4.50.0 (2026-09-22) diff --git a/sdk/cosmos/azure-cosmos-spark_3-5_2-12/CHANGELOG.md b/sdk/cosmos/azure-cosmos-spark_3-5_2-12/CHANGELOG.md index fc0713803f60d..6bf26d4283df2 100644 --- a/sdk/cosmos/azure-cosmos-spark_3-5_2-12/CHANGELOG.md +++ b/sdk/cosmos/azure-cosmos-spark_3-5_2-12/CHANGELOG.md @@ -10,6 +10,7 @@ #### Other Changes +* Aligned the connector's Netty dependencies with Netty `4.2.18.Final` and `azure-core-http-netty` `1.17.0-beta.1`. * Upgraded Jackson from `2.18.9` to `2.18.11`. ### 4.50.0 (2026-09-22) diff --git a/sdk/cosmos/azure-cosmos-spark_3-5_2-13/CHANGELOG.md b/sdk/cosmos/azure-cosmos-spark_3-5_2-13/CHANGELOG.md index 54c8236075adf..3b043b4aa9e88 100644 --- a/sdk/cosmos/azure-cosmos-spark_3-5_2-13/CHANGELOG.md +++ b/sdk/cosmos/azure-cosmos-spark_3-5_2-13/CHANGELOG.md @@ -10,6 +10,8 @@ #### Other Changes +* Aligned the connector's Netty dependencies with Netty `4.2.18.Final` and `azure-core-http-netty` `1.17.0-beta.1`. + ### 4.50.0 (2026-09-22) #### Other Changes diff --git a/sdk/cosmos/azure-cosmos-spark_3/pom.xml b/sdk/cosmos/azure-cosmos-spark_3/pom.xml index 2f76adee24fad..f6f0cb058199b 100644 --- a/sdk/cosmos/azure-cosmos-spark_3/pom.xml +++ b/sdk/cosmos/azure-cosmos-spark_3/pom.xml @@ -62,6 +62,18 @@ + + + + io.netty + netty-bom + 4.2.18.Final + pom + import + + + + org.scala-lang @@ -89,6 +101,11 @@ scala-java8-compat_${scala.binary.version} ${scala-java8-compat.version} + + io.netty + netty-transport-classes-epoll + 4.2.18.Final + io.projectreactor reactor-scala-extensions_${scala.binary.version} @@ -128,7 +145,7 @@ com.azure azure-core-http-netty - 1.16.8 + 1.17.0-beta.1 com.azure @@ -317,6 +334,7 @@ org.apache.commons:commons-lang3:[3.18.0] + io.netty:netty-transport-classes-epoll:[4.2.18.Final] org.slf4j:slf4j-api:[1.7.36] org.apache.spark:spark-sql_2.12:[${spark33.version}] org.apache.spark:spark-sql_2.12:[${spark34.version}] diff --git a/sdk/cosmos/azure-cosmos-spark_3/src/test/scala/com/azure/cosmos/spark/NettyCompatibilitySpec.scala b/sdk/cosmos/azure-cosmos-spark_3/src/test/scala/com/azure/cosmos/spark/NettyCompatibilitySpec.scala new file mode 100644 index 0000000000000..0857b4c3c4027 --- /dev/null +++ b/sdk/cosmos/azure-cosmos-spark_3/src/test/scala/com/azure/cosmos/spark/NettyCompatibilitySpec.scala @@ -0,0 +1,37 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. + +package com.azure.cosmos.spark + +import com.azure.cosmos.implementation.directconnectivity.rntbd.RntbdLoopNIO +import io.netty.channel.MultiThreadIoEventLoopGroup +import io.netty.util.Version +import io.netty.util.concurrent.DefaultThreadFactory + +import java.util.concurrent.{Callable, TimeUnit} +import scala.collection.JavaConverters._ + +class NettyCompatibilitySpec extends UnitSpec { + private val timeoutInSeconds = 10 + + it should "resolve a consistent Netty 4.2 dependency stack" in { + val versions = Version.identify().values().asScala + .filterNot(_.artifactId().startsWith("netty-tcnative")) + .map(_.artifactVersion()).toSeq + versions should not be empty + all(versions) should startWith("4.2.") + } + + it should "create NIO event loops for the Cosmos transport" in { + val threadName = "cosmos-spark-netty-test" + val eventLoops = new RntbdLoopNIO().newEventLoopGroup(1, new DefaultThreadFactory(threadName)) + try { + eventLoops shouldBe a[MultiThreadIoEventLoopGroup] + eventLoops.next().submit(new Callable[String] { + override def call(): String = Thread.currentThread().getName + }).get(timeoutInSeconds, TimeUnit.SECONDS) should startWith(threadName) + } finally { + eventLoops.shutdownGracefully(0, timeoutInSeconds, TimeUnit.SECONDS).sync() + } + } +} diff --git a/sdk/cosmos/azure-cosmos-spark_4-0_2-13/CHANGELOG.md b/sdk/cosmos/azure-cosmos-spark_4-0_2-13/CHANGELOG.md index b45322d3e259a..dc485da2db0f3 100644 --- a/sdk/cosmos/azure-cosmos-spark_4-0_2-13/CHANGELOG.md +++ b/sdk/cosmos/azure-cosmos-spark_4-0_2-13/CHANGELOG.md @@ -10,6 +10,8 @@ #### Other Changes +* Aligned the connector's Netty dependencies with Netty `4.2.18.Final` and `azure-core-http-netty` `1.17.0-beta.1`. + ### 4.50.0 (2026-09-22) #### Other Changes diff --git a/sdk/cosmos/azure-cosmos-spark_4-1_2-13/CHANGELOG.md b/sdk/cosmos/azure-cosmos-spark_4-1_2-13/CHANGELOG.md index f1af737ff7eb5..a4763adb09ff9 100644 --- a/sdk/cosmos/azure-cosmos-spark_4-1_2-13/CHANGELOG.md +++ b/sdk/cosmos/azure-cosmos-spark_4-1_2-13/CHANGELOG.md @@ -10,6 +10,8 @@ #### Other Changes +* Aligned the connector's Netty dependencies with Netty `4.2.18.Final` and `azure-core-http-netty` `1.17.0-beta.1`. + ### 4.50.0 (2026-09-22) #### Other Changes diff --git a/sdk/documentintelligence/azure-ai-documentintelligence/pom.xml b/sdk/documentintelligence/azure-ai-documentintelligence/pom.xml index 4f4bd7ffcf129..7507d1ab4d8c0 100644 --- a/sdk/documentintelligence/azure-ai-documentintelligence/pom.xml +++ b/sdk/documentintelligence/azure-ai-documentintelligence/pom.xml @@ -38,6 +38,7 @@ --add-opens com.azure.core/com.azure.core.implementation.util=ALL-UNNAMED --add-opens com.azure.ai.documentintelligence/com.azure.ai.documentintelligence=ALL-UNNAMED + --add-reads com.azure.ai.documentintelligence=io.netty.codec.http false diff --git a/sdk/formrecognizer/azure-ai-formrecognizer/pom.xml b/sdk/formrecognizer/azure-ai-formrecognizer/pom.xml index 8eb5877cb7a3b..5539b0ef90cce 100644 --- a/sdk/formrecognizer/azure-ai-formrecognizer/pom.xml +++ b/sdk/formrecognizer/azure-ai-formrecognizer/pom.xml @@ -39,6 +39,7 @@ --add-opens com.azure.ai.formrecognizer/com.azure.ai.formrecognizer=ALL-UNNAMED --add-opens com.azure.ai.formrecognizer/com.azure.ai.formrecognizer.documentanalysis=ALL-UNNAMED --add-opens com.azure.ai.formrecognizer/com.azure.ai.formrecognizer.documentanalysis.administration=ALL-UNNAMED + --add-reads com.azure.ai.formrecognizer=io.netty.codec.http false diff --git a/sdk/keyvault/azure-security-keyvault-secrets/pom.xml b/sdk/keyvault/azure-security-keyvault-secrets/pom.xml index 26c0870cc677c..52592990089ad 100644 --- a/sdk/keyvault/azure-security-keyvault-secrets/pom.xml +++ b/sdk/keyvault/azure-security-keyvault-secrets/pom.xml @@ -39,6 +39,7 @@ --add-opens com.azure.security.keyvault.secrets/com.azure.security.keyvault.secrets=ALL-UNNAMED --add-opens com.azure.security.keyvault.secrets/com.azure.security.keyvault.secrets.implementation=ALL-UNNAMED --add-opens com.azure.security.keyvault.secrets/com.azure.security.keyvault.secrets.models=ALL-UNNAMED + --add-reads com.azure.security.keyvault.secrets=io.netty.codec.http false diff --git a/sdk/monitor/azure-monitor-opentelemetry-autoconfigure/pom.xml b/sdk/monitor/azure-monitor-opentelemetry-autoconfigure/pom.xml index c631a24877059..083bd1442a576 100644 --- a/sdk/monitor/azure-monitor-opentelemetry-autoconfigure/pom.xml +++ b/sdk/monitor/azure-monitor-opentelemetry-autoconfigure/pom.xml @@ -38,6 +38,7 @@ --add-opens com.azure.monitor.opentelemetry.autoconfigure/com.azure.monitor.opentelemetry.autoconfigure=ALL-UNNAMED --add-exports com.azure.core/com.azure.core.implementation.util=ALL-UNNAMED --add-reads com.azure.monitor.opentelemetry.autoconfigure=com.azure.core.tracing.opentelemetry + --add-reads com.azure.monitor.opentelemetry.autoconfigure=io.netty.transport false diff --git a/sdk/servicebus/azure-messaging-servicebus/pom.xml b/sdk/servicebus/azure-messaging-servicebus/pom.xml index f93911b495456..3eec8df25594f 100644 --- a/sdk/servicebus/azure-messaging-servicebus/pom.xml +++ b/sdk/servicebus/azure-messaging-servicebus/pom.xml @@ -45,6 +45,7 @@ --add-exports com.azure.core/com.azure.core.implementation.util=ALL-UNNAMED --add-opens com.azure.core/com.azure.core.implementation.util=ALL-UNNAMED --add-reads com.azure.messaging.servicebus=com.azure.http.netty + --add-reads com.azure.messaging.servicebus=io.netty.codec.http --add-reads com.azure.messaging.servicebus=com.azure.core.experimental --add-reads com.azure.messaging.servicebus=com.azure.core.tracing.opentelemetry diff --git a/sdk/spring/spring-cloud-azure-autoconfigure/CHANGELOG.md b/sdk/spring/spring-cloud-azure-autoconfigure/CHANGELOG.md index 5114a28e73ae7..8c3881a6746dc 100644 --- a/sdk/spring/spring-cloud-azure-autoconfigure/CHANGELOG.md +++ b/sdk/spring/spring-cloud-azure-autoconfigure/CHANGELOG.md @@ -10,6 +10,8 @@ ### Other Changes +- Aligned Reactor version resolution and test HTTP transport dependencies with Netty 4.2, and added offline transport compatibility tests. + ## 7.4.0 (2026-07-24) Please refer to [spring/CHANGELOG.md](https://github.com/Azure/azure-sdk-for-java/tree/main/sdk/spring/CHANGELOG.md#740-2026-07-24) for more details. @@ -253,4 +255,3 @@ Please refer to [spring/CHANGELOG.md](https://github.com/Azure/azure-sdk-for-jav ## 4.0.0-beta.2 (2021-11-22) Please refer to [spring/CHANGELOG.md](https://github.com/Azure/azure-sdk-for-java/tree/main/sdk/spring/CHANGELOG.md#400-beta2-2021-11-22) for more details. - diff --git a/sdk/spring/spring-cloud-azure-autoconfigure/pom.xml b/sdk/spring/spring-cloud-azure-autoconfigure/pom.xml index f0e074af78be4..f1c9c63d13135 100644 --- a/sdk/spring/spring-cloud-azure-autoconfigure/pom.xml +++ b/sdk/spring/spring-cloud-azure-autoconfigure/pom.xml @@ -37,6 +37,15 @@ true + + + + io.projectreactor + reactor-core + 3.8.7 + + + com.azure.spring @@ -417,6 +426,13 @@ + + + com.azure + azure-core-http-netty + 1.17.0-beta.1 + test + org.springframework.boot spring-boot-starter-test diff --git a/sdk/spring/spring-cloud-azure-autoconfigure/src/test/java/com/azure/spring/cloud/autoconfigure/implementation/useragent/http/NettyCompatibilityTests.java b/sdk/spring/spring-cloud-azure-autoconfigure/src/test/java/com/azure/spring/cloud/autoconfigure/implementation/useragent/http/NettyCompatibilityTests.java new file mode 100644 index 0000000000000..16c10ff7dac21 --- /dev/null +++ b/sdk/spring/spring-cloud-azure-autoconfigure/src/test/java/com/azure/spring/cloud/autoconfigure/implementation/useragent/http/NettyCompatibilityTests.java @@ -0,0 +1,37 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. + +package com.azure.spring.cloud.autoconfigure.implementation.useragent.http; + +import org.junit.jupiter.api.Test; +import org.junit.jupiter.params.ParameterizedTest; +import org.junit.jupiter.params.provider.ValueSource; +import reactor.netty.resources.LoopResources; + +import java.time.Duration; +import java.util.concurrent.TimeUnit; + +import static org.assertj.core.api.Assertions.assertThat; + +class NettyCompatibilityTests { + + @ParameterizedTest + @ValueSource( + strings = { + "io.netty.channel.MultiThreadIoEventLoopGroup", + "io.netty.channel.epoll.EpollIoHandler", + "io.netty.channel.kqueue.KQueueIoHandler" }) + void transportClassesAreAvailable(String className) throws ClassNotFoundException { + assertThat(Class.forName(className, false, getClass().getClassLoader())).isNotNull(); + } + + @Test + void nioEventLoopsAreUsable() throws Exception { + LoopResources loops = LoopResources.create("azure-spring-netty-test", 1, true); + try { + assertThat(loops.onClient(false).submit(() -> true).get(10, TimeUnit.SECONDS)).isTrue(); + } finally { + loops.disposeLater().block(Duration.ofSeconds(10)); + } + } +} From 3cc9f7fb97b0705dfe4a1d27215762da0143f943 Mon Sep 17 00:00:00 2001 From: alzimmermsft <48699787+alzimmermsft@users.noreply.github.com> Date: Thu, 1 Oct 2026 12:26:50 -0400 Subject: [PATCH 08/21] More work on fixing dependencies --- eng/versioning/external_dependencies.txt | 1 - .../azure-cosmos-spark_3-1_2-12/README.md | 18 ------------------ .../migration-guide.md | 18 ------------------ .../azure-cosmos-spark_3-2_2-12/README.md | 18 ------------------ .../migration-guide.md | 16 ---------------- .../azure-cosmos-spark_3-3_2-12/CHANGELOG.md | 1 - .../azure-cosmos-spark_3-4_2-12/CHANGELOG.md | 1 - .../azure-cosmos-spark_3-5_2-12/CHANGELOG.md | 1 - .../azure-cosmos-spark_3-5_2-13/CHANGELOG.md | 2 -- sdk/cosmos/azure-cosmos-spark_3/pom.xml | 12 ------------ .../azure-cosmos-spark_4-0_2-13/CHANGELOG.md | 2 -- .../azure-cosmos-spark_4-1_2-13/CHANGELOG.md | 2 -- .../azure-ai-documentintelligence/pom.xml | 1 - ...mentModelAdministrationAsyncClientTest.java | 3 +-- .../DocumentModelAdministrationClientTest.java | 7 +++---- .../azure-ai-formrecognizer/pom.xml | 1 - .../FormTrainingAsyncClientTest.java | 5 ++--- .../formrecognizer/FormTrainingClientTest.java | 5 ++--- ...mentModelAdministrationAsyncClientTest.java | 5 ++--- .../azure-security-keyvault-secrets/pom.xml | 1 - .../keyvault/secrets/SecretClientTest.java | 6 ++---- .../azure-messaging-servicebus/pom.xml | 1 - .../ServiceBusAdministrationClientTest.java | 7 +++---- .../spring-cloud-azure-autoconfigure/pom.xml | 17 +++++++---------- 24 files changed, 22 insertions(+), 129 deletions(-) delete mode 100644 sdk/cosmos/azure-cosmos-spark_3-1_2-12/README.md delete mode 100644 sdk/cosmos/azure-cosmos-spark_3-1_2-12/migration-guide.md delete mode 100644 sdk/cosmos/azure-cosmos-spark_3-2_2-12/README.md delete mode 100644 sdk/cosmos/azure-cosmos-spark_3-2_2-12/migration-guide.md diff --git a/eng/versioning/external_dependencies.txt b/eng/versioning/external_dependencies.txt index 0597ef6c20ad6..8025d0a8cb068 100644 --- a/eng/versioning/external_dependencies.txt +++ b/eng/versioning/external_dependencies.txt @@ -44,7 +44,6 @@ commons-net:commons-net;3.9.0 io.cloudevents:cloudevents-api;2.2.0 io.cloudevents:cloudevents-core;2.2.0 io.fabric8:kubernetes-client;6.12.1 -io.netty:netty-bom;4.2.18.Final io.netty:netty-buffer;4.2.18.Final io.netty:netty-common;4.2.18.Final io.netty:netty-codec-base;4.2.18.Final diff --git a/sdk/cosmos/azure-cosmos-spark_3-1_2-12/README.md b/sdk/cosmos/azure-cosmos-spark_3-1_2-12/README.md deleted file mode 100644 index 37143b77ae26d..0000000000000 --- a/sdk/cosmos/azure-cosmos-spark_3-1_2-12/README.md +++ /dev/null @@ -1,18 +0,0 @@ -# Azure Cosmos DB OLTP Spark 3 connector - -## Azure Cosmos DB OLTP Spark 3 connector for Spark 3.1 -**Azure Databricks**, **Azure Synapse** and **Azure HDInsights** don't provide any supported runtime for Spark 3.1 anymore. So, we have stopped releasing new versions for the **Azure Cosmos DB OLTP Spark connector** targeting Spark 3.1 - please move to Spark 3.5 instead. - -The last published **Azure Cosmos DB OLTP Spark connector** for Spark 3.1 is version **4.37.1** - -### Download - -You can use the maven coordinate of the jar to auto install the Spark Connector to your Databricks Runtime 14 from Maven: -`com.azure.cosmos.spark:azure-cosmos-spark_3-5_2-12:4.37.1` - -You can also integrate against Cosmos DB Spark Connector in your SBT project: -```scala -libraryDependencies += "com.azure.cosmos.spark" % "azure-cosmos-spark_3-5_2-12" % "4.37.1" -``` - -Cosmos DB Spark Connector is available on [Maven Central Repo](https://central.sonatype.com/search?namespace=com.azure.cosmos.spark). diff --git a/sdk/cosmos/azure-cosmos-spark_3-1_2-12/migration-guide.md b/sdk/cosmos/azure-cosmos-spark_3-1_2-12/migration-guide.md deleted file mode 100644 index e4464de2d8143..0000000000000 --- a/sdk/cosmos/azure-cosmos-spark_3-1_2-12/migration-guide.md +++ /dev/null @@ -1,18 +0,0 @@ -# Azure Cosmos DB OLTP Spark 3 connector - -## Azure Cosmos DB OLTP Spark 3.1 connector - Migration to Spark 3.5 -There are no application-level changes required to migrate from Spark 3.1 or 3.2 to Spark 3.5 from the perspective of the Azure Cosmos DB Spark connector. Information on how to install the latest Connector version for the target Spark runtime can be found in the [Quick Start Guide](https://github.com/Azure/azure-sdk-for-java/blob/main/sdk/cosmos/azure-cosmos-spark_3/docs/quick-start.md) - -## Spark runtime -**Azure Databricks**, **Azure Synapse** and **Azure HDInsights** don't provide any supported runtime for Spark 3.1 anymore. To migrate to a supported Spark runtime, please follow the guidance below. - -### Azure Databricks -- [Migration guide](https://learn.microsoft.com/azure/databricks/release-notes/runtime/#apache-spark-migration-guidance) - -### Azure Synapse -- [Migration Guide](https://learn.microsoft.com/azure/synapse-analytics/spark/apache-spark-version-support#migration-between-apache-spark-versions---support) - -### Azure HDInsight -- [Migration Guide](https://learn.microsoft.com/azure/hdinsight/hdinsight-upgrade-cluster) - - diff --git a/sdk/cosmos/azure-cosmos-spark_3-2_2-12/README.md b/sdk/cosmos/azure-cosmos-spark_3-2_2-12/README.md deleted file mode 100644 index 5100e43d12e9f..0000000000000 --- a/sdk/cosmos/azure-cosmos-spark_3-2_2-12/README.md +++ /dev/null @@ -1,18 +0,0 @@ -# Azure Cosmos DB OLTP Spark 3 connector - -## Azure Cosmos DB OLTP Spark 3 connector for Spark 3.2 -**Azure Databricks**, **Azure Synapse** and **Azure HDInsights** don't provide any supported runtime for Spark 3.2 anymore. So, we have stopped releasing new versions for the **Azure Cosmos DB OLTP Spark connector** targeting Spark 3.2 - please move to Spark 3.5 instead. - -The last published **Azure Cosmos DB OLTP Spark connector** for Spark 3.2 is version **4.37.1** - -### Download - -You can use the maven coordinate of the jar to auto install the Spark Connector to your Databricks Runtime 10 from Maven: -`com.azure.cosmos.spark:azure-cosmos-spark_3-2_2-12:4.37.1` - -You can also integrate against Cosmos DB Spark Connector in your SBT project: -```scala -libraryDependencies += "com.azure.cosmos.spark" % "azure-cosmos-spark_3-2_2-12" % "4.37.1" -``` - -Cosmos DB Spark Connector is available on [Maven Central Repo](https://central.sonatype.com/search?namespace=com.azure.cosmos.spark). \ No newline at end of file diff --git a/sdk/cosmos/azure-cosmos-spark_3-2_2-12/migration-guide.md b/sdk/cosmos/azure-cosmos-spark_3-2_2-12/migration-guide.md deleted file mode 100644 index 788e6583537eb..0000000000000 --- a/sdk/cosmos/azure-cosmos-spark_3-2_2-12/migration-guide.md +++ /dev/null @@ -1,16 +0,0 @@ -# Azure Cosmos DB OLTP Spark 3 connector - -## Azure Cosmos DB OLTP Spark 3.2 connector - Migration to Spark 3.5 -There are no application-level changes required to migrate from Spark 3.1 or 3.2 to Spark 3.5 from the perspective of the Azure Cosmos DB Spark connector. Information on how to install the latest Connector version for the target Spark runtime can be found in the [Quick Start Guide](https://github.com/Azure/azure-sdk-for-java/blob/main/sdk/cosmos/azure-cosmos-spark_3/docs/quick-start.md) - -## Spark runtime -**Azure Databricks**, **Azure Synapse** and **Azure HDInsights** don't provide any supported runtime for Spark 3.1 anymore. To migrate to a supported Spark runtime, please follow the guidance below. - -### Azure Databricks -- [Migration guide](https://learn.microsoft.com/azure/databricks/release-notes/runtime/#apache-spark-migration-guidance) - -### Azure Synapse -- [Migration Guide](https://learn.microsoft.com/azure/synapse-analytics/spark/apache-spark-version-support#migration-between-apache-spark-versions---support) - -### Azure HDInsight -- [Migration Guide](https://learn.microsoft.com/azure/hdinsight/hdinsight-upgrade-cluster) \ No newline at end of file diff --git a/sdk/cosmos/azure-cosmos-spark_3-3_2-12/CHANGELOG.md b/sdk/cosmos/azure-cosmos-spark_3-3_2-12/CHANGELOG.md index b1500d6bc9bb3..f36026e15308d 100644 --- a/sdk/cosmos/azure-cosmos-spark_3-3_2-12/CHANGELOG.md +++ b/sdk/cosmos/azure-cosmos-spark_3-3_2-12/CHANGELOG.md @@ -10,7 +10,6 @@ #### Other Changes -* Aligned the connector's Netty dependencies with Netty `4.2.18.Final` and `azure-core-http-netty` `1.17.0-beta.1`. * Upgraded Jackson from `2.18.9` to `2.18.11`. ### 4.50.0 (2026-09-22) diff --git a/sdk/cosmos/azure-cosmos-spark_3-4_2-12/CHANGELOG.md b/sdk/cosmos/azure-cosmos-spark_3-4_2-12/CHANGELOG.md index 93c8022cebcd4..9df05af420081 100644 --- a/sdk/cosmos/azure-cosmos-spark_3-4_2-12/CHANGELOG.md +++ b/sdk/cosmos/azure-cosmos-spark_3-4_2-12/CHANGELOG.md @@ -10,7 +10,6 @@ #### Other Changes -* Aligned the connector's Netty dependencies with Netty `4.2.18.Final` and `azure-core-http-netty` `1.17.0-beta.1`. * Upgraded Jackson from `2.18.9` to `2.18.11`. ### 4.50.0 (2026-09-22) diff --git a/sdk/cosmos/azure-cosmos-spark_3-5_2-12/CHANGELOG.md b/sdk/cosmos/azure-cosmos-spark_3-5_2-12/CHANGELOG.md index 6bf26d4283df2..fc0713803f60d 100644 --- a/sdk/cosmos/azure-cosmos-spark_3-5_2-12/CHANGELOG.md +++ b/sdk/cosmos/azure-cosmos-spark_3-5_2-12/CHANGELOG.md @@ -10,7 +10,6 @@ #### Other Changes -* Aligned the connector's Netty dependencies with Netty `4.2.18.Final` and `azure-core-http-netty` `1.17.0-beta.1`. * Upgraded Jackson from `2.18.9` to `2.18.11`. ### 4.50.0 (2026-09-22) diff --git a/sdk/cosmos/azure-cosmos-spark_3-5_2-13/CHANGELOG.md b/sdk/cosmos/azure-cosmos-spark_3-5_2-13/CHANGELOG.md index 3b043b4aa9e88..54c8236075adf 100644 --- a/sdk/cosmos/azure-cosmos-spark_3-5_2-13/CHANGELOG.md +++ b/sdk/cosmos/azure-cosmos-spark_3-5_2-13/CHANGELOG.md @@ -10,8 +10,6 @@ #### Other Changes -* Aligned the connector's Netty dependencies with Netty `4.2.18.Final` and `azure-core-http-netty` `1.17.0-beta.1`. - ### 4.50.0 (2026-09-22) #### Other Changes diff --git a/sdk/cosmos/azure-cosmos-spark_3/pom.xml b/sdk/cosmos/azure-cosmos-spark_3/pom.xml index f6f0cb058199b..1d3d89f2a271b 100644 --- a/sdk/cosmos/azure-cosmos-spark_3/pom.xml +++ b/sdk/cosmos/azure-cosmos-spark_3/pom.xml @@ -62,18 +62,6 @@ - - - - io.netty - netty-bom - 4.2.18.Final - pom - import - - - - org.scala-lang diff --git a/sdk/cosmos/azure-cosmos-spark_4-0_2-13/CHANGELOG.md b/sdk/cosmos/azure-cosmos-spark_4-0_2-13/CHANGELOG.md index dc485da2db0f3..b45322d3e259a 100644 --- a/sdk/cosmos/azure-cosmos-spark_4-0_2-13/CHANGELOG.md +++ b/sdk/cosmos/azure-cosmos-spark_4-0_2-13/CHANGELOG.md @@ -10,8 +10,6 @@ #### Other Changes -* Aligned the connector's Netty dependencies with Netty `4.2.18.Final` and `azure-core-http-netty` `1.17.0-beta.1`. - ### 4.50.0 (2026-09-22) #### Other Changes diff --git a/sdk/cosmos/azure-cosmos-spark_4-1_2-13/CHANGELOG.md b/sdk/cosmos/azure-cosmos-spark_4-1_2-13/CHANGELOG.md index a4763adb09ff9..f1af737ff7eb5 100644 --- a/sdk/cosmos/azure-cosmos-spark_4-1_2-13/CHANGELOG.md +++ b/sdk/cosmos/azure-cosmos-spark_4-1_2-13/CHANGELOG.md @@ -10,8 +10,6 @@ #### Other Changes -* Aligned the connector's Netty dependencies with Netty `4.2.18.Final` and `azure-core-http-netty` `1.17.0-beta.1`. - ### 4.50.0 (2026-09-22) #### Other Changes diff --git a/sdk/documentintelligence/azure-ai-documentintelligence/pom.xml b/sdk/documentintelligence/azure-ai-documentintelligence/pom.xml index 7507d1ab4d8c0..4f4bd7ffcf129 100644 --- a/sdk/documentintelligence/azure-ai-documentintelligence/pom.xml +++ b/sdk/documentintelligence/azure-ai-documentintelligence/pom.xml @@ -38,7 +38,6 @@ --add-opens com.azure.core/com.azure.core.implementation.util=ALL-UNNAMED --add-opens com.azure.ai.documentintelligence/com.azure.ai.documentintelligence=ALL-UNNAMED - --add-reads com.azure.ai.documentintelligence=io.netty.codec.http false diff --git a/sdk/documentintelligence/azure-ai-documentintelligence/src/test/java/com/azure/ai/documentintelligence/DocumentModelAdministrationAsyncClientTest.java b/sdk/documentintelligence/azure-ai-documentintelligence/src/test/java/com/azure/ai/documentintelligence/DocumentModelAdministrationAsyncClientTest.java index 20ad773830406..c8ab94462887c 100644 --- a/sdk/documentintelligence/azure-ai-documentintelligence/src/test/java/com/azure/ai/documentintelligence/DocumentModelAdministrationAsyncClientTest.java +++ b/sdk/documentintelligence/azure-ai-documentintelligence/src/test/java/com/azure/ai/documentintelligence/DocumentModelAdministrationAsyncClientTest.java @@ -29,7 +29,6 @@ import com.azure.core.util.polling.LongRunningOperationStatus; import com.azure.core.util.polling.PollerFlux; import com.azure.core.util.polling.SyncPoller; -import io.netty.handler.codec.http.HttpResponseStatus; import org.junit.jupiter.api.Assertions; import org.junit.jupiter.params.ParameterizedTest; import org.junit.jupiter.params.provider.MethodSource; @@ -105,7 +104,7 @@ public void deleteModelValidModelIdWithResponse(HttpClient httpClient, syncPoller1.waitForCompletion(); StepVerifier.create(client.deleteModelWithResponse(modelId, null)) - .assertNext(response -> assertEquals(response.getStatusCode(), HttpResponseStatus.NO_CONTENT.code())) + .assertNext(response -> assertEquals(204, response.getStatusCode())) .expectComplete() .verify(DEFAULT_TIMEOUT); } diff --git a/sdk/documentintelligence/azure-ai-documentintelligence/src/test/java/com/azure/ai/documentintelligence/DocumentModelAdministrationClientTest.java b/sdk/documentintelligence/azure-ai-documentintelligence/src/test/java/com/azure/ai/documentintelligence/DocumentModelAdministrationClientTest.java index 28cd4ccdffcaf..a5b1465dcb9e0 100644 --- a/sdk/documentintelligence/azure-ai-documentintelligence/src/test/java/com/azure/ai/documentintelligence/DocumentModelAdministrationClientTest.java +++ b/sdk/documentintelligence/azure-ai-documentintelligence/src/test/java/com/azure/ai/documentintelligence/DocumentModelAdministrationClientTest.java @@ -25,7 +25,6 @@ import com.azure.core.util.BinaryData; import com.azure.core.util.Context; import com.azure.core.util.polling.SyncPoller; -import io.netty.handler.codec.http.HttpResponseStatus; import org.junit.jupiter.api.AfterEach; import org.junit.jupiter.api.Assertions; import org.junit.jupiter.params.ParameterizedTest; @@ -77,7 +76,7 @@ public void getModelWithResponse(HttpClient httpClient, DocumentIntelligenceServ Response documentModelResponse = client.getModelWithResponse(documentModelDetails.getModelId(), null); - assertEquals(documentModelResponse.getStatusCode(), HttpResponseStatus.OK.code()); + assertEquals(200, documentModelResponse.getStatusCode()); } /** @@ -99,7 +98,7 @@ public void validGetResourceDetailsWithResponse(HttpClient httpClient, DocumentIntelligenceServiceVersion serviceVersion) { client = getModelAdministrationClient(httpClient, serviceVersion); Response resourceDetailsResponse = client.getResourceDetailsWithResponse(null); - assertEquals(resourceDetailsResponse.getStatusCode(), HttpResponseStatus.OK.code()); + assertEquals(200, resourceDetailsResponse.getStatusCode()); } @ParameterizedTest(name = DISPLAY_NAME_WITH_ARGUMENTS) @@ -119,7 +118,7 @@ public void deleteModelValidModelIDWithResponse(HttpClient httpClient, final Response deleteModelWithResponse = client.deleteModelWithResponse(createdModel.getModelId(), null); - assertEquals(deleteModelWithResponse.getStatusCode(), HttpResponseStatus.NO_CONTENT.code()); + assertEquals(204, deleteModelWithResponse.getStatusCode()); } /** diff --git a/sdk/formrecognizer/azure-ai-formrecognizer/pom.xml b/sdk/formrecognizer/azure-ai-formrecognizer/pom.xml index 5539b0ef90cce..8eb5877cb7a3b 100644 --- a/sdk/formrecognizer/azure-ai-formrecognizer/pom.xml +++ b/sdk/formrecognizer/azure-ai-formrecognizer/pom.xml @@ -39,7 +39,6 @@ --add-opens com.azure.ai.formrecognizer/com.azure.ai.formrecognizer=ALL-UNNAMED --add-opens com.azure.ai.formrecognizer/com.azure.ai.formrecognizer.documentanalysis=ALL-UNNAMED --add-opens com.azure.ai.formrecognizer/com.azure.ai.formrecognizer.documentanalysis.administration=ALL-UNNAMED - --add-reads com.azure.ai.formrecognizer=io.netty.codec.http false diff --git a/sdk/formrecognizer/azure-ai-formrecognizer/src/test/java/com/azure/ai/formrecognizer/FormTrainingAsyncClientTest.java b/sdk/formrecognizer/azure-ai-formrecognizer/src/test/java/com/azure/ai/formrecognizer/FormTrainingAsyncClientTest.java index d7ff043a5d1f0..47f66c61b78f0 100644 --- a/sdk/formrecognizer/azure-ai-formrecognizer/src/test/java/com/azure/ai/formrecognizer/FormTrainingAsyncClientTest.java +++ b/sdk/formrecognizer/azure-ai-formrecognizer/src/test/java/com/azure/ai/formrecognizer/FormTrainingAsyncClientTest.java @@ -34,7 +34,6 @@ import static com.azure.ai.formrecognizer.FormRecognizerClientTestBase.MODEL_ID_NOT_FOUND_ERROR_CODE; import static com.azure.ai.formrecognizer.TestUtils.DISPLAY_NAME_WITH_ARGUMENTS; import static com.azure.ai.formrecognizer.implementation.Utility.toFluxByteBuffer; -import static io.netty.handler.codec.http.HttpResponseStatus.BAD_REQUEST; import static org.junit.jupiter.api.Assertions.assertEquals; import static org.junit.jupiter.api.Assertions.assertNotNull; import static org.junit.jupiter.api.Assertions.assertThrows; @@ -670,7 +669,7 @@ public void beginCreateComposedUnlabeledModel(HttpClient httpClient, FormRecogni StepVerifier.create(client.beginCreateComposedModel(modelIdList, new CreateComposedModelOptions()) .setPollInterval(durationTestMode)).thenAwait().expectErrorSatisfies(throwable -> { assertEquals(HttpResponseException.class, throwable.getClass()); - assertEquals(BAD_REQUEST.code(), ((HttpResponseException) throwable).getResponse().getStatusCode()); + assertEquals(400, ((HttpResponseException) throwable).getResponse().getStatusCode()); }).verify(DEFAULT_TIMEOUT); client.deleteModel(model1.getModelId()).block(); @@ -700,7 +699,7 @@ public void beginCreateComposedDuplicateModels(HttpClient httpClient, FormRecogn .setPollInterval(durationTestMode) .getSyncPoller() .waitForCompletion()); - assertEquals(BAD_REQUEST.code(), httpResponseException.getResponse().getStatusCode()); + assertEquals(400, httpResponseException.getResponse().getStatusCode()); client.deleteModel(model1.getModelId()).block(); }); diff --git a/sdk/formrecognizer/azure-ai-formrecognizer/src/test/java/com/azure/ai/formrecognizer/FormTrainingClientTest.java b/sdk/formrecognizer/azure-ai-formrecognizer/src/test/java/com/azure/ai/formrecognizer/FormTrainingClientTest.java index 7be659ce61242..854c0cc850ae9 100644 --- a/sdk/formrecognizer/azure-ai-formrecognizer/src/test/java/com/azure/ai/formrecognizer/FormTrainingClientTest.java +++ b/sdk/formrecognizer/azure-ai-formrecognizer/src/test/java/com/azure/ai/formrecognizer/FormTrainingClientTest.java @@ -32,7 +32,6 @@ import static com.azure.ai.formrecognizer.FormRecognizerClientTestBase.MODEL_ID_NOT_FOUND_ERROR_CODE; import static com.azure.ai.formrecognizer.TestUtils.DISPLAY_NAME_WITH_ARGUMENTS; -import static io.netty.handler.codec.http.HttpResponseStatus.BAD_REQUEST; import static org.junit.jupiter.api.Assertions.assertEquals; import static org.junit.jupiter.api.Assertions.assertNotNull; import static org.junit.jupiter.api.Assertions.assertThrows; @@ -572,7 +571,7 @@ public void beginCreateComposedUnlabeledModel(HttpClient httpClient, FormRecogni final HttpResponseException httpResponseException = assertThrows(HttpResponseException.class, () -> client.beginCreateComposedModel(modelIdList, new CreateComposedModelOptions(), Context.NONE) .setPollInterval(durationTestMode)); - assertEquals(BAD_REQUEST.code(), httpResponseException.getResponse().getStatusCode()); + assertEquals(400, httpResponseException.getResponse().getStatusCode()); client.deleteModel(model1.getModelId()); client.deleteModel(model2.getModelId()); @@ -598,7 +597,7 @@ public void beginCreateComposedDuplicateModels(HttpClient httpClient, FormRecogn () -> client.beginCreateComposedModel(modelIdList, new CreateComposedModelOptions(), Context.NONE) .setPollInterval(durationTestMode) .getFinalResult()); - assertEquals(BAD_REQUEST.code(), httpResponseException.getResponse().getStatusCode()); + assertEquals(400, httpResponseException.getResponse().getStatusCode()); client.deleteModel(model1.getModelId()); }); diff --git a/sdk/formrecognizer/azure-ai-formrecognizer/src/test/java/com/azure/ai/formrecognizer/documentanalysis/administration/DocumentModelAdministrationAsyncClientTest.java b/sdk/formrecognizer/azure-ai-formrecognizer/src/test/java/com/azure/ai/formrecognizer/documentanalysis/administration/DocumentModelAdministrationAsyncClientTest.java index 7c1c164b6c0ed..59961b7503bd7 100644 --- a/sdk/formrecognizer/azure-ai-formrecognizer/src/test/java/com/azure/ai/formrecognizer/documentanalysis/administration/DocumentModelAdministrationAsyncClientTest.java +++ b/sdk/formrecognizer/azure-ai-formrecognizer/src/test/java/com/azure/ai/formrecognizer/documentanalysis/administration/DocumentModelAdministrationAsyncClientTest.java @@ -33,7 +33,6 @@ import com.azure.core.util.polling.PollerFlux; import com.azure.core.util.polling.SyncPoller; import com.azure.identity.AzureAuthorityHosts; -import io.netty.handler.codec.http.HttpResponseStatus; import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.Disabled; import org.junit.jupiter.params.ParameterizedTest; @@ -134,7 +133,7 @@ public void deleteModelValidModelIdWithResponse(HttpClient httpClient, DocumentModelDetails createdModel = syncPoller1.getFinalResult(); StepVerifier.create(client.deleteDocumentModelWithResponse(createdModel.getModelId())) - .assertNext(response -> assertEquals(response.getStatusCode(), HttpResponseStatus.NO_CONTENT.code())) + .assertNext(response -> assertEquals(204, response.getStatusCode())) .expectComplete() .verify(DEFAULT_TIMEOUT); @@ -482,7 +481,7 @@ public void getModelWithResponse(HttpClient httpClient, DocumentAnalysisServiceV StepVerifier.create(client.getDocumentModelWithResponse(createdModel.getModelId())) .assertNext(documentModelResponse -> { - assertEquals(documentModelResponse.getStatusCode(), HttpResponseStatus.OK.code()); + assertEquals(200, documentModelResponse.getStatusCode()); validateDocumentModelData(documentModelResponse.getValue()); }); // TODO (alzimmer): This test needs to be recorded again as it was never verifying, therefore never diff --git a/sdk/keyvault/azure-security-keyvault-secrets/pom.xml b/sdk/keyvault/azure-security-keyvault-secrets/pom.xml index 52592990089ad..26c0870cc677c 100644 --- a/sdk/keyvault/azure-security-keyvault-secrets/pom.xml +++ b/sdk/keyvault/azure-security-keyvault-secrets/pom.xml @@ -39,7 +39,6 @@ --add-opens com.azure.security.keyvault.secrets/com.azure.security.keyvault.secrets=ALL-UNNAMED --add-opens com.azure.security.keyvault.secrets/com.azure.security.keyvault.secrets.implementation=ALL-UNNAMED --add-opens com.azure.security.keyvault.secrets/com.azure.security.keyvault.secrets.models=ALL-UNNAMED - --add-reads com.azure.security.keyvault.secrets=io.netty.codec.http false diff --git a/sdk/keyvault/azure-security-keyvault-secrets/src/test/java/com/azure/security/keyvault/secrets/SecretClientTest.java b/sdk/keyvault/azure-security-keyvault-secrets/src/test/java/com/azure/security/keyvault/secrets/SecretClientTest.java index 111e05ecb8bfd..374df5aa02b31 100644 --- a/sdk/keyvault/azure-security-keyvault-secrets/src/test/java/com/azure/security/keyvault/secrets/SecretClientTest.java +++ b/sdk/keyvault/azure-security-keyvault-secrets/src/test/java/com/azure/security/keyvault/secrets/SecretClientTest.java @@ -15,7 +15,6 @@ import com.azure.security.keyvault.secrets.models.DeletedSecret; import com.azure.security.keyvault.secrets.models.KeyVaultSecret; import com.azure.security.keyvault.secrets.models.SecretProperties; -import io.netty.handler.codec.http.HttpResponseStatus; import org.junit.jupiter.params.ParameterizedTest; import org.junit.jupiter.params.provider.MethodSource; @@ -230,8 +229,7 @@ public void deleteSecret(HttpClient httpClient, SecretServiceVersion serviceVers public void deleteSecretNotFound(HttpClient httpClient, SecretServiceVersion serviceVersion) { createClient(httpClient, serviceVersion); - assertRestException(() -> secretClient.beginDeleteSecret("non-existing"), ResourceNotFoundException.class, - HttpResponseStatus.NOT_FOUND.code()); + assertRestException(() -> secretClient.beginDeleteSecret("non-existing"), ResourceNotFoundException.class, 404); } /** @@ -309,7 +307,7 @@ public void recoverDeletedSecretNotFound(HttpClient httpClient, SecretServiceVer createClient(httpClient, serviceVersion); assertRestException(() -> secretClient.beginRecoverDeletedSecret("non-existing"), - ResourceNotFoundException.class, HttpResponseStatus.NOT_FOUND.code()); + ResourceNotFoundException.class, 404); } /** diff --git a/sdk/servicebus/azure-messaging-servicebus/pom.xml b/sdk/servicebus/azure-messaging-servicebus/pom.xml index 3eec8df25594f..f93911b495456 100644 --- a/sdk/servicebus/azure-messaging-servicebus/pom.xml +++ b/sdk/servicebus/azure-messaging-servicebus/pom.xml @@ -45,7 +45,6 @@ --add-exports com.azure.core/com.azure.core.implementation.util=ALL-UNNAMED --add-opens com.azure.core/com.azure.core.implementation.util=ALL-UNNAMED --add-reads com.azure.messaging.servicebus=com.azure.http.netty - --add-reads com.azure.messaging.servicebus=io.netty.codec.http --add-reads com.azure.messaging.servicebus=com.azure.core.experimental --add-reads com.azure.messaging.servicebus=com.azure.core.tracing.opentelemetry diff --git a/sdk/servicebus/azure-messaging-servicebus/src/test/java/com/azure/messaging/servicebus/administration/ServiceBusAdministrationClientTest.java b/sdk/servicebus/azure-messaging-servicebus/src/test/java/com/azure/messaging/servicebus/administration/ServiceBusAdministrationClientTest.java index 9d8174d3acc22..c5c780ed6db3e 100644 --- a/sdk/servicebus/azure-messaging-servicebus/src/test/java/com/azure/messaging/servicebus/administration/ServiceBusAdministrationClientTest.java +++ b/sdk/servicebus/azure-messaging-servicebus/src/test/java/com/azure/messaging/servicebus/administration/ServiceBusAdministrationClientTest.java @@ -36,7 +36,6 @@ import com.azure.messaging.servicebus.administration.models.QueueProperties; import com.azure.messaging.servicebus.administration.models.QueueRuntimeProperties; import com.azure.messaging.servicebus.administration.models.SubscriptionProperties; -import io.netty.handler.codec.http.HttpResponseStatus; import org.junit.jupiter.api.AfterEach; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; @@ -508,7 +507,7 @@ void deleteRuleWithResponse() { final Response actual = client.deleteRuleWithResponse(topicName, subscriptionName, ruleName, context); // Assert - assertEquals(actual.getStatusCode(), HttpResponseStatus.NO_CONTENT.code()); + assertEquals(204, actual.getStatusCode()); } @Test @@ -534,7 +533,7 @@ void deleteSubscriptionWithResponse() { final Response actual = client.deleteSubscriptionWithResponse(topicName, subscriptionName, context); // Assert - assertEquals(actual.getStatusCode(), HttpResponseStatus.NO_CONTENT.code()); + assertEquals(204, actual.getStatusCode()); } @Test @@ -560,7 +559,7 @@ void deleteTopicWithResponse() { final Response actual = client.deleteTopicWithResponse(topicName, context); // Assert - assertEquals(actual.getStatusCode(), HttpResponseStatus.NO_CONTENT.code()); + assertEquals(204, actual.getStatusCode()); } /** diff --git a/sdk/spring/spring-cloud-azure-autoconfigure/pom.xml b/sdk/spring/spring-cloud-azure-autoconfigure/pom.xml index f1c9c63d13135..0914f5dfae42c 100644 --- a/sdk/spring/spring-cloud-azure-autoconfigure/pom.xml +++ b/sdk/spring/spring-cloud-azure-autoconfigure/pom.xml @@ -37,15 +37,6 @@ true - - - - io.projectreactor - reactor-core - 3.8.7 - - - com.azure.spring @@ -111,6 +102,12 @@ lettuce-core 7.5.2.RELEASE true + + + io.projectreactor + reactor-core + + org.springframework.boot @@ -202,7 +199,7 @@ com.azure azure-core - 1.60.0 + 1.61.0-beta.1 true From c3e51d3f559fb0f9da0ecbce0b14487dd80f5f27 Mon Sep 17 00:00:00 2001 From: alzimmermsft <48699787+alzimmermsft@users.noreply.github.com> Date: Thu, 1 Oct 2026 12:27:50 -0400 Subject: [PATCH 09/21] Undo accidental deletions --- .../azure-cosmos-spark_3-1_2-12/README.md | 18 ++++++++++++++++++ .../migration-guide.md | 18 ++++++++++++++++++ .../azure-cosmos-spark_3-2_2-12/README.md | 18 ++++++++++++++++++ .../migration-guide.md | 16 ++++++++++++++++ 4 files changed, 70 insertions(+) create mode 100644 sdk/cosmos/azure-cosmos-spark_3-1_2-12/README.md create mode 100644 sdk/cosmos/azure-cosmos-spark_3-1_2-12/migration-guide.md create mode 100644 sdk/cosmos/azure-cosmos-spark_3-2_2-12/README.md create mode 100644 sdk/cosmos/azure-cosmos-spark_3-2_2-12/migration-guide.md diff --git a/sdk/cosmos/azure-cosmos-spark_3-1_2-12/README.md b/sdk/cosmos/azure-cosmos-spark_3-1_2-12/README.md new file mode 100644 index 0000000000000..37143b77ae26d --- /dev/null +++ b/sdk/cosmos/azure-cosmos-spark_3-1_2-12/README.md @@ -0,0 +1,18 @@ +# Azure Cosmos DB OLTP Spark 3 connector + +## Azure Cosmos DB OLTP Spark 3 connector for Spark 3.1 +**Azure Databricks**, **Azure Synapse** and **Azure HDInsights** don't provide any supported runtime for Spark 3.1 anymore. So, we have stopped releasing new versions for the **Azure Cosmos DB OLTP Spark connector** targeting Spark 3.1 - please move to Spark 3.5 instead. + +The last published **Azure Cosmos DB OLTP Spark connector** for Spark 3.1 is version **4.37.1** + +### Download + +You can use the maven coordinate of the jar to auto install the Spark Connector to your Databricks Runtime 14 from Maven: +`com.azure.cosmos.spark:azure-cosmos-spark_3-5_2-12:4.37.1` + +You can also integrate against Cosmos DB Spark Connector in your SBT project: +```scala +libraryDependencies += "com.azure.cosmos.spark" % "azure-cosmos-spark_3-5_2-12" % "4.37.1" +``` + +Cosmos DB Spark Connector is available on [Maven Central Repo](https://central.sonatype.com/search?namespace=com.azure.cosmos.spark). diff --git a/sdk/cosmos/azure-cosmos-spark_3-1_2-12/migration-guide.md b/sdk/cosmos/azure-cosmos-spark_3-1_2-12/migration-guide.md new file mode 100644 index 0000000000000..e4464de2d8143 --- /dev/null +++ b/sdk/cosmos/azure-cosmos-spark_3-1_2-12/migration-guide.md @@ -0,0 +1,18 @@ +# Azure Cosmos DB OLTP Spark 3 connector + +## Azure Cosmos DB OLTP Spark 3.1 connector - Migration to Spark 3.5 +There are no application-level changes required to migrate from Spark 3.1 or 3.2 to Spark 3.5 from the perspective of the Azure Cosmos DB Spark connector. Information on how to install the latest Connector version for the target Spark runtime can be found in the [Quick Start Guide](https://github.com/Azure/azure-sdk-for-java/blob/main/sdk/cosmos/azure-cosmos-spark_3/docs/quick-start.md) + +## Spark runtime +**Azure Databricks**, **Azure Synapse** and **Azure HDInsights** don't provide any supported runtime for Spark 3.1 anymore. To migrate to a supported Spark runtime, please follow the guidance below. + +### Azure Databricks +- [Migration guide](https://learn.microsoft.com/azure/databricks/release-notes/runtime/#apache-spark-migration-guidance) + +### Azure Synapse +- [Migration Guide](https://learn.microsoft.com/azure/synapse-analytics/spark/apache-spark-version-support#migration-between-apache-spark-versions---support) + +### Azure HDInsight +- [Migration Guide](https://learn.microsoft.com/azure/hdinsight/hdinsight-upgrade-cluster) + + diff --git a/sdk/cosmos/azure-cosmos-spark_3-2_2-12/README.md b/sdk/cosmos/azure-cosmos-spark_3-2_2-12/README.md new file mode 100644 index 0000000000000..5100e43d12e9f --- /dev/null +++ b/sdk/cosmos/azure-cosmos-spark_3-2_2-12/README.md @@ -0,0 +1,18 @@ +# Azure Cosmos DB OLTP Spark 3 connector + +## Azure Cosmos DB OLTP Spark 3 connector for Spark 3.2 +**Azure Databricks**, **Azure Synapse** and **Azure HDInsights** don't provide any supported runtime for Spark 3.2 anymore. So, we have stopped releasing new versions for the **Azure Cosmos DB OLTP Spark connector** targeting Spark 3.2 - please move to Spark 3.5 instead. + +The last published **Azure Cosmos DB OLTP Spark connector** for Spark 3.2 is version **4.37.1** + +### Download + +You can use the maven coordinate of the jar to auto install the Spark Connector to your Databricks Runtime 10 from Maven: +`com.azure.cosmos.spark:azure-cosmos-spark_3-2_2-12:4.37.1` + +You can also integrate against Cosmos DB Spark Connector in your SBT project: +```scala +libraryDependencies += "com.azure.cosmos.spark" % "azure-cosmos-spark_3-2_2-12" % "4.37.1" +``` + +Cosmos DB Spark Connector is available on [Maven Central Repo](https://central.sonatype.com/search?namespace=com.azure.cosmos.spark). \ No newline at end of file diff --git a/sdk/cosmos/azure-cosmos-spark_3-2_2-12/migration-guide.md b/sdk/cosmos/azure-cosmos-spark_3-2_2-12/migration-guide.md new file mode 100644 index 0000000000000..788e6583537eb --- /dev/null +++ b/sdk/cosmos/azure-cosmos-spark_3-2_2-12/migration-guide.md @@ -0,0 +1,16 @@ +# Azure Cosmos DB OLTP Spark 3 connector + +## Azure Cosmos DB OLTP Spark 3.2 connector - Migration to Spark 3.5 +There are no application-level changes required to migrate from Spark 3.1 or 3.2 to Spark 3.5 from the perspective of the Azure Cosmos DB Spark connector. Information on how to install the latest Connector version for the target Spark runtime can be found in the [Quick Start Guide](https://github.com/Azure/azure-sdk-for-java/blob/main/sdk/cosmos/azure-cosmos-spark_3/docs/quick-start.md) + +## Spark runtime +**Azure Databricks**, **Azure Synapse** and **Azure HDInsights** don't provide any supported runtime for Spark 3.1 anymore. To migrate to a supported Spark runtime, please follow the guidance below. + +### Azure Databricks +- [Migration guide](https://learn.microsoft.com/azure/databricks/release-notes/runtime/#apache-spark-migration-guidance) + +### Azure Synapse +- [Migration Guide](https://learn.microsoft.com/azure/synapse-analytics/spark/apache-spark-version-support#migration-between-apache-spark-versions---support) + +### Azure HDInsight +- [Migration Guide](https://learn.microsoft.com/azure/hdinsight/hdinsight-upgrade-cluster) \ No newline at end of file From dd6c5dcff4f4699967c05117444ebfba6763f1eb Mon Sep 17 00:00:00 2001 From: alzimmermsft <48699787+alzimmermsft@users.noreply.github.com> Date: Thu, 1 Oct 2026 15:19:47 -0400 Subject: [PATCH 10/21] Few more dependency fixes --- .../azure-security-attestation/pom.xml | 1 + .../azure-cosmos-spark_3-4_2-12/pom.xml | 16 +++ sdk/cosmos/azure-cosmos-spark_3-5/pom.xml | 16 +++ .../azure-cosmos-spark_4-0_2-13/pom.xml | 76 +++++++++++++ .../azure-cosmos-spark_4-1_2-13/pom.xml | 104 ++++++++++++++++++ .../websocket/WebSocketSessionNettyImpl.java | 1 - 6 files changed, 213 insertions(+), 1 deletion(-) diff --git a/sdk/attestation/azure-security-attestation/pom.xml b/sdk/attestation/azure-security-attestation/pom.xml index c0bb0af531d8f..c76630ae186a2 100644 --- a/sdk/attestation/azure-security-attestation/pom.xml +++ b/sdk/attestation/azure-security-attestation/pom.xml @@ -37,6 +37,7 @@ --add-opens com.azure.security.attestation/com.azure.security.attestation=ALL-UNNAMED --add-opens com.azure.security.attestation/com.azure.security.attestation.models=ALL-UNNAMED + --add-reads com.azure.security.attestation=org.bouncycastle.provider false diff --git a/sdk/cosmos/azure-cosmos-spark_3-4_2-12/pom.xml b/sdk/cosmos/azure-cosmos-spark_3-4_2-12/pom.xml index 7e0bf98d65c7c..bfe17f9cfdfdc 100644 --- a/sdk/cosmos/azure-cosmos-spark_3-4_2-12/pom.xml +++ b/sdk/cosmos/azure-cosmos-spark_3-4_2-12/pom.xml @@ -183,6 +183,14 @@ io.netty netty-all + + io.netty + netty-transport-native-epoll + + + io.netty + netty-transport-native-kqueue + org.slf4j * @@ -199,6 +207,14 @@ io.netty netty-all + + io.netty + netty-transport-native-epoll + + + io.netty + netty-transport-native-kqueue + org.slf4j * diff --git a/sdk/cosmos/azure-cosmos-spark_3-5/pom.xml b/sdk/cosmos/azure-cosmos-spark_3-5/pom.xml index e9918828cbec9..be5c1955b729d 100644 --- a/sdk/cosmos/azure-cosmos-spark_3-5/pom.xml +++ b/sdk/cosmos/azure-cosmos-spark_3-5/pom.xml @@ -104,6 +104,14 @@ io.netty netty-all + + io.netty + netty-transport-native-epoll + + + io.netty + netty-transport-native-kqueue + org.slf4j * @@ -120,6 +128,14 @@ io.netty netty-all + + io.netty + netty-transport-native-epoll + + + io.netty + netty-transport-native-kqueue + org.slf4j * diff --git a/sdk/cosmos/azure-cosmos-spark_4-0_2-13/pom.xml b/sdk/cosmos/azure-cosmos-spark_4-0_2-13/pom.xml index dac2a640c5531..b2673044ade6f 100644 --- a/sdk/cosmos/azure-cosmos-spark_4-0_2-13/pom.xml +++ b/sdk/cosmos/azure-cosmos-spark_4-0_2-13/pom.xml @@ -188,10 +188,86 @@ spark-sql_2.13 4.0.0 + + io.netty + netty-tcnative-boringssl-static + + + io.netty + netty-tcnative-classes + io.netty netty-all + + io.netty + netty-buffer + + + io.netty + netty-codec + + + io.netty + netty-codec-dns + + + io.netty + netty-codec-http + + + io.netty + netty-codec-http2 + + + io.netty + netty-codec-socks + + + io.netty + netty-common + + + io.netty + netty-handler + + + io.netty + netty-transport-native-unix-common + + + io.netty + netty-handler-proxy + + + io.netty + netty-resolver + + + io.netty + netty-resolver-dns + + + io.netty + netty-transport + + + io.netty + netty-transport-classes-epoll + + + io.netty + netty-transport-classes-kqueue + + + io.netty + netty-transport-native-epoll + + + io.netty + netty-transport-native-kqueue + org.slf4j * diff --git a/sdk/cosmos/azure-cosmos-spark_4-1_2-13/pom.xml b/sdk/cosmos/azure-cosmos-spark_4-1_2-13/pom.xml index 1fd6422db2c97..dab39608248dd 100644 --- a/sdk/cosmos/azure-cosmos-spark_4-1_2-13/pom.xml +++ b/sdk/cosmos/azure-cosmos-spark_4-1_2-13/pom.xml @@ -235,10 +235,114 @@ spark-sql_2.13 4.1.0 + + io.netty + netty-tcnative-boringssl-static + + + io.netty + netty-tcnative-classes + io.netty netty-all + + io.netty + netty-buffer + + + io.netty + netty-codec-base + + + io.netty + netty-codec + + + io.netty + netty-codec-dns + + + io.netty + netty-codec-compression + + + io.netty + netty-codec-http + + + io.netty + netty-codec-http2 + + + io.netty + netty-codec-http3 + + + io.netty + netty-codec-socks + + + io.netty + netty-codec-protobuf + + + io.netty + netty-codec-marshalling + + + io.netty + netty-common + + + io.netty + netty-handler + + + io.netty + netty-transport-native-unix-common + + + io.netty + netty-handler-proxy + + + io.netty + netty-resolver + + + io.netty + netty-resolver-dns + + + io.netty + netty-transport + + + io.netty + netty-transport-classes-epoll + + + io.netty + netty-transport-classes-kqueue + + + io.netty + netty-transport-classes-io_uring + + + io.netty + netty-transport-classes-quic + + + io.netty + netty-transport-native-epoll + + + io.netty + netty-transport-native-kqueue + org.slf4j * diff --git a/sdk/openai/azure-ai-openai-realtime/src/main/java/com/azure/ai/openai/realtime/implementation/websocket/WebSocketSessionNettyImpl.java b/sdk/openai/azure-ai-openai-realtime/src/main/java/com/azure/ai/openai/realtime/implementation/websocket/WebSocketSessionNettyImpl.java index 221c91b27d8cb..9bb3205ef776f 100644 --- a/sdk/openai/azure-ai-openai-realtime/src/main/java/com/azure/ai/openai/realtime/implementation/websocket/WebSocketSessionNettyImpl.java +++ b/sdk/openai/azure-ai-openai-realtime/src/main/java/com/azure/ai/openai/realtime/implementation/websocket/WebSocketSessionNettyImpl.java @@ -35,7 +35,6 @@ import javax.net.ssl.SSLException; import java.net.URI; -import java.net.URISyntaxException; import java.util.concurrent.CompletableFuture; import java.util.concurrent.ExecutionException; import java.util.concurrent.TimeUnit; From 4225cff29b13c85dbffe202e11190f569813bf92 Mon Sep 17 00:00:00 2001 From: alzimmermsft <48699787+alzimmermsft@users.noreply.github.com> Date: Mon, 5 Oct 2026 12:15:07 -0400 Subject: [PATCH 11/21] Fix linting --- sdk/clientcore/http-netty4/spotbugs-exclude.xml | 4 ++++ sdk/cosmos/azure-cosmos/README.md | 2 +- 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/sdk/clientcore/http-netty4/spotbugs-exclude.xml b/sdk/clientcore/http-netty4/spotbugs-exclude.xml index 57b36d11db672..3ab9dae484d83 100644 --- a/sdk/clientcore/http-netty4/spotbugs-exclude.xml +++ b/sdk/clientcore/http-netty4/spotbugs-exclude.xml @@ -62,6 +62,10 @@ + + + + diff --git a/sdk/cosmos/azure-cosmos/README.md b/sdk/cosmos/azure-cosmos/README.md index 5189250736bfe..c11a4037373ac 100644 --- a/sdk/cosmos/azure-cosmos/README.md +++ b/sdk/cosmos/azure-cosmos/README.md @@ -110,7 +110,7 @@ If the native module is not resolved, the bundled JNI library is unavailable to Cosmos DB direct mode falls back to JDK NIO unless a native library is supplied another way. These JPMS launch options do not apply to Java 8 or to classpath applications. Resolving the module does not by itself prove epoll is usable on the current OS. The -[Netty HTTP plugin's module-path guidance](../../core/azure-core-http-netty/README.md#native-transports-on-the-module-path) +[Netty HTTP plugin's module-path guidance](https://github.com/Azure/azure-sdk-for-java/blob/main/sdk/core/azure-core-http-netty/README.md#native-transports-on-the-module-path) also covers gateway HTTP and macOS kqueue. ### Global Distribution From 193e8edca3d1be1e126a66bc7b33c9944837fc80 Mon Sep 17 00:00:00 2001 From: alzimmermsft <48699787+alzimmermsft@users.noreply.github.com> Date: Wed, 7 Oct 2026 11:48:05 -0400 Subject: [PATCH 12/21] Make Analyze job timeout longer --- eng/pipelines/templates/jobs/ci.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/eng/pipelines/templates/jobs/ci.yml b/eng/pipelines/templates/jobs/ci.yml index 1b0af4b0c28cb..463315065b850 100644 --- a/eng/pipelines/templates/jobs/ci.yml +++ b/eng/pipelines/templates/jobs/ci.yml @@ -308,6 +308,7 @@ jobs: - job: 'Analyze' condition: and(succeeded(), ne(variables['Skip.Analyze'], 'true')) + timeoutInMinutes: 120 pool: name: $(LINUXPOOL) From 22edc6cef0455add8c25c9cd2358a819acc52efb Mon Sep 17 00:00:00 2001 From: alzimmermsft <48699787+alzimmermsft@users.noreply.github.com> Date: Tue, 13 Oct 2026 08:37:14 -0400 Subject: [PATCH 13/21] Update target Netty version --- eng/versioning/external_dependencies.txt | 34 +++++------ sdk/ai/azure-ai-agents/pom.xml | 20 +++---- sdk/clientcore/http-netty4/pom.xml | 46 +++++++-------- sdk/core/azure-core-http-netty/pom.xml | 58 +++++++++---------- sdk/cosmos/azure-cosmos-spark_3/pom.xml | 4 +- sdk/openai/azure-ai-openai-realtime/pom.xml | 4 +- .../pom.xml | 2 +- .../azure-messaging-webpubsub-client/pom.xml | 4 +- 8 files changed, 86 insertions(+), 86 deletions(-) diff --git a/eng/versioning/external_dependencies.txt b/eng/versioning/external_dependencies.txt index 29a97c680e835..4c8912688f40d 100644 --- a/eng/versioning/external_dependencies.txt +++ b/eng/versioning/external_dependencies.txt @@ -44,23 +44,23 @@ commons-net:commons-net;3.9.0 io.cloudevents:cloudevents-api;2.2.0 io.cloudevents:cloudevents-core;2.2.0 io.fabric8:kubernetes-client;6.12.1 -io.netty:netty-buffer;4.2.18.Final -io.netty:netty-common;4.2.18.Final -io.netty:netty-codec-base;4.2.18.Final -io.netty:netty-codec-http;4.2.18.Final -io.netty:netty-codec-http2;4.2.18.Final -io.netty:netty-codec-http3;4.2.18.Final -io.netty:netty-handler;4.2.18.Final -io.netty:netty-handler-proxy;4.2.18.Final -io.netty:netty-resolver;4.2.18.Final -io.netty:netty-resolver-dns;4.2.18.Final -io.netty:netty-resolver-dns-native-macos;4.2.18.Final +io.netty:netty-buffer;4.2.19.Final +io.netty:netty-common;4.2.19.Final +io.netty:netty-codec-base;4.2.19.Final +io.netty:netty-codec-http;4.2.19.Final +io.netty:netty-codec-http2;4.2.19.Final +io.netty:netty-codec-http3;4.2.19.Final +io.netty:netty-handler;4.2.19.Final +io.netty:netty-handler-proxy;4.2.19.Final +io.netty:netty-resolver;4.2.19.Final +io.netty:netty-resolver-dns;4.2.19.Final +io.netty:netty-resolver-dns-native-macos;4.2.19.Final io.netty:netty-tcnative-boringssl-static;2.0.84.Final -io.netty:netty-transport;4.2.18.Final -io.netty:netty-transport-classes-epoll;4.2.18.Final -io.netty:netty-transport-native-epoll;4.2.18.Final -io.netty:netty-transport-native-unix-common;4.2.18.Final -io.netty:netty-transport-native-kqueue;4.2.18.Final +io.netty:netty-transport;4.2.19.Final +io.netty:netty-transport-classes-epoll;4.2.19.Final +io.netty:netty-transport-native-epoll;4.2.19.Final +io.netty:netty-transport-native-unix-common;4.2.19.Final +io.netty:netty-transport-native-kqueue;4.2.19.Final io.projectreactor.netty:reactor-netty-http;1.3.7 io.projectreactor:reactor-core;3.8.7 io.vertx:vertx-codegen;4.5.32 @@ -304,7 +304,7 @@ springboot4_com.mysql:mysql-connector-j;9.7.0 springboot4_com.nimbusds:nimbus-jose-jwt;10.8 springboot4_io.lettuce:lettuce-core;7.5.2.RELEASE springboot4_io.micrometer:micrometer-core;1.17.1 -springboot4_io.netty:netty-buffer;4.2.17.Final +springboot4_io.netty:netty-buffer;4.2.19.Final springboot4_io.netty:netty-codec-http;4.2.17.Final springboot4_io.netty:netty-common;4.2.17.Final springboot4_io.netty:netty-handler;4.2.17.Final diff --git a/sdk/ai/azure-ai-agents/pom.xml b/sdk/ai/azure-ai-agents/pom.xml index c7c6ae26b4269..d35dcf69ec983 100644 --- a/sdk/ai/azure-ai-agents/pom.xml +++ b/sdk/ai/azure-ai-agents/pom.xml @@ -78,27 +78,27 @@ io.netty netty-codec-http - 4.2.18.Final + 4.2.19.Final io.netty netty-transport - 4.2.18.Final + 4.2.19.Final io.netty netty-common - 4.2.18.Final + 4.2.19.Final io.netty netty-codec-base - 4.2.18.Final + 4.2.19.Final io.netty netty-buffer - 4.2.18.Final + 4.2.19.Final com.squareup.okhttp3 @@ -151,11 +151,11 @@ com.openai:openai-java:[4.69.0] io.projectreactor.netty:reactor-netty-http:[1.3.7] - io.netty:netty-codec-http:[4.2.18.Final] - io.netty:netty-transport:[4.2.18.Final] - io.netty:netty-common:[4.2.18.Final] - io.netty:netty-codec-base:[4.2.18.Final] - io.netty:netty-buffer:[4.2.18.Final] + io.netty:netty-codec-http:[4.2.19.Final] + io.netty:netty-transport:[4.2.19.Final] + io.netty:netty-common:[4.2.19.Final] + io.netty:netty-codec-base:[4.2.19.Final] + io.netty:netty-buffer:[4.2.19.Final] com.squareup.okhttp3:okhttp:[4.12.0] com.squareup.okio:okio-jvm:[3.18.1] diff --git a/sdk/clientcore/http-netty4/pom.xml b/sdk/clientcore/http-netty4/pom.xml index 63caa03641869..69bc62ffad745 100644 --- a/sdk/clientcore/http-netty4/pom.xml +++ b/sdk/clientcore/http-netty4/pom.xml @@ -56,7 +56,7 @@ io.clientcore.core.implementation*,io.clientcore.core.models,io.clientcore.core.util,io.clientcore.core.util* - 4.2.18.Final + 4.2.19.Final @@ -69,52 +69,52 @@ io.netty netty-buffer - 4.2.18.Final + 4.2.19.Final io.netty netty-codec-base - 4.2.18.Final + 4.2.19.Final io.netty netty-codec-http - 4.2.18.Final + 4.2.19.Final io.netty netty-codec-http2 - 4.2.18.Final + 4.2.19.Final io.netty netty-common - 4.2.18.Final + 4.2.19.Final io.netty netty-handler - 4.2.18.Final + 4.2.19.Final io.netty netty-handler-proxy - 4.2.18.Final + 4.2.19.Final io.netty netty-resolver - 4.2.18.Final + 4.2.19.Final io.netty netty-resolver-dns - 4.2.18.Final + 4.2.19.Final io.netty netty-transport - 4.2.18.Final + 4.2.19.Final @@ -129,7 +129,7 @@ io.netty netty-transport-native-epoll - 4.2.18.Final + 4.2.19.Final linux-x86_64 test @@ -137,7 +137,7 @@ io.netty netty-transport-native-kqueue - 4.2.18.Final + 4.2.19.Final osx-x86_64 test @@ -209,16 +209,16 @@ - io.netty:netty-buffer:[4.2.18.Final] - io.netty:netty-codec-base:[4.2.18.Final] - io.netty:netty-codec-http:[4.2.18.Final] - io.netty:netty-codec-http2:[4.2.18.Final] - io.netty:netty-common:[4.2.18.Final] - io.netty:netty-handler:[4.2.18.Final] - io.netty:netty-handler-proxy:[4.2.18.Final] - io.netty:netty-resolver:[4.2.18.Final] - io.netty:netty-resolver-dns:[4.2.18.Final] - io.netty:netty-transport:[4.2.18.Final] + io.netty:netty-buffer:[4.2.19.Final] + io.netty:netty-codec-base:[4.2.19.Final] + io.netty:netty-codec-http:[4.2.19.Final] + io.netty:netty-codec-http2:[4.2.19.Final] + io.netty:netty-common:[4.2.19.Final] + io.netty:netty-handler:[4.2.19.Final] + io.netty:netty-handler-proxy:[4.2.19.Final] + io.netty:netty-resolver:[4.2.19.Final] + io.netty:netty-resolver-dns:[4.2.19.Final] + io.netty:netty-transport:[4.2.19.Final] diff --git a/sdk/core/azure-core-http-netty/pom.xml b/sdk/core/azure-core-http-netty/pom.xml index be001dd83147d..1b4a40118e828 100644 --- a/sdk/core/azure-core-http-netty/pom.xml +++ b/sdk/core/azure-core-http-netty/pom.xml @@ -64,7 +64,7 @@ false false - 4.2.18.Final + 4.2.19.Final 2.0.84.Final @@ -85,70 +85,70 @@ io.netty netty-handler - 4.2.18.Final + 4.2.19.Final io.netty netty-handler-proxy - 4.2.18.Final + 4.2.19.Final io.netty netty-buffer - 4.2.18.Final + 4.2.19.Final io.netty netty-transport - 4.2.18.Final + 4.2.19.Final io.netty netty-codec-base - 4.2.18.Final + 4.2.19.Final io.netty netty-codec-http - 4.2.18.Final + 4.2.19.Final io.netty netty-codec-http2 - 4.2.18.Final + 4.2.19.Final io.netty netty-codec-http3 - 4.2.18.Final + 4.2.19.Final io.netty netty-resolver-dns - 4.2.18.Final + 4.2.19.Final io.netty netty-resolver-dns-native-macos - 4.2.18.Final + 4.2.19.Final osx-x86_64 io.netty netty-transport-native-unix-common - 4.2.18.Final + 4.2.19.Final io.netty netty-transport-native-epoll - 4.2.18.Final + 4.2.19.Final linux-x86_64 io.netty netty-transport-native-kqueue - 4.2.18.Final + 4.2.19.Final osx-x86_64 @@ -168,7 +168,7 @@ io.netty netty-common - 4.2.18.Final + 4.2.19.Final @@ -231,20 +231,20 @@ io.netty:netty-tcnative-boringssl-static:[2.0.84.Final] io.projectreactor.netty:reactor-netty-http:[1.3.7] - io.netty:netty-buffer:[4.2.18.Final] - io.netty:netty-transport:[4.2.18.Final] - io.netty:netty-common:[4.2.18.Final] - io.netty:netty-codec-base:[4.2.18.Final] - io.netty:netty-codec-http:[4.2.18.Final] - io.netty:netty-codec-http2:[4.2.18.Final] - io.netty:netty-codec-http3:[4.2.18.Final] - io.netty:netty-handler:[4.2.18.Final] - io.netty:netty-handler-proxy:[4.2.18.Final] - io.netty:netty-resolver-dns:[4.2.18.Final] - io.netty:netty-resolver-dns-native-macos:[4.2.18.Final] - io.netty:netty-transport-native-unix-common:[4.2.18.Final] - io.netty:netty-transport-native-epoll:[4.2.18.Final] - io.netty:netty-transport-native-kqueue:[4.2.18.Final] + io.netty:netty-buffer:[4.2.19.Final] + io.netty:netty-transport:[4.2.19.Final] + io.netty:netty-common:[4.2.19.Final] + io.netty:netty-codec-base:[4.2.19.Final] + io.netty:netty-codec-http:[4.2.19.Final] + io.netty:netty-codec-http2:[4.2.19.Final] + io.netty:netty-codec-http3:[4.2.19.Final] + io.netty:netty-handler:[4.2.19.Final] + io.netty:netty-handler-proxy:[4.2.19.Final] + io.netty:netty-resolver-dns:[4.2.19.Final] + io.netty:netty-resolver-dns-native-macos:[4.2.19.Final] + io.netty:netty-transport-native-unix-common:[4.2.19.Final] + io.netty:netty-transport-native-epoll:[4.2.19.Final] + io.netty:netty-transport-native-kqueue:[4.2.19.Final] diff --git a/sdk/cosmos/azure-cosmos-spark_3/pom.xml b/sdk/cosmos/azure-cosmos-spark_3/pom.xml index 3df6298e4c959..7f50977a332ae 100644 --- a/sdk/cosmos/azure-cosmos-spark_3/pom.xml +++ b/sdk/cosmos/azure-cosmos-spark_3/pom.xml @@ -92,7 +92,7 @@ io.netty netty-transport-classes-epoll - 4.2.18.Final + 4.2.19.Final io.projectreactor @@ -322,7 +322,7 @@ org.apache.commons:commons-lang3:[3.18.0] - io.netty:netty-transport-classes-epoll:[4.2.18.Final] + io.netty:netty-transport-classes-epoll:[4.2.19.Final] org.slf4j:slf4j-api:[1.7.36] org.apache.spark:spark-sql_2.12:[${spark33.version}] org.apache.spark:spark-sql_2.12:[${spark34.version}] diff --git a/sdk/openai/azure-ai-openai-realtime/pom.xml b/sdk/openai/azure-ai-openai-realtime/pom.xml index ed53f4c01de2e..77fbbc6d14ea9 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.2.18.Final + 4.2.19.Final @@ -108,7 +108,7 @@ - io.netty:netty-codec-http:[4.2.18.Final] + io.netty:netty-codec-http:[4.2.19.Final] diff --git a/sdk/spring/spring-cloud-azure-starter-servicebus-jms/pom.xml b/sdk/spring/spring-cloud-azure-starter-servicebus-jms/pom.xml index 1b31055bb9cf4..93557e043243e 100644 --- a/sdk/spring/spring-cloud-azure-starter-servicebus-jms/pom.xml +++ b/sdk/spring/spring-cloud-azure-starter-servicebus-jms/pom.xml @@ -106,7 +106,7 @@ currently released version and a lower version is resolved. --> io.netty netty-buffer - 4.2.17.Final + 4.2.19.Final io.netty diff --git a/sdk/webpubsub/azure-messaging-webpubsub-client/pom.xml b/sdk/webpubsub/azure-messaging-webpubsub-client/pom.xml index 47b4dd0f6b77f..d4235659fa57a 100644 --- a/sdk/webpubsub/azure-messaging-webpubsub-client/pom.xml +++ b/sdk/webpubsub/azure-messaging-webpubsub-client/pom.xml @@ -55,7 +55,7 @@ io.netty netty-codec-http - 4.2.18.Final + 4.2.19.Final @@ -107,7 +107,7 @@ - io.netty:netty-codec-http:[4.2.18.Final] + io.netty:netty-codec-http:[4.2.19.Final] From ba908df202eacc31d4786e6d579413b56cb18197 Mon Sep 17 00:00:00 2001 From: alzimmermsft <48699787+alzimmermsft@users.noreply.github.com> Date: Tue, 13 Oct 2026 09:40:13 -0400 Subject: [PATCH 14/21] Remove unnecessary unreleased dependencies --- sdk/ai/azure-ai-agents-persistent/pom.xml | 6 +++--- sdk/ai/azure-ai-inference/pom.xml | 6 +++--- sdk/ai/azure-ai-projects/pom.xml | 6 +++--- .../azure-ai-anomalydetector/pom.xml | 6 +++--- .../azure-data-appconfiguration-perf/pom.xml | 4 ++-- .../azure-data-appconfiguration/pom.xml | 6 +++--- .../azure-resourcemanager-appplatform/pom.xml | 2 +- .../pom.xml | 2 +- sdk/batch/azure-compute-batch/pom.xml | 6 +++--- sdk/cdn/azure-resourcemanager-cdn/pom.xml | 2 +- .../pom.xml | 6 +++--- .../azure-communication-callingserver/pom.xml | 6 +++--- .../azure-communication-chat/pom.xml | 6 +++--- .../azure-communication-common-perf/pom.xml | 6 +++--- .../azure-communication-common/pom.xml | 6 +++--- .../azure-communication-email/pom.xml | 6 +++--- .../azure-communication-identity/pom.xml | 6 +++--- .../azure-communication-jobrouter/pom.xml | 20 +++---------------- .../azure-communication-messages/pom.xml | 6 +++--- .../azure-communication-phonenumbers/pom.xml | 6 +++--- .../azure-communication-rooms/pom.xml | 6 +++--- .../azure-resourcemanager-compute/pom.xml | 2 +- .../azure-security-confidentialledger/pom.xml | 6 +++--- .../pom.xml | 2 +- .../pom.xml | 4 ++-- .../pom.xml | 6 +++--- .../pom.xml | 2 +- .../pom.xml | 2 +- .../azure-ai-contentsafety/pom.xml | 6 +++--- .../azure-ai-contentunderstanding/pom.xml | 6 +++--- .../azure-resourcemanager-cosmos/pom.xml | 2 +- .../azure-developer-devcenter/pom.xml | 6 +++--- .../pom.xml | 6 +++--- .../azure-iot-deviceupdate/pom.xml | 6 +++--- .../azure-digitaltwins-core/pom.xml | 6 +++--- sdk/discovery/azure-ai-discovery/pom.xml | 6 +++--- sdk/dns/azure-resourcemanager-dns/pom.xml | 2 +- .../azure-ai-documentintelligence/pom.xml | 6 +++--- .../azure-analytics-defender-easm/pom.xml | 6 +++--- .../pom.xml | 6 +++--- .../azure-messaging-eventgrid/pom.xml | 6 +++--- .../azure-resourcemanager-eventhubs/pom.xml | 2 +- sdk/face/azure-ai-vision-face/pom.xml | 6 +++--- .../azure-ai-formrecognizer-perf/pom.xml | 4 ++-- .../azure-ai-formrecognizer/pom.xml | 6 +++--- .../azure-health-deidentification/pom.xml | 6 +++--- .../pom.xml | 6 +++--- .../pom.xml | 6 +++--- .../pom.xml | 6 +++--- sdk/identity/azure-identity-perf/pom.xml | 4 ++-- sdk/identity/azure-identity/pom.xml | 6 +++--- .../azure-resourcemanager-keyvault/pom.xml | 2 +- .../pom.xml | 6 +++--- .../pom.xml | 6 +++--- .../azure-security-keyvault-keys/pom.xml | 6 +++--- .../azure-security-keyvault-perf/pom.xml | 6 +++--- .../azure-security-keyvault-secrets/pom.xml | 6 +++--- .../azure-developer-loadtesting/pom.xml | 6 +++--- sdk/maps/azure-maps-geolocation/pom.xml | 6 +++--- sdk/maps/azure-maps-render/pom.xml | 6 +++--- sdk/maps/azure-maps-route/pom.xml | 6 +++--- sdk/maps/azure-maps-search/pom.xml | 6 +++--- sdk/maps/azure-maps-timezone/pom.xml | 6 +++--- sdk/maps/azure-maps-traffic/pom.xml | 6 +++--- sdk/maps/azure-maps-weather/pom.xml | 6 +++--- .../azure-ai-metricsadvisor-perf/pom.xml | 4 ++-- .../azure-ai-metricsadvisor/pom.xml | 6 +++--- .../azure-iot-modelsrepository/pom.xml | 6 +++--- .../azure-monitor-ingestion-perf/pom.xml | 4 ++-- sdk/monitor/azure-monitor-ingestion/pom.xml | 6 +++--- .../pom.xml | 6 +++--- .../pom.xml | 6 +++--- sdk/monitor/azure-monitor-query-logs/pom.xml | 6 +++--- .../azure-monitor-query-metrics/pom.xml | 6 +++--- sdk/monitor/azure-monitor-query-perf/pom.xml | 4 ++-- sdk/monitor/azure-monitor-query/pom.xml | 6 +++--- .../azure-resourcemanager-monitor/pom.xml | 2 +- sdk/msi/azure-resourcemanager-msi/pom.xml | 2 +- .../azure-resourcemanager-network/pom.xml | 2 +- .../pom.xml | 6 +++--- sdk/openai/azure-ai-openai-assistants/pom.xml | 6 +++--- sdk/openai/azure-ai-openai/pom.xml | 6 +++--- .../azure-analytics-planetarycomputer/pom.xml | 6 +++--- .../azure-resourcemanager-privatedns/pom.xml | 2 +- .../pom.xml | 6 +++--- .../azure-analytics-purview-datamap/pom.xml | 6 +++--- .../azure-analytics-purview-scanning/pom.xml | 6 +++--- .../azure-analytics-purview-sharing/pom.xml | 6 +++--- .../azure-analytics-purview-workflow/pom.xml | 6 +++--- sdk/quantum/azure-quantum-jobs/pom.xml | 6 +++--- sdk/redis/azure-resourcemanager-redis/pom.xml | 2 +- .../azure-resourcemanager-perf/pom.xml | 4 ++-- .../azure-resourcemanager-test/pom.xml | 6 +++--- .../azure-resourcemanager/pom.xml | 4 ++-- .../azure-data-schemaregistry/pom.xml | 6 +++--- .../azure-resourcemanager-search/pom.xml | 2 +- sdk/search/azure-search-documents/pom.xml | 6 +++--- sdk/search/azure-search-perf/pom.xml | 4 ++-- .../pom.xml | 4 ++-- .../azure-messaging-servicebus/pom.xml | 6 +++--- .../azure-resourcemanager-servicebus/pom.xml | 2 +- .../spring-cloud-azure-autoconfigure/pom.xml | 4 ++-- sdk/sql/azure-resourcemanager-sql/pom.xml | 2 +- sdk/storage-v2/azure-storage-perf/pom.xml | 6 +++--- .../azure-resourcemanager-storage/pom.xml | 2 +- sdk/storage/azure-storage-blob-batch/pom.xml | 6 +++--- .../azure-storage-blob-changefeed/pom.xml | 6 +++--- .../azure-storage-blob-cryptography/pom.xml | 6 +++--- sdk/storage/azure-storage-blob-nio/pom.xml | 6 +++--- sdk/storage/azure-storage-blob-stress/pom.xml | 4 ++-- sdk/storage/azure-storage-blob/pom.xml | 6 +++--- sdk/storage/azure-storage-common/pom.xml | 6 +++--- .../pom.xml | 4 ++-- .../azure-storage-file-datalake/pom.xml | 6 +++--- .../azure-storage-file-share-stress/pom.xml | 4 ++-- sdk/storage/azure-storage-file-share/pom.xml | 6 +++--- sdk/storage/azure-storage-perf/pom.xml | 4 ++-- sdk/storage/azure-storage-queue/pom.xml | 6 +++--- sdk/storage/azure-storage-stress/pom.xml | 4 ++-- .../pom.xml | 6 +++--- .../azure-analytics-synapse-artifacts/pom.xml | 6 +++--- .../pom.xml | 6 +++--- .../pom.xml | 6 +++--- .../azure-analytics-synapse-spark/pom.xml | 6 +++--- sdk/tables/azure-data-tables-perf/pom.xml | 6 +++--- sdk/tables/azure-data-tables/pom.xml | 6 +++--- sdk/template/azure-template-stress/pom.xml | 4 ++-- .../azure-ai-textanalytics-perf/pom.xml | 4 ++-- .../azure-ai-textanalytics/pom.xml | 6 +++--- sdk/tools/azure-sdk-build-tool/pom.xml | 4 ++-- .../pom.xml | 2 +- .../azure-ai-speech-transcription/pom.xml | 6 +++--- .../azure-ai-documenttranslator/pom.xml | 6 +++--- .../azure-ai-translation-document/pom.xml | 6 +++--- .../azure-ai-translation-text/pom.xml | 6 +++--- .../azure-ai-vision-imageanalysis/pom.xml | 6 +++--- sdk/voicelive/azure-ai-voicelive/pom.xml | 6 +++--- .../azure-messaging-webpubsub/pom.xml | 6 +++--- 138 files changed, 352 insertions(+), 366 deletions(-) diff --git a/sdk/ai/azure-ai-agents-persistent/pom.xml b/sdk/ai/azure-ai-agents-persistent/pom.xml index c6794f9b7cb4c..0be5df0b84bbb 100644 --- a/sdk/ai/azure-ai-agents-persistent/pom.xml +++ b/sdk/ai/azure-ai-agents-persistent/pom.xml @@ -54,17 +54,17 @@ Code generated by Microsoft (R) TypeSpec Code Generator. com.azure azure-core - 1.61.0-beta.1 + 1.60.0 com.azure azure-core-http-netty - 1.17.0-beta.1 + 1.16.8 com.azure azure-core-test - 1.27.0-beta.20 + 1.27.0-beta.19 test diff --git a/sdk/ai/azure-ai-inference/pom.xml b/sdk/ai/azure-ai-inference/pom.xml index e31f9fa92fc7b..a4aa032559149 100644 --- a/sdk/ai/azure-ai-inference/pom.xml +++ b/sdk/ai/azure-ai-inference/pom.xml @@ -66,19 +66,19 @@ com.azure azure-core - 1.61.0-beta.1 + 1.60.0 com.azure azure-core-http-netty - 1.17.0-beta.1 + 1.16.8 com.azure azure-core-test - 1.27.0-beta.20 + 1.27.0-beta.19 com.azure diff --git a/sdk/ai/azure-ai-projects/pom.xml b/sdk/ai/azure-ai-projects/pom.xml index ac437a261dbc9..79ad6081be671 100644 --- a/sdk/ai/azure-ai-projects/pom.xml +++ b/sdk/ai/azure-ai-projects/pom.xml @@ -58,12 +58,12 @@ Code generated by Microsoft (R) TypeSpec Code Generator. com.azure azure-core - 1.61.0-beta.1 + 1.60.0 com.azure azure-core-http-netty - 1.17.0-beta.1 + 1.16.8 com.azure @@ -92,7 +92,7 @@ Code generated by Microsoft (R) TypeSpec Code Generator. com.azure azure-core-test - 1.27.0-beta.20 + 1.27.0-beta.19 test diff --git a/sdk/anomalydetector/azure-ai-anomalydetector/pom.xml b/sdk/anomalydetector/azure-ai-anomalydetector/pom.xml index 6194db40ae0ee..af9b4eeb0f4fa 100644 --- a/sdk/anomalydetector/azure-ai-anomalydetector/pom.xml +++ b/sdk/anomalydetector/azure-ai-anomalydetector/pom.xml @@ -47,19 +47,19 @@ com.azure azure-core - 1.61.0-beta.1 + 1.60.0 com.azure azure-core-http-netty - 1.17.0-beta.1 + 1.16.8 com.azure azure-core-test - 1.27.0-beta.20 + 1.27.0-beta.19 test diff --git a/sdk/appconfiguration/azure-data-appconfiguration-perf/pom.xml b/sdk/appconfiguration/azure-data-appconfiguration-perf/pom.xml index 7db96778ca18c..a6784e37dfa22 100644 --- a/sdk/appconfiguration/azure-data-appconfiguration-perf/pom.xml +++ b/sdk/appconfiguration/azure-data-appconfiguration-perf/pom.xml @@ -38,12 +38,12 @@ com.azure azure-core - 1.61.0-beta.1 + 1.60.0 com.azure azure-core-http-netty - 1.17.0-beta.1 + 1.16.8 diff --git a/sdk/appconfiguration/azure-data-appconfiguration/pom.xml b/sdk/appconfiguration/azure-data-appconfiguration/pom.xml index 3cad49fee805d..3ad59a4ae237a 100644 --- a/sdk/appconfiguration/azure-data-appconfiguration/pom.xml +++ b/sdk/appconfiguration/azure-data-appconfiguration/pom.xml @@ -52,7 +52,7 @@ com.azure azure-core - 1.61.0-beta.1 + 1.60.0 com.azure @@ -62,13 +62,13 @@ com.azure azure-core-http-netty - 1.17.0-beta.1 + 1.16.8 com.azure azure-core-test - 1.27.0-beta.20 + 1.27.0-beta.19 test diff --git a/sdk/appplatform/azure-resourcemanager-appplatform/pom.xml b/sdk/appplatform/azure-resourcemanager-appplatform/pom.xml index 7fa839a55a5cf..eb2f7509f03f0 100644 --- a/sdk/appplatform/azure-resourcemanager-appplatform/pom.xml +++ b/sdk/appplatform/azure-resourcemanager-appplatform/pom.xml @@ -97,7 +97,7 @@ com.azure azure-core-http-netty - 1.17.0-beta.1 + 1.16.8 test diff --git a/sdk/authorization/azure-resourcemanager-authorization/pom.xml b/sdk/authorization/azure-resourcemanager-authorization/pom.xml index 63f655fd789f8..42985faf75ae8 100644 --- a/sdk/authorization/azure-resourcemanager-authorization/pom.xml +++ b/sdk/authorization/azure-resourcemanager-authorization/pom.xml @@ -83,7 +83,7 @@ com.azure azure-core-http-netty - 1.17.0-beta.1 + 1.16.8 test diff --git a/sdk/batch/azure-compute-batch/pom.xml b/sdk/batch/azure-compute-batch/pom.xml index 6855b9960c0b3..01149e838e993 100644 --- a/sdk/batch/azure-compute-batch/pom.xml +++ b/sdk/batch/azure-compute-batch/pom.xml @@ -57,12 +57,12 @@ com.azure azure-core - 1.61.0-beta.1 + 1.60.0 com.azure azure-core-http-netty - 1.17.0-beta.1 + 1.16.8 com.azure @@ -73,7 +73,7 @@ com.azure azure-core-test - 1.27.0-beta.20 + 1.27.0-beta.19 test diff --git a/sdk/cdn/azure-resourcemanager-cdn/pom.xml b/sdk/cdn/azure-resourcemanager-cdn/pom.xml index d6670b1c54dff..86161aae3aa05 100644 --- a/sdk/cdn/azure-resourcemanager-cdn/pom.xml +++ b/sdk/cdn/azure-resourcemanager-cdn/pom.xml @@ -100,7 +100,7 @@ com.azure azure-core-http-netty - 1.17.0-beta.1 + 1.16.8 test diff --git a/sdk/communication/azure-communication-callautomation/pom.xml b/sdk/communication/azure-communication-callautomation/pom.xml index 822cf6b23474b..fdceaf21846a7 100644 --- a/sdk/communication/azure-communication-callautomation/pom.xml +++ b/sdk/communication/azure-communication-callautomation/pom.xml @@ -57,12 +57,12 @@ com.azure azure-core - 1.61.0-beta.1 + 1.60.0 com.azure azure-core-http-netty - 1.17.0-beta.1 + 1.16.8 com.azure @@ -84,7 +84,7 @@ com.azure azure-core-test - 1.27.0-beta.20 + 1.27.0-beta.19 test diff --git a/sdk/communication/azure-communication-callingserver/pom.xml b/sdk/communication/azure-communication-callingserver/pom.xml index 4da49e391bbf2..8535869eeb829 100644 --- a/sdk/communication/azure-communication-callingserver/pom.xml +++ b/sdk/communication/azure-communication-callingserver/pom.xml @@ -56,12 +56,12 @@ com.azure azure-core - 1.61.0-beta.1 + 1.60.0 com.azure azure-core-http-netty - 1.17.0-beta.1 + 1.16.8 com.azure @@ -77,7 +77,7 @@ com.azure azure-core-test - 1.27.0-beta.20 + 1.27.0-beta.19 test diff --git a/sdk/communication/azure-communication-chat/pom.xml b/sdk/communication/azure-communication-chat/pom.xml index 74b91e713ae6f..76fa2d9d8e42f 100644 --- a/sdk/communication/azure-communication-chat/pom.xml +++ b/sdk/communication/azure-communication-chat/pom.xml @@ -52,12 +52,12 @@ com.azure azure-core - 1.61.0-beta.1 + 1.60.0 com.azure azure-core-http-netty - 1.17.0-beta.1 + 1.16.8 com.azure @@ -73,7 +73,7 @@ com.azure azure-core-test - 1.27.0-beta.20 + 1.27.0-beta.19 test diff --git a/sdk/communication/azure-communication-common-perf/pom.xml b/sdk/communication/azure-communication-common-perf/pom.xml index 2b7b31a83e363..ab1fa34ef4aeb 100644 --- a/sdk/communication/azure-communication-common-perf/pom.xml +++ b/sdk/communication/azure-communication-common-perf/pom.xml @@ -39,18 +39,18 @@ com.azure azure-core - 1.61.0-beta.1 + 1.60.0 com.azure azure-core-http-netty - 1.17.0-beta.1 + 1.16.8 com.azure azure-core-test - 1.27.0-beta.20 + 1.27.0-beta.19 diff --git a/sdk/communication/azure-communication-common/pom.xml b/sdk/communication/azure-communication-common/pom.xml index be7e29ba1ff2f..0cc51b76fa699 100644 --- a/sdk/communication/azure-communication-common/pom.xml +++ b/sdk/communication/azure-communication-common/pom.xml @@ -48,12 +48,12 @@ com.azure azure-core - 1.61.0-beta.1 + 1.60.0 com.azure azure-core-http-netty - 1.17.0-beta.1 + 1.16.8 compile @@ -89,7 +89,7 @@ com.azure azure-core-test - 1.27.0-beta.20 + 1.27.0-beta.19 test diff --git a/sdk/communication/azure-communication-email/pom.xml b/sdk/communication/azure-communication-email/pom.xml index db6a9cb3d3598..56ffef89d7a63 100644 --- a/sdk/communication/azure-communication-email/pom.xml +++ b/sdk/communication/azure-communication-email/pom.xml @@ -57,12 +57,12 @@ com.azure azure-core - 1.61.0-beta.1 + 1.60.0 com.azure azure-core-http-netty - 1.17.0-beta.1 + 1.16.8 com.azure @@ -74,7 +74,7 @@ com.azure azure-core-test - 1.27.0-beta.20 + 1.27.0-beta.19 test diff --git a/sdk/communication/azure-communication-identity/pom.xml b/sdk/communication/azure-communication-identity/pom.xml index 31b399a0225a6..69f46b9be9a09 100644 --- a/sdk/communication/azure-communication-identity/pom.xml +++ b/sdk/communication/azure-communication-identity/pom.xml @@ -65,12 +65,12 @@ com.azure azure-core - 1.61.0-beta.1 + 1.60.0 com.azure azure-core-http-netty - 1.17.0-beta.1 + 1.16.8 com.azure @@ -86,7 +86,7 @@ com.azure azure-core-test - 1.27.0-beta.20 + 1.27.0-beta.19 test diff --git a/sdk/communication/azure-communication-jobrouter/pom.xml b/sdk/communication/azure-communication-jobrouter/pom.xml index 9e11a83625464..810722db9d86c 100644 --- a/sdk/communication/azure-communication-jobrouter/pom.xml +++ b/sdk/communication/azure-communication-jobrouter/pom.xml @@ -53,7 +53,7 @@ com.azure azure-core - 1.61.0-beta.1 + 1.60.0 com.azure @@ -63,12 +63,12 @@ com.azure azure-core-http-netty - 1.17.0-beta.1 + 1.16.8 com.azure azure-core-test - 1.27.0-beta.20 + 1.27.0-beta.19 test @@ -100,20 +100,6 @@ - - org.apache.maven.plugins - maven-enforcer-plugin - 3.6.3 - - - - - com.azure:* - - - - - diff --git a/sdk/communication/azure-communication-messages/pom.xml b/sdk/communication/azure-communication-messages/pom.xml index d05c25743f0a4..56c9a6c777e58 100644 --- a/sdk/communication/azure-communication-messages/pom.xml +++ b/sdk/communication/azure-communication-messages/pom.xml @@ -58,7 +58,7 @@ com.azure azure-core - 1.61.0-beta.1 + 1.60.0 com.azure @@ -68,12 +68,12 @@ com.azure azure-core-http-netty - 1.17.0-beta.1 + 1.16.8 com.azure azure-core-test - 1.27.0-beta.20 + 1.27.0-beta.19 test diff --git a/sdk/communication/azure-communication-phonenumbers/pom.xml b/sdk/communication/azure-communication-phonenumbers/pom.xml index 7838691b15622..295b5b7e855d9 100644 --- a/sdk/communication/azure-communication-phonenumbers/pom.xml +++ b/sdk/communication/azure-communication-phonenumbers/pom.xml @@ -65,12 +65,12 @@ com.azure azure-core - 1.61.0-beta.1 + 1.60.0 com.azure azure-core-http-netty - 1.17.0-beta.1 + 1.16.8 com.azure @@ -86,7 +86,7 @@ com.azure azure-core-test - 1.27.0-beta.20 + 1.27.0-beta.19 test diff --git a/sdk/communication/azure-communication-rooms/pom.xml b/sdk/communication/azure-communication-rooms/pom.xml index 4536863f4ef3b..4e2db19540024 100644 --- a/sdk/communication/azure-communication-rooms/pom.xml +++ b/sdk/communication/azure-communication-rooms/pom.xml @@ -59,12 +59,12 @@ com.azure azure-core - 1.61.0-beta.1 + 1.60.0 com.azure azure-core-http-netty - 1.17.0-beta.1 + 1.16.8 com.azure @@ -80,7 +80,7 @@ com.azure azure-core-test - 1.27.0-beta.20 + 1.27.0-beta.19 test diff --git a/sdk/compute/azure-resourcemanager-compute/pom.xml b/sdk/compute/azure-resourcemanager-compute/pom.xml index c98dc97ab2e35..a93cac23b976a 100644 --- a/sdk/compute/azure-resourcemanager-compute/pom.xml +++ b/sdk/compute/azure-resourcemanager-compute/pom.xml @@ -114,7 +114,7 @@ com.azure azure-core-http-netty - 1.17.0-beta.1 + 1.16.8 test diff --git a/sdk/confidentialledger/azure-security-confidentialledger/pom.xml b/sdk/confidentialledger/azure-security-confidentialledger/pom.xml index be8f3c9d556f7..55004dc857428 100644 --- a/sdk/confidentialledger/azure-security-confidentialledger/pom.xml +++ b/sdk/confidentialledger/azure-security-confidentialledger/pom.xml @@ -55,19 +55,19 @@ com.azure azure-core - 1.61.0-beta.1 + 1.60.0 com.azure azure-core-http-netty - 1.17.0-beta.1 + 1.16.8 com.azure azure-core-test - 1.27.0-beta.20 + 1.27.0-beta.19 test diff --git a/sdk/containerinstance/azure-resourcemanager-containerinstance/pom.xml b/sdk/containerinstance/azure-resourcemanager-containerinstance/pom.xml index 1405de2ceebf5..28d8260418b6e 100644 --- a/sdk/containerinstance/azure-resourcemanager-containerinstance/pom.xml +++ b/sdk/containerinstance/azure-resourcemanager-containerinstance/pom.xml @@ -114,7 +114,7 @@ com.azure azure-core-http-netty - 1.17.0-beta.1 + 1.16.8 test diff --git a/sdk/containerregistry/azure-containers-containerregistry-perf/pom.xml b/sdk/containerregistry/azure-containers-containerregistry-perf/pom.xml index 22d5a948ebff4..9b1df0eeff452 100644 --- a/sdk/containerregistry/azure-containers-containerregistry-perf/pom.xml +++ b/sdk/containerregistry/azure-containers-containerregistry-perf/pom.xml @@ -36,12 +36,12 @@ com.azure azure-core - 1.61.0-beta.1 + 1.60.0 com.azure azure-core-http-netty - 1.17.0-beta.1 + 1.16.8 diff --git a/sdk/containerregistry/azure-containers-containerregistry/pom.xml b/sdk/containerregistry/azure-containers-containerregistry/pom.xml index 00b5756382a6d..4b07982129df3 100644 --- a/sdk/containerregistry/azure-containers-containerregistry/pom.xml +++ b/sdk/containerregistry/azure-containers-containerregistry/pom.xml @@ -48,7 +48,7 @@ com.azure azure-core - 1.61.0-beta.1 + 1.60.0 com.azure @@ -58,12 +58,12 @@ com.azure azure-core-http-netty - 1.17.0-beta.1 + 1.16.8 com.azure azure-core-test - 1.27.0-beta.20 + 1.27.0-beta.19 test diff --git a/sdk/containerregistry/azure-resourcemanager-containerregistry/pom.xml b/sdk/containerregistry/azure-resourcemanager-containerregistry/pom.xml index 23ae3bd0dddf9..dac0910a67dab 100644 --- a/sdk/containerregistry/azure-resourcemanager-containerregistry/pom.xml +++ b/sdk/containerregistry/azure-resourcemanager-containerregistry/pom.xml @@ -78,7 +78,7 @@ com.azure azure-core-http-netty - 1.17.0-beta.1 + 1.16.8 test diff --git a/sdk/containerservice/azure-resourcemanager-containerservice/pom.xml b/sdk/containerservice/azure-resourcemanager-containerservice/pom.xml index 219e752314465..17895e21e3c78 100644 --- a/sdk/containerservice/azure-resourcemanager-containerservice/pom.xml +++ b/sdk/containerservice/azure-resourcemanager-containerservice/pom.xml @@ -79,7 +79,7 @@ com.azure azure-core-http-netty - 1.17.0-beta.1 + 1.16.8 test diff --git a/sdk/contentsafety/azure-ai-contentsafety/pom.xml b/sdk/contentsafety/azure-ai-contentsafety/pom.xml index 93651feab586e..5fe3510a7e1f5 100644 --- a/sdk/contentsafety/azure-ai-contentsafety/pom.xml +++ b/sdk/contentsafety/azure-ai-contentsafety/pom.xml @@ -52,17 +52,17 @@ com.azure azure-core - 1.61.0-beta.1 + 1.60.0 com.azure azure-core-http-netty - 1.17.0-beta.1 + 1.16.8 com.azure azure-core-test - 1.27.0-beta.20 + 1.27.0-beta.19 test diff --git a/sdk/contentunderstanding/azure-ai-contentunderstanding/pom.xml b/sdk/contentunderstanding/azure-ai-contentunderstanding/pom.xml index 7c133bd33149e..f31a47647b5ae 100644 --- a/sdk/contentunderstanding/azure-ai-contentunderstanding/pom.xml +++ b/sdk/contentunderstanding/azure-ai-contentunderstanding/pom.xml @@ -50,17 +50,17 @@ com.azure azure-core - 1.61.0-beta.1 + 1.60.0 com.azure azure-core-http-netty - 1.17.0-beta.1 + 1.16.8 com.azure azure-core-test - 1.27.0-beta.20 + 1.27.0-beta.19 test diff --git a/sdk/cosmos/azure-resourcemanager-cosmos/pom.xml b/sdk/cosmos/azure-resourcemanager-cosmos/pom.xml index 3855d04f47ece..febe68bb529be 100644 --- a/sdk/cosmos/azure-resourcemanager-cosmos/pom.xml +++ b/sdk/cosmos/azure-resourcemanager-cosmos/pom.xml @@ -92,7 +92,7 @@ com.azure azure-core-http-netty - 1.17.0-beta.1 + 1.16.8 test diff --git a/sdk/devcenter/azure-developer-devcenter/pom.xml b/sdk/devcenter/azure-developer-devcenter/pom.xml index b5a8117ddef6d..9dbfccaeced14 100644 --- a/sdk/devcenter/azure-developer-devcenter/pom.xml +++ b/sdk/devcenter/azure-developer-devcenter/pom.xml @@ -45,17 +45,17 @@ com.azure azure-core - 1.61.0-beta.1 + 1.60.0 com.azure azure-core-http-netty - 1.17.0-beta.1 + 1.16.8 com.azure azure-core-test - 1.27.0-beta.20 + 1.27.0-beta.19 test diff --git a/sdk/deviceregistry/azure-iot-deviceregistry-softwareupdate/pom.xml b/sdk/deviceregistry/azure-iot-deviceregistry-softwareupdate/pom.xml index 3b984ce756fb2..3b3290d056771 100644 --- a/sdk/deviceregistry/azure-iot-deviceregistry-softwareupdate/pom.xml +++ b/sdk/deviceregistry/azure-iot-deviceregistry-softwareupdate/pom.xml @@ -48,17 +48,17 @@ com.azure azure-core - 1.61.0-beta.1 + 1.60.0 com.azure azure-core-http-netty - 1.17.0-beta.1 + 1.16.8 com.azure azure-core-test - 1.27.0-beta.20 + 1.27.0-beta.19 test diff --git a/sdk/deviceupdate/azure-iot-deviceupdate/pom.xml b/sdk/deviceupdate/azure-iot-deviceupdate/pom.xml index 593c1e8cd475c..fa47432eaf9f0 100644 --- a/sdk/deviceupdate/azure-iot-deviceupdate/pom.xml +++ b/sdk/deviceupdate/azure-iot-deviceupdate/pom.xml @@ -41,12 +41,12 @@ com.azure azure-core - 1.61.0-beta.1 + 1.60.0 com.azure azure-core-http-netty - 1.17.0-beta.1 + 1.16.8 com.azure @@ -57,7 +57,7 @@ com.azure azure-core-test - 1.27.0-beta.20 + 1.27.0-beta.19 test diff --git a/sdk/digitaltwins/azure-digitaltwins-core/pom.xml b/sdk/digitaltwins/azure-digitaltwins-core/pom.xml index 586b8c163240e..3f513e847b8d3 100644 --- a/sdk/digitaltwins/azure-digitaltwins-core/pom.xml +++ b/sdk/digitaltwins/azure-digitaltwins-core/pom.xml @@ -47,12 +47,12 @@ com.azure azure-core - 1.61.0-beta.1 + 1.60.0 com.azure azure-core-http-netty - 1.17.0-beta.1 + 1.16.8 com.azure @@ -64,7 +64,7 @@ com.azure azure-core-test - 1.27.0-beta.20 + 1.27.0-beta.19 test diff --git a/sdk/discovery/azure-ai-discovery/pom.xml b/sdk/discovery/azure-ai-discovery/pom.xml index aa6ae7e8c2e2c..074288a6a708d 100644 --- a/sdk/discovery/azure-ai-discovery/pom.xml +++ b/sdk/discovery/azure-ai-discovery/pom.xml @@ -48,17 +48,17 @@ com.azure azure-core - 1.61.0-beta.1 + 1.60.0 com.azure azure-core-http-netty - 1.17.0-beta.1 + 1.16.8 com.azure azure-core-test - 1.27.0-beta.20 + 1.27.0-beta.19 test diff --git a/sdk/dns/azure-resourcemanager-dns/pom.xml b/sdk/dns/azure-resourcemanager-dns/pom.xml index a1c44bd3acbaf..bbc53e0a53d1e 100644 --- a/sdk/dns/azure-resourcemanager-dns/pom.xml +++ b/sdk/dns/azure-resourcemanager-dns/pom.xml @@ -87,7 +87,7 @@ com.azure azure-core-http-netty - 1.17.0-beta.1 + 1.16.8 test diff --git a/sdk/documentintelligence/azure-ai-documentintelligence/pom.xml b/sdk/documentintelligence/azure-ai-documentintelligence/pom.xml index e803892416532..5ce21a8a2252a 100644 --- a/sdk/documentintelligence/azure-ai-documentintelligence/pom.xml +++ b/sdk/documentintelligence/azure-ai-documentintelligence/pom.xml @@ -48,19 +48,19 @@ com.azure azure-core - 1.61.0-beta.1 + 1.60.0 com.azure azure-core-http-netty - 1.17.0-beta.1 + 1.16.8 com.azure azure-core-test - 1.27.0-beta.20 + 1.27.0-beta.19 test diff --git a/sdk/easm/azure-analytics-defender-easm/pom.xml b/sdk/easm/azure-analytics-defender-easm/pom.xml index e0fc7bb0d064d..2e26360614d66 100644 --- a/sdk/easm/azure-analytics-defender-easm/pom.xml +++ b/sdk/easm/azure-analytics-defender-easm/pom.xml @@ -51,17 +51,17 @@ com.azure azure-core - 1.61.0-beta.1 + 1.60.0 com.azure azure-core-http-netty - 1.17.0-beta.1 + 1.16.8 com.azure azure-core-test - 1.27.0-beta.20 + 1.27.0-beta.19 test diff --git a/sdk/eventgrid/azure-messaging-eventgrid-namespaces/pom.xml b/sdk/eventgrid/azure-messaging-eventgrid-namespaces/pom.xml index bd7ec7127aac6..1d57287074fd6 100644 --- a/sdk/eventgrid/azure-messaging-eventgrid-namespaces/pom.xml +++ b/sdk/eventgrid/azure-messaging-eventgrid-namespaces/pom.xml @@ -55,17 +55,17 @@ Code generated by Microsoft (R) TypeSpec Code Generator. com.azure azure-core - 1.61.0-beta.1 + 1.60.0 com.azure azure-core-http-netty - 1.17.0-beta.1 + 1.16.8 com.azure azure-core-test - 1.27.0-beta.20 + 1.27.0-beta.19 test diff --git a/sdk/eventgrid/azure-messaging-eventgrid/pom.xml b/sdk/eventgrid/azure-messaging-eventgrid/pom.xml index a0039f4217125..d25839adbde7d 100644 --- a/sdk/eventgrid/azure-messaging-eventgrid/pom.xml +++ b/sdk/eventgrid/azure-messaging-eventgrid/pom.xml @@ -73,7 +73,7 @@ com.azure azure-core - 1.61.0-beta.1 + 1.60.0 com.azure @@ -83,7 +83,7 @@ com.azure azure-core-http-netty - 1.17.0-beta.1 + 1.16.8 @@ -102,7 +102,7 @@ com.azure azure-core-test - 1.27.0-beta.20 + 1.27.0-beta.19 test diff --git a/sdk/eventhubs/azure-resourcemanager-eventhubs/pom.xml b/sdk/eventhubs/azure-resourcemanager-eventhubs/pom.xml index cb4f7969346ae..371ef0ac97b6f 100644 --- a/sdk/eventhubs/azure-resourcemanager-eventhubs/pom.xml +++ b/sdk/eventhubs/azure-resourcemanager-eventhubs/pom.xml @@ -81,7 +81,7 @@ com.azure azure-core-http-netty - 1.17.0-beta.1 + 1.16.8 test diff --git a/sdk/face/azure-ai-vision-face/pom.xml b/sdk/face/azure-ai-vision-face/pom.xml index fc5d050561020..dab63c57245d4 100644 --- a/sdk/face/azure-ai-vision-face/pom.xml +++ b/sdk/face/azure-ai-vision-face/pom.xml @@ -57,12 +57,12 @@ com.azure azure-core - 1.61.0-beta.1 + 1.60.0 com.azure azure-core-http-netty - 1.17.0-beta.1 + 1.16.8 com.azure @@ -72,7 +72,7 @@ com.azure azure-core-test - 1.27.0-beta.20 + 1.27.0-beta.19 test diff --git a/sdk/formrecognizer/azure-ai-formrecognizer-perf/pom.xml b/sdk/formrecognizer/azure-ai-formrecognizer-perf/pom.xml index 5dbf80693588f..553f2ecb37890 100644 --- a/sdk/formrecognizer/azure-ai-formrecognizer-perf/pom.xml +++ b/sdk/formrecognizer/azure-ai-formrecognizer-perf/pom.xml @@ -36,12 +36,12 @@ com.azure azure-core - 1.61.0-beta.1 + 1.60.0 com.azure azure-core-http-netty - 1.17.0-beta.1 + 1.16.8 diff --git a/sdk/formrecognizer/azure-ai-formrecognizer/pom.xml b/sdk/formrecognizer/azure-ai-formrecognizer/pom.xml index 28d289ded6275..fc5cf14fa4c7a 100644 --- a/sdk/formrecognizer/azure-ai-formrecognizer/pom.xml +++ b/sdk/formrecognizer/azure-ai-formrecognizer/pom.xml @@ -53,19 +53,19 @@ com.azure azure-core - 1.61.0-beta.1 + 1.60.0 com.azure azure-core-http-netty - 1.17.0-beta.1 + 1.16.8 com.azure azure-core-test - 1.27.0-beta.20 + 1.27.0-beta.19 test diff --git a/sdk/healthdataaiservices/azure-health-deidentification/pom.xml b/sdk/healthdataaiservices/azure-health-deidentification/pom.xml index ed6022768236c..95cb39b9fa233 100644 --- a/sdk/healthdataaiservices/azure-health-deidentification/pom.xml +++ b/sdk/healthdataaiservices/azure-health-deidentification/pom.xml @@ -51,17 +51,17 @@ Code generated by Microsoft (R) TypeSpec Code Generator. com.azure azure-core - 1.61.0-beta.1 + 1.60.0 com.azure azure-core-http-netty - 1.17.0-beta.1 + 1.16.8 com.azure azure-core-test - 1.27.0-beta.20 + 1.27.0-beta.19 test diff --git a/sdk/healthinsights/azure-health-insights-cancerprofiling/pom.xml b/sdk/healthinsights/azure-health-insights-cancerprofiling/pom.xml index 35e4e61e55bd1..15b34184543b9 100644 --- a/sdk/healthinsights/azure-health-insights-cancerprofiling/pom.xml +++ b/sdk/healthinsights/azure-health-insights-cancerprofiling/pom.xml @@ -59,17 +59,17 @@ com.azure azure-core - 1.61.0-beta.1 + 1.60.0 com.azure azure-core-http-netty - 1.17.0-beta.1 + 1.16.8 com.azure azure-core-test - 1.27.0-beta.20 + 1.27.0-beta.19 test diff --git a/sdk/healthinsights/azure-health-insights-clinicalmatching/pom.xml b/sdk/healthinsights/azure-health-insights-clinicalmatching/pom.xml index 762632286c443..f370c5b95264f 100644 --- a/sdk/healthinsights/azure-health-insights-clinicalmatching/pom.xml +++ b/sdk/healthinsights/azure-health-insights-clinicalmatching/pom.xml @@ -59,17 +59,17 @@ com.azure azure-core - 1.61.0-beta.1 + 1.60.0 com.azure azure-core-http-netty - 1.17.0-beta.1 + 1.16.8 com.azure azure-core-test - 1.27.0-beta.20 + 1.27.0-beta.19 test diff --git a/sdk/healthinsights/azure-health-insights-radiologyinsights/pom.xml b/sdk/healthinsights/azure-health-insights-radiologyinsights/pom.xml index 0d30e052b6dbe..c73330991810a 100644 --- a/sdk/healthinsights/azure-health-insights-radiologyinsights/pom.xml +++ b/sdk/healthinsights/azure-health-insights-radiologyinsights/pom.xml @@ -56,17 +56,17 @@ com.azure azure-core - 1.61.0-beta.1 + 1.60.0 com.azure azure-core-http-netty - 1.17.0-beta.1 + 1.16.8 com.azure azure-core-test - 1.27.0-beta.20 + 1.27.0-beta.19 test diff --git a/sdk/identity/azure-identity-perf/pom.xml b/sdk/identity/azure-identity-perf/pom.xml index 1a39874c27850..d6ccb760b9afa 100644 --- a/sdk/identity/azure-identity-perf/pom.xml +++ b/sdk/identity/azure-identity-perf/pom.xml @@ -36,13 +36,13 @@ com.azure azure-core - 1.61.0-beta.1 + 1.60.0 com.azure azure-core-http-netty - 1.17.0-beta.1 + 1.16.8 diff --git a/sdk/identity/azure-identity/pom.xml b/sdk/identity/azure-identity/pom.xml index 4b7c7e2a5b716..4a1745917df6b 100644 --- a/sdk/identity/azure-identity/pom.xml +++ b/sdk/identity/azure-identity/pom.xml @@ -36,13 +36,13 @@ com.azure azure-core - 1.61.0-beta.1 + 1.60.0 com.azure azure-core-http-netty - 1.17.0-beta.1 + 1.16.8 @@ -63,7 +63,7 @@ com.azure azure-core-test - 1.27.0-beta.20 + 1.27.0-beta.19 test diff --git a/sdk/keyvault/azure-resourcemanager-keyvault/pom.xml b/sdk/keyvault/azure-resourcemanager-keyvault/pom.xml index 1c85047b8c58f..7ca05bd41b459 100644 --- a/sdk/keyvault/azure-resourcemanager-keyvault/pom.xml +++ b/sdk/keyvault/azure-resourcemanager-keyvault/pom.xml @@ -103,7 +103,7 @@ com.azure azure-core-http-netty - 1.17.0-beta.1 + 1.16.8 test diff --git a/sdk/keyvault/azure-security-keyvault-administration/pom.xml b/sdk/keyvault/azure-security-keyvault-administration/pom.xml index fade059ccf3e8..12fef354e0574 100644 --- a/sdk/keyvault/azure-security-keyvault-administration/pom.xml +++ b/sdk/keyvault/azure-security-keyvault-administration/pom.xml @@ -50,7 +50,7 @@ com.azure azure-core - 1.61.0-beta.1 + 1.60.0 com.azure @@ -60,13 +60,13 @@ com.azure azure-core-http-netty - 1.17.0-beta.1 + 1.16.8 com.azure azure-core-test - 1.27.0-beta.20 + 1.27.0-beta.19 test diff --git a/sdk/keyvault/azure-security-keyvault-certificates/pom.xml b/sdk/keyvault/azure-security-keyvault-certificates/pom.xml index 6814e1bfdc8c6..042eac1b7959d 100644 --- a/sdk/keyvault/azure-security-keyvault-certificates/pom.xml +++ b/sdk/keyvault/azure-security-keyvault-certificates/pom.xml @@ -49,7 +49,7 @@ com.azure azure-core - 1.61.0-beta.1 + 1.60.0 com.azure @@ -60,14 +60,14 @@ com.azure azure-core-http-netty - 1.17.0-beta.1 + 1.16.8 com.azure azure-core-test - 1.27.0-beta.20 + 1.27.0-beta.19 test diff --git a/sdk/keyvault/azure-security-keyvault-keys/pom.xml b/sdk/keyvault/azure-security-keyvault-keys/pom.xml index 62eb4a251f514..3b14bda0ae8b1 100644 --- a/sdk/keyvault/azure-security-keyvault-keys/pom.xml +++ b/sdk/keyvault/azure-security-keyvault-keys/pom.xml @@ -52,7 +52,7 @@ com.azure azure-core - 1.61.0-beta.1 + 1.60.0 @@ -64,14 +64,14 @@ com.azure azure-core-http-netty - 1.17.0-beta.1 + 1.16.8 com.azure azure-core-test - 1.27.0-beta.20 + 1.27.0-beta.19 test diff --git a/sdk/keyvault/azure-security-keyvault-perf/pom.xml b/sdk/keyvault/azure-security-keyvault-perf/pom.xml index 1e47154c96299..8a6af04e91b68 100644 --- a/sdk/keyvault/azure-security-keyvault-perf/pom.xml +++ b/sdk/keyvault/azure-security-keyvault-perf/pom.xml @@ -46,7 +46,7 @@ com.azure azure-core-test - 1.27.0-beta.20 + 1.27.0-beta.19 com.azure @@ -57,12 +57,12 @@ com.azure azure-core - 1.61.0-beta.1 + 1.60.0 com.azure azure-core-http-netty - 1.17.0-beta.1 + 1.16.8 diff --git a/sdk/keyvault/azure-security-keyvault-secrets/pom.xml b/sdk/keyvault/azure-security-keyvault-secrets/pom.xml index 3a70991501f94..71d8fb5d385c7 100644 --- a/sdk/keyvault/azure-security-keyvault-secrets/pom.xml +++ b/sdk/keyvault/azure-security-keyvault-secrets/pom.xml @@ -48,7 +48,7 @@ com.azure azure-core - 1.61.0-beta.1 + 1.60.0 @@ -60,14 +60,14 @@ com.azure azure-core-http-netty - 1.17.0-beta.1 + 1.16.8 com.azure azure-core-test - 1.27.0-beta.20 + 1.27.0-beta.19 test diff --git a/sdk/loadtesting/azure-developer-loadtesting/pom.xml b/sdk/loadtesting/azure-developer-loadtesting/pom.xml index 778aa44de94b5..1163eb2af32a1 100644 --- a/sdk/loadtesting/azure-developer-loadtesting/pom.xml +++ b/sdk/loadtesting/azure-developer-loadtesting/pom.xml @@ -45,17 +45,17 @@ com.azure azure-core - 1.61.0-beta.1 + 1.60.0 com.azure azure-core-http-netty - 1.17.0-beta.1 + 1.16.8 com.azure azure-core-test - 1.27.0-beta.20 + 1.27.0-beta.19 test diff --git a/sdk/maps/azure-maps-geolocation/pom.xml b/sdk/maps/azure-maps-geolocation/pom.xml index a766edff263c5..d4de9c45705cf 100644 --- a/sdk/maps/azure-maps-geolocation/pom.xml +++ b/sdk/maps/azure-maps-geolocation/pom.xml @@ -57,12 +57,12 @@ com.azure azure-core - 1.61.0-beta.1 + 1.60.0 com.azure azure-core-http-netty - 1.17.0-beta.1 + 1.16.8 com.azure @@ -73,7 +73,7 @@ com.azure azure-core-test - 1.27.0-beta.20 + 1.27.0-beta.19 test diff --git a/sdk/maps/azure-maps-render/pom.xml b/sdk/maps/azure-maps-render/pom.xml index 171ac6c838169..e7b009e083577 100644 --- a/sdk/maps/azure-maps-render/pom.xml +++ b/sdk/maps/azure-maps-render/pom.xml @@ -60,12 +60,12 @@ com.azure azure-core - 1.61.0-beta.1 + 1.60.0 com.azure azure-core-http-netty - 1.17.0-beta.1 + 1.16.8 com.azure @@ -76,7 +76,7 @@ com.azure azure-core-test - 1.27.0-beta.20 + 1.27.0-beta.19 test diff --git a/sdk/maps/azure-maps-route/pom.xml b/sdk/maps/azure-maps-route/pom.xml index be5c0bbd77bd5..03935b06adabb 100644 --- a/sdk/maps/azure-maps-route/pom.xml +++ b/sdk/maps/azure-maps-route/pom.xml @@ -58,12 +58,12 @@ com.azure azure-core - 1.61.0-beta.1 + 1.60.0 com.azure azure-core-http-netty - 1.17.0-beta.1 + 1.16.8 com.azure @@ -74,7 +74,7 @@ com.azure azure-core-test - 1.27.0-beta.20 + 1.27.0-beta.19 test diff --git a/sdk/maps/azure-maps-search/pom.xml b/sdk/maps/azure-maps-search/pom.xml index f59f21fbd5d5f..b7d82f84417f7 100644 --- a/sdk/maps/azure-maps-search/pom.xml +++ b/sdk/maps/azure-maps-search/pom.xml @@ -68,12 +68,12 @@ com.azure azure-core - 1.61.0-beta.1 + 1.60.0 com.azure azure-core-http-netty - 1.17.0-beta.1 + 1.16.8 com.azure @@ -84,7 +84,7 @@ com.azure azure-core-test - 1.27.0-beta.20 + 1.27.0-beta.19 test diff --git a/sdk/maps/azure-maps-timezone/pom.xml b/sdk/maps/azure-maps-timezone/pom.xml index 337f45a08e22e..788e41e3f858b 100644 --- a/sdk/maps/azure-maps-timezone/pom.xml +++ b/sdk/maps/azure-maps-timezone/pom.xml @@ -62,12 +62,12 @@ com.azure azure-core - 1.61.0-beta.1 + 1.60.0 com.azure azure-core-http-netty - 1.17.0-beta.1 + 1.16.8 com.azure @@ -78,7 +78,7 @@ com.azure azure-core-test - 1.27.0-beta.20 + 1.27.0-beta.19 test diff --git a/sdk/maps/azure-maps-traffic/pom.xml b/sdk/maps/azure-maps-traffic/pom.xml index 656ae38308591..bb83ff79238b4 100644 --- a/sdk/maps/azure-maps-traffic/pom.xml +++ b/sdk/maps/azure-maps-traffic/pom.xml @@ -54,12 +54,12 @@ com.azure azure-core - 1.61.0-beta.1 + 1.60.0 com.azure azure-core-http-netty - 1.17.0-beta.1 + 1.16.8 com.azure @@ -70,7 +70,7 @@ com.azure azure-core-test - 1.27.0-beta.20 + 1.27.0-beta.19 test diff --git a/sdk/maps/azure-maps-weather/pom.xml b/sdk/maps/azure-maps-weather/pom.xml index ed5e752f03ad5..f6657c243a7cc 100644 --- a/sdk/maps/azure-maps-weather/pom.xml +++ b/sdk/maps/azure-maps-weather/pom.xml @@ -61,12 +61,12 @@ com.azure azure-core - 1.61.0-beta.1 + 1.60.0 com.azure azure-core-http-netty - 1.17.0-beta.1 + 1.16.8 com.azure @@ -77,7 +77,7 @@ com.azure azure-core-test - 1.27.0-beta.20 + 1.27.0-beta.19 test diff --git a/sdk/metricsadvisor/azure-ai-metricsadvisor-perf/pom.xml b/sdk/metricsadvisor/azure-ai-metricsadvisor-perf/pom.xml index d47faf7dd11c6..b1b5afaa0e61e 100644 --- a/sdk/metricsadvisor/azure-ai-metricsadvisor-perf/pom.xml +++ b/sdk/metricsadvisor/azure-ai-metricsadvisor-perf/pom.xml @@ -35,12 +35,12 @@ com.azure azure-core - 1.61.0-beta.1 + 1.60.0 com.azure azure-core-http-netty - 1.17.0-beta.1 + 1.16.8 diff --git a/sdk/metricsadvisor/azure-ai-metricsadvisor/pom.xml b/sdk/metricsadvisor/azure-ai-metricsadvisor/pom.xml index 0e6f7c80b61d2..a21cdf10ba051 100644 --- a/sdk/metricsadvisor/azure-ai-metricsadvisor/pom.xml +++ b/sdk/metricsadvisor/azure-ai-metricsadvisor/pom.xml @@ -47,12 +47,12 @@ com.azure azure-core - 1.61.0-beta.1 + 1.60.0 com.azure azure-core-http-netty - 1.17.0-beta.1 + 1.16.8 com.azure @@ -64,7 +64,7 @@ com.azure azure-core-test - 1.27.0-beta.20 + 1.27.0-beta.19 test diff --git a/sdk/modelsrepository/azure-iot-modelsrepository/pom.xml b/sdk/modelsrepository/azure-iot-modelsrepository/pom.xml index 225bf1529988f..4f2189c69cd80 100644 --- a/sdk/modelsrepository/azure-iot-modelsrepository/pom.xml +++ b/sdk/modelsrepository/azure-iot-modelsrepository/pom.xml @@ -53,19 +53,19 @@ com.azure azure-core - 1.61.0-beta.1 + 1.60.0 com.azure azure-core-http-netty - 1.17.0-beta.1 + 1.16.8 com.azure azure-core-test - 1.27.0-beta.20 + 1.27.0-beta.19 test diff --git a/sdk/monitor/azure-monitor-ingestion-perf/pom.xml b/sdk/monitor/azure-monitor-ingestion-perf/pom.xml index db7c9faaede5a..21396c2ec517f 100644 --- a/sdk/monitor/azure-monitor-ingestion-perf/pom.xml +++ b/sdk/monitor/azure-monitor-ingestion-perf/pom.xml @@ -42,12 +42,12 @@ com.azure azure-core - 1.61.0-beta.1 + 1.60.0 com.azure azure-core-http-netty - 1.17.0-beta.1 + 1.16.8 diff --git a/sdk/monitor/azure-monitor-ingestion/pom.xml b/sdk/monitor/azure-monitor-ingestion/pom.xml index 79dd33c431b95..1150d3067dc05 100644 --- a/sdk/monitor/azure-monitor-ingestion/pom.xml +++ b/sdk/monitor/azure-monitor-ingestion/pom.xml @@ -68,12 +68,12 @@ com.azure azure-core - 1.61.0-beta.1 + 1.60.0 com.azure azure-core-http-netty - 1.17.0-beta.1 + 1.16.8 com.azure @@ -85,7 +85,7 @@ com.azure azure-core-test - 1.27.0-beta.20 + 1.27.0-beta.19 test diff --git a/sdk/monitor/azure-monitor-opentelemetry-autoconfigure/pom.xml b/sdk/monitor/azure-monitor-opentelemetry-autoconfigure/pom.xml index c6c80b84ccaec..21acaf9209663 100644 --- a/sdk/monitor/azure-monitor-opentelemetry-autoconfigure/pom.xml +++ b/sdk/monitor/azure-monitor-opentelemetry-autoconfigure/pom.xml @@ -48,7 +48,7 @@ com.azure azure-core - 1.61.0-beta.1 + 1.60.0 com.azure @@ -58,7 +58,7 @@ com.azure azure-core-http-netty - 1.17.0-beta.1 + 1.16.8 io.opentelemetry @@ -155,7 +155,7 @@ com.azure azure-core-test - 1.27.0-beta.20 + 1.27.0-beta.19 test diff --git a/sdk/monitor/azure-monitor-opentelemetry-exporter/pom.xml b/sdk/monitor/azure-monitor-opentelemetry-exporter/pom.xml index 0eb6f9b42db94..584e53c9028eb 100644 --- a/sdk/monitor/azure-monitor-opentelemetry-exporter/pom.xml +++ b/sdk/monitor/azure-monitor-opentelemetry-exporter/pom.xml @@ -53,7 +53,7 @@ com.azure azure-core - 1.61.0-beta.1 + 1.60.0 com.azure @@ -63,7 +63,7 @@ com.azure azure-core-http-netty - 1.17.0-beta.1 + 1.16.8 io.opentelemetry @@ -165,7 +165,7 @@ com.azure azure-core-test - 1.27.0-beta.20 + 1.27.0-beta.19 test diff --git a/sdk/monitor/azure-monitor-query-logs/pom.xml b/sdk/monitor/azure-monitor-query-logs/pom.xml index ee476eee411e5..605dc09e84841 100644 --- a/sdk/monitor/azure-monitor-query-logs/pom.xml +++ b/sdk/monitor/azure-monitor-query-logs/pom.xml @@ -48,17 +48,17 @@ Code generated by Microsoft (R) TypeSpec Code Generator. com.azure azure-core - 1.61.0-beta.1 + 1.60.0 com.azure azure-core-http-netty - 1.17.0-beta.1 + 1.16.8 com.azure azure-core-test - 1.27.0-beta.20 + 1.27.0-beta.19 test diff --git a/sdk/monitor/azure-monitor-query-metrics/pom.xml b/sdk/monitor/azure-monitor-query-metrics/pom.xml index fb040c05abb9d..095c058bcaded 100644 --- a/sdk/monitor/azure-monitor-query-metrics/pom.xml +++ b/sdk/monitor/azure-monitor-query-metrics/pom.xml @@ -48,17 +48,17 @@ Code generated by Microsoft (R) TypeSpec Code Generator. com.azure azure-core - 1.61.0-beta.1 + 1.60.0 com.azure azure-core-http-netty - 1.17.0-beta.1 + 1.16.8 com.azure azure-core-test - 1.27.0-beta.20 + 1.27.0-beta.19 test diff --git a/sdk/monitor/azure-monitor-query-perf/pom.xml b/sdk/monitor/azure-monitor-query-perf/pom.xml index 01e0ed0333c89..b0337469bd0c7 100644 --- a/sdk/monitor/azure-monitor-query-perf/pom.xml +++ b/sdk/monitor/azure-monitor-query-perf/pom.xml @@ -42,12 +42,12 @@ com.azure azure-core - 1.61.0-beta.1 + 1.60.0 com.azure azure-core-http-netty - 1.17.0-beta.1 + 1.16.8 diff --git a/sdk/monitor/azure-monitor-query/pom.xml b/sdk/monitor/azure-monitor-query/pom.xml index 14f2fe384702d..c1e6f7c9db795 100644 --- a/sdk/monitor/azure-monitor-query/pom.xml +++ b/sdk/monitor/azure-monitor-query/pom.xml @@ -44,12 +44,12 @@ com.azure azure-core - 1.61.0-beta.1 + 1.60.0 com.azure azure-core-http-netty - 1.17.0-beta.1 + 1.16.8 com.azure @@ -65,7 +65,7 @@ com.azure azure-core-test - 1.27.0-beta.20 + 1.27.0-beta.19 test diff --git a/sdk/monitor/azure-resourcemanager-monitor/pom.xml b/sdk/monitor/azure-resourcemanager-monitor/pom.xml index 592d06fb80bb0..07b9253f8f36e 100644 --- a/sdk/monitor/azure-resourcemanager-monitor/pom.xml +++ b/sdk/monitor/azure-resourcemanager-monitor/pom.xml @@ -78,7 +78,7 @@ com.azure azure-core-http-netty - 1.17.0-beta.1 + 1.16.8 test diff --git a/sdk/msi/azure-resourcemanager-msi/pom.xml b/sdk/msi/azure-resourcemanager-msi/pom.xml index e3d7ac4f36e24..bc61506f2cbf8 100644 --- a/sdk/msi/azure-resourcemanager-msi/pom.xml +++ b/sdk/msi/azure-resourcemanager-msi/pom.xml @@ -78,7 +78,7 @@ com.azure azure-core-http-netty - 1.17.0-beta.1 + 1.16.8 test diff --git a/sdk/network/azure-resourcemanager-network/pom.xml b/sdk/network/azure-resourcemanager-network/pom.xml index f28dd6ab73722..e83804de49068 100644 --- a/sdk/network/azure-resourcemanager-network/pom.xml +++ b/sdk/network/azure-resourcemanager-network/pom.xml @@ -81,7 +81,7 @@ com.azure azure-core-http-netty - 1.17.0-beta.1 + 1.16.8 test diff --git a/sdk/onlineexperimentation/azure-analytics-onlineexperimentation/pom.xml b/sdk/onlineexperimentation/azure-analytics-onlineexperimentation/pom.xml index ec111559c5628..fcab6278a9c97 100644 --- a/sdk/onlineexperimentation/azure-analytics-onlineexperimentation/pom.xml +++ b/sdk/onlineexperimentation/azure-analytics-onlineexperimentation/pom.xml @@ -48,17 +48,17 @@ Code generated by Microsoft (R) TypeSpec Code Generator. com.azure azure-core - 1.61.0-beta.1 + 1.60.0 com.azure azure-core-http-netty - 1.17.0-beta.1 + 1.16.8 com.azure azure-core-test - 1.27.0-beta.20 + 1.27.0-beta.19 test diff --git a/sdk/openai/azure-ai-openai-assistants/pom.xml b/sdk/openai/azure-ai-openai-assistants/pom.xml index 8999d38793d8a..9bc87ba9e7327 100644 --- a/sdk/openai/azure-ai-openai-assistants/pom.xml +++ b/sdk/openai/azure-ai-openai-assistants/pom.xml @@ -63,12 +63,12 @@ com.azure azure-core - 1.61.0-beta.1 + 1.60.0 com.azure azure-core-http-netty - 1.17.0-beta.1 + 1.16.8 @@ -83,7 +83,7 @@ com.azure azure-core-test - 1.27.0-beta.20 + 1.27.0-beta.19 test diff --git a/sdk/openai/azure-ai-openai/pom.xml b/sdk/openai/azure-ai-openai/pom.xml index 10250bc8e06b4..3670ce47913a7 100644 --- a/sdk/openai/azure-ai-openai/pom.xml +++ b/sdk/openai/azure-ai-openai/pom.xml @@ -62,12 +62,12 @@ com.azure azure-core - 1.61.0-beta.1 + 1.60.0 com.azure azure-core-http-netty - 1.17.0-beta.1 + 1.16.8 @@ -82,7 +82,7 @@ com.azure azure-core-test - 1.27.0-beta.20 + 1.27.0-beta.19 test diff --git a/sdk/planetarycomputer/azure-analytics-planetarycomputer/pom.xml b/sdk/planetarycomputer/azure-analytics-planetarycomputer/pom.xml index caad613eaca9a..4c7ee66ebf301 100644 --- a/sdk/planetarycomputer/azure-analytics-planetarycomputer/pom.xml +++ b/sdk/planetarycomputer/azure-analytics-planetarycomputer/pom.xml @@ -54,17 +54,17 @@ Code generated by Microsoft (R) TypeSpec Code Generator. com.azure azure-core - 1.61.0-beta.1 + 1.60.0 com.azure azure-core-http-netty - 1.17.0-beta.1 + 1.16.8 com.azure azure-core-test - 1.27.0-beta.20 + 1.27.0-beta.19 test diff --git a/sdk/privatedns/azure-resourcemanager-privatedns/pom.xml b/sdk/privatedns/azure-resourcemanager-privatedns/pom.xml index af7251c62415d..06aa1227c2b47 100644 --- a/sdk/privatedns/azure-resourcemanager-privatedns/pom.xml +++ b/sdk/privatedns/azure-resourcemanager-privatedns/pom.xml @@ -84,7 +84,7 @@ com.azure azure-core-http-netty - 1.17.0-beta.1 + 1.16.8 test diff --git a/sdk/purview/azure-analytics-purview-administration/pom.xml b/sdk/purview/azure-analytics-purview-administration/pom.xml index 84e410d2bd57e..7f13bc62ff719 100644 --- a/sdk/purview/azure-analytics-purview-administration/pom.xml +++ b/sdk/purview/azure-analytics-purview-administration/pom.xml @@ -44,19 +44,19 @@ com.azure azure-core - 1.61.0-beta.1 + 1.60.0 com.azure azure-core-http-netty - 1.17.0-beta.1 + 1.16.8 com.azure azure-core-test - 1.27.0-beta.20 + 1.27.0-beta.19 test diff --git a/sdk/purview/azure-analytics-purview-datamap/pom.xml b/sdk/purview/azure-analytics-purview-datamap/pom.xml index 95e06e2028a69..aa027e4b8eeb2 100644 --- a/sdk/purview/azure-analytics-purview-datamap/pom.xml +++ b/sdk/purview/azure-analytics-purview-datamap/pom.xml @@ -52,12 +52,12 @@ com.azure azure-core - 1.61.0-beta.1 + 1.60.0 com.azure azure-core-http-netty - 1.17.0-beta.1 + 1.16.8 com.azure @@ -67,7 +67,7 @@ com.azure azure-core-test - 1.27.0-beta.20 + 1.27.0-beta.19 test diff --git a/sdk/purview/azure-analytics-purview-scanning/pom.xml b/sdk/purview/azure-analytics-purview-scanning/pom.xml index 2687c10d08b0d..e45c64890b1d2 100644 --- a/sdk/purview/azure-analytics-purview-scanning/pom.xml +++ b/sdk/purview/azure-analytics-purview-scanning/pom.xml @@ -44,19 +44,19 @@ com.azure azure-core - 1.61.0-beta.1 + 1.60.0 com.azure azure-core-http-netty - 1.17.0-beta.1 + 1.16.8 com.azure azure-core-test - 1.27.0-beta.20 + 1.27.0-beta.19 test diff --git a/sdk/purview/azure-analytics-purview-sharing/pom.xml b/sdk/purview/azure-analytics-purview-sharing/pom.xml index 0460c81910457..c9dbedb673451 100644 --- a/sdk/purview/azure-analytics-purview-sharing/pom.xml +++ b/sdk/purview/azure-analytics-purview-sharing/pom.xml @@ -51,17 +51,17 @@ com.azure azure-core - 1.61.0-beta.1 + 1.60.0 com.azure azure-core-http-netty - 1.17.0-beta.1 + 1.16.8 com.azure azure-core-test - 1.27.0-beta.20 + 1.27.0-beta.19 test diff --git a/sdk/purview/azure-analytics-purview-workflow/pom.xml b/sdk/purview/azure-analytics-purview-workflow/pom.xml index 915aa29c64064..8d3f22bd9ce36 100644 --- a/sdk/purview/azure-analytics-purview-workflow/pom.xml +++ b/sdk/purview/azure-analytics-purview-workflow/pom.xml @@ -53,17 +53,17 @@ com.azure azure-core - 1.61.0-beta.1 + 1.60.0 com.azure azure-core-http-netty - 1.17.0-beta.1 + 1.16.8 com.azure azure-core-test - 1.27.0-beta.20 + 1.27.0-beta.19 test diff --git a/sdk/quantum/azure-quantum-jobs/pom.xml b/sdk/quantum/azure-quantum-jobs/pom.xml index 209fb951a6e88..ef412a3a10ed8 100644 --- a/sdk/quantum/azure-quantum-jobs/pom.xml +++ b/sdk/quantum/azure-quantum-jobs/pom.xml @@ -52,12 +52,12 @@ com.azure azure-core - 1.61.0-beta.1 + 1.60.0 com.azure azure-core-http-netty - 1.17.0-beta.1 + 1.16.8 @@ -65,7 +65,7 @@ com.azure azure-core-test - 1.27.0-beta.20 + 1.27.0-beta.19 test diff --git a/sdk/redis/azure-resourcemanager-redis/pom.xml b/sdk/redis/azure-resourcemanager-redis/pom.xml index 1757fb6052de6..8a85f14346063 100644 --- a/sdk/redis/azure-resourcemanager-redis/pom.xml +++ b/sdk/redis/azure-resourcemanager-redis/pom.xml @@ -78,7 +78,7 @@ com.azure azure-core-http-netty - 1.17.0-beta.1 + 1.16.8 test diff --git a/sdk/resourcemanager/azure-resourcemanager-perf/pom.xml b/sdk/resourcemanager/azure-resourcemanager-perf/pom.xml index 56f1c1541a896..865bf846b0d8b 100644 --- a/sdk/resourcemanager/azure-resourcemanager-perf/pom.xml +++ b/sdk/resourcemanager/azure-resourcemanager-perf/pom.xml @@ -41,12 +41,12 @@ com.azure azure-core - 1.61.0-beta.1 + 1.60.0 com.azure azure-core-http-netty - 1.17.0-beta.1 + 1.16.8 diff --git a/sdk/resourcemanager/azure-resourcemanager-test/pom.xml b/sdk/resourcemanager/azure-resourcemanager-test/pom.xml index 2f3db1aec60e2..1e90bbed8adaa 100644 --- a/sdk/resourcemanager/azure-resourcemanager-test/pom.xml +++ b/sdk/resourcemanager/azure-resourcemanager-test/pom.xml @@ -52,12 +52,12 @@ com.azure azure-core-test - 1.27.0-beta.20 + 1.27.0-beta.19 com.azure azure-core - 1.61.0-beta.1 + 1.60.0 com.azure @@ -72,7 +72,7 @@ com.azure azure-core-http-netty - 1.17.0-beta.1 + 1.16.8 diff --git a/sdk/resourcemanager/azure-resourcemanager/pom.xml b/sdk/resourcemanager/azure-resourcemanager/pom.xml index be0ffb7c44210..1057f7a3a21e8 100644 --- a/sdk/resourcemanager/azure-resourcemanager/pom.xml +++ b/sdk/resourcemanager/azure-resourcemanager/pom.xml @@ -71,7 +71,7 @@ com.azure azure-core - 1.61.0-beta.1 + 1.60.0 com.azure @@ -225,7 +225,7 @@ com.azure azure-core-http-netty - 1.17.0-beta.1 + 1.16.8 test diff --git a/sdk/schemaregistry/azure-data-schemaregistry/pom.xml b/sdk/schemaregistry/azure-data-schemaregistry/pom.xml index 6048e9fbe501a..afceac61732a0 100644 --- a/sdk/schemaregistry/azure-data-schemaregistry/pom.xml +++ b/sdk/schemaregistry/azure-data-schemaregistry/pom.xml @@ -54,12 +54,12 @@ com.azure azure-core - 1.61.0-beta.1 + 1.60.0 com.azure azure-core-http-netty - 1.17.0-beta.1 + 1.16.8 @@ -72,7 +72,7 @@ com.azure azure-core-test - 1.27.0-beta.20 + 1.27.0-beta.19 test diff --git a/sdk/search/azure-resourcemanager-search/pom.xml b/sdk/search/azure-resourcemanager-search/pom.xml index f80b5dc07850b..26bfebd02dfb5 100644 --- a/sdk/search/azure-resourcemanager-search/pom.xml +++ b/sdk/search/azure-resourcemanager-search/pom.xml @@ -76,7 +76,7 @@ com.azure azure-core-http-netty - 1.17.0-beta.1 + 1.16.8 test diff --git a/sdk/search/azure-search-documents/pom.xml b/sdk/search/azure-search-documents/pom.xml index fe2077565cd1a..c442901f60e95 100644 --- a/sdk/search/azure-search-documents/pom.xml +++ b/sdk/search/azure-search-documents/pom.xml @@ -61,7 +61,7 @@ com.azure azure-core - 1.61.0-beta.1 + 1.60.0 com.azure @@ -71,7 +71,7 @@ com.azure azure-core-http-netty - 1.17.0-beta.1 + 1.16.8 + 1.27.0-beta.19 test diff --git a/sdk/search/azure-search-perf/pom.xml b/sdk/search/azure-search-perf/pom.xml index 458c3ef74aaf3..80b67425d6a37 100644 --- a/sdk/search/azure-search-perf/pom.xml +++ b/sdk/search/azure-search-perf/pom.xml @@ -35,12 +35,12 @@ com.azure azure-core - 1.61.0-beta.1 + 1.60.0 com.azure azure-core-http-netty - 1.17.0-beta.1 + 1.16.8 diff --git a/sdk/servicebus/azure-messaging-servicebus-track2-perf/pom.xml b/sdk/servicebus/azure-messaging-servicebus-track2-perf/pom.xml index 170c725d370d6..f0c53c55d9822 100644 --- a/sdk/servicebus/azure-messaging-servicebus-track2-perf/pom.xml +++ b/sdk/servicebus/azure-messaging-servicebus-track2-perf/pom.xml @@ -34,12 +34,12 @@ com.azure azure-core - 1.61.0-beta.1 + 1.60.0 com.azure azure-core-http-netty - 1.17.0-beta.1 + 1.16.8 diff --git a/sdk/servicebus/azure-messaging-servicebus/pom.xml b/sdk/servicebus/azure-messaging-servicebus/pom.xml index 880df399e609c..a93b3ff3bf99d 100644 --- a/sdk/servicebus/azure-messaging-servicebus/pom.xml +++ b/sdk/servicebus/azure-messaging-servicebus/pom.xml @@ -59,7 +59,7 @@ com.azure azure-core - 1.61.0-beta.1 + 1.60.0 com.azure @@ -74,14 +74,14 @@ com.azure azure-core-http-netty - 1.17.0-beta.1 + 1.16.8 com.azure azure-core-test - 1.27.0-beta.20 + 1.27.0-beta.19 test diff --git a/sdk/servicebus/azure-resourcemanager-servicebus/pom.xml b/sdk/servicebus/azure-resourcemanager-servicebus/pom.xml index c40ecaf41ea1a..44560d3f3fc7b 100644 --- a/sdk/servicebus/azure-resourcemanager-servicebus/pom.xml +++ b/sdk/servicebus/azure-resourcemanager-servicebus/pom.xml @@ -75,7 +75,7 @@ com.azure azure-core-http-netty - 1.17.0-beta.1 + 1.16.8 test diff --git a/sdk/spring/spring-cloud-azure-autoconfigure/pom.xml b/sdk/spring/spring-cloud-azure-autoconfigure/pom.xml index 48e5a0dd36102..d855a64860124 100644 --- a/sdk/spring/spring-cloud-azure-autoconfigure/pom.xml +++ b/sdk/spring/spring-cloud-azure-autoconfigure/pom.xml @@ -199,7 +199,7 @@ com.azure azure-core - 1.61.0-beta.1 + 1.60.0 true @@ -427,7 +427,7 @@ com.azure azure-core-http-netty - 1.17.0-beta.1 + 1.16.8 test diff --git a/sdk/sql/azure-resourcemanager-sql/pom.xml b/sdk/sql/azure-resourcemanager-sql/pom.xml index c15ffe3d4a427..e160bdb10637c 100644 --- a/sdk/sql/azure-resourcemanager-sql/pom.xml +++ b/sdk/sql/azure-resourcemanager-sql/pom.xml @@ -107,7 +107,7 @@ com.azure azure-core-http-netty - 1.17.0-beta.1 + 1.16.8 test diff --git a/sdk/storage-v2/azure-storage-perf/pom.xml b/sdk/storage-v2/azure-storage-perf/pom.xml index 40507cbb82a06..6bf21f01d7003 100644 --- a/sdk/storage-v2/azure-storage-perf/pom.xml +++ b/sdk/storage-v2/azure-storage-perf/pom.xml @@ -37,13 +37,13 @@ io.clientcore core - 1.0.0-beta.12 + 1.0.0-beta.11 com.azure.v2 azure-core - 2.0.0-beta.1 + 2.0.0-beta.1 @@ -55,7 +55,7 @@ io.clientcore http-netty4 - 1.0.0-beta.1 + 1.0.0-beta.1 diff --git a/sdk/storage/azure-resourcemanager-storage/pom.xml b/sdk/storage/azure-resourcemanager-storage/pom.xml index 60a190acb0c89..601d668ac0062 100644 --- a/sdk/storage/azure-resourcemanager-storage/pom.xml +++ b/sdk/storage/azure-resourcemanager-storage/pom.xml @@ -89,7 +89,7 @@ com.azure azure-core-http-netty - 1.17.0-beta.1 + 1.16.8 test diff --git a/sdk/storage/azure-storage-blob-batch/pom.xml b/sdk/storage/azure-storage-blob-batch/pom.xml index da69571230f6d..13b954e4edc3e 100644 --- a/sdk/storage/azure-storage-blob-batch/pom.xml +++ b/sdk/storage/azure-storage-blob-batch/pom.xml @@ -57,12 +57,12 @@ com.azure azure-core - 1.61.0-beta.1 + 1.60.0 com.azure azure-core-http-netty - 1.17.0-beta.1 + 1.16.8 com.azure @@ -91,7 +91,7 @@ com.azure azure-core-test - 1.27.0-beta.20 + 1.27.0-beta.19 test diff --git a/sdk/storage/azure-storage-blob-changefeed/pom.xml b/sdk/storage/azure-storage-blob-changefeed/pom.xml index befb280fbdac8..dc2ae78dff981 100644 --- a/sdk/storage/azure-storage-blob-changefeed/pom.xml +++ b/sdk/storage/azure-storage-blob-changefeed/pom.xml @@ -69,12 +69,12 @@ com.azure azure-core - 1.61.0-beta.1 + 1.60.0 com.azure azure-core-http-netty - 1.17.0-beta.1 + 1.16.8 com.azure @@ -103,7 +103,7 @@ com.azure azure-core-test - 1.27.0-beta.20 + 1.27.0-beta.19 test diff --git a/sdk/storage/azure-storage-blob-cryptography/pom.xml b/sdk/storage/azure-storage-blob-cryptography/pom.xml index 6689c41a41c7e..cdca5b3f0d07c 100644 --- a/sdk/storage/azure-storage-blob-cryptography/pom.xml +++ b/sdk/storage/azure-storage-blob-cryptography/pom.xml @@ -63,12 +63,12 @@ com.azure azure-core - 1.61.0-beta.1 + 1.60.0 com.azure azure-core-http-netty - 1.17.0-beta.1 + 1.16.8 com.azure @@ -87,7 +87,7 @@ com.azure azure-core-test - 1.27.0-beta.20 + 1.27.0-beta.19 test diff --git a/sdk/storage/azure-storage-blob-nio/pom.xml b/sdk/storage/azure-storage-blob-nio/pom.xml index 19e74fba9788f..3d5c4151c01f4 100644 --- a/sdk/storage/azure-storage-blob-nio/pom.xml +++ b/sdk/storage/azure-storage-blob-nio/pom.xml @@ -55,12 +55,12 @@ com.azure azure-core - 1.61.0-beta.1 + 1.60.0 com.azure azure-core-http-netty - 1.17.0-beta.1 + 1.16.8 com.azure @@ -79,7 +79,7 @@ com.azure azure-core-test - 1.27.0-beta.20 + 1.27.0-beta.19 test diff --git a/sdk/storage/azure-storage-blob-stress/pom.xml b/sdk/storage/azure-storage-blob-stress/pom.xml index 744bfb2323063..980ca1003095e 100644 --- a/sdk/storage/azure-storage-blob-stress/pom.xml +++ b/sdk/storage/azure-storage-blob-stress/pom.xml @@ -42,12 +42,12 @@ com.azure azure-core - 1.61.0-beta.1 + 1.60.0 com.azure azure-core-http-netty - 1.17.0-beta.1 + 1.16.8 com.azure diff --git a/sdk/storage/azure-storage-blob/pom.xml b/sdk/storage/azure-storage-blob/pom.xml index c57ae368b1b92..bd95b7a91a4df 100644 --- a/sdk/storage/azure-storage-blob/pom.xml +++ b/sdk/storage/azure-storage-blob/pom.xml @@ -75,12 +75,12 @@ com.azure azure-core - 1.61.0-beta.1 + 1.60.0 com.azure azure-core-http-netty - 1.17.0-beta.1 + 1.16.8 com.azure @@ -113,7 +113,7 @@ com.azure azure-core-test - 1.27.0-beta.20 + 1.27.0-beta.19 test diff --git a/sdk/storage/azure-storage-common/pom.xml b/sdk/storage/azure-storage-common/pom.xml index 11d64cc98babf..9e1ddd5eedfb8 100644 --- a/sdk/storage/azure-storage-common/pom.xml +++ b/sdk/storage/azure-storage-common/pom.xml @@ -60,12 +60,12 @@ com.azure azure-core - 1.61.0-beta.1 + 1.60.0 com.azure azure-core-http-netty - 1.17.0-beta.1 + 1.16.8 + 1.27.0-beta.19 test diff --git a/sdk/storage/azure-storage-file-datalake-stress/pom.xml b/sdk/storage/azure-storage-file-datalake-stress/pom.xml index 23de55644f36d..8d178bb117fa1 100644 --- a/sdk/storage/azure-storage-file-datalake-stress/pom.xml +++ b/sdk/storage/azure-storage-file-datalake-stress/pom.xml @@ -30,12 +30,12 @@ com.azure azure-core - 1.61.0-beta.1 + 1.60.0 com.azure azure-core-http-netty - 1.17.0-beta.1 + 1.16.8 com.azure diff --git a/sdk/storage/azure-storage-file-datalake/pom.xml b/sdk/storage/azure-storage-file-datalake/pom.xml index fbfcbef8f3552..eaad2b9cdbf3a 100644 --- a/sdk/storage/azure-storage-file-datalake/pom.xml +++ b/sdk/storage/azure-storage-file-datalake/pom.xml @@ -68,12 +68,12 @@ com.azure azure-core - 1.61.0-beta.1 + 1.60.0 com.azure azure-core-http-netty - 1.17.0-beta.1 + 1.16.8 com.azure @@ -102,7 +102,7 @@ com.azure azure-core-test - 1.27.0-beta.20 + 1.27.0-beta.19 test diff --git a/sdk/storage/azure-storage-file-share-stress/pom.xml b/sdk/storage/azure-storage-file-share-stress/pom.xml index 1b3a790411bb1..bac3771171467 100644 --- a/sdk/storage/azure-storage-file-share-stress/pom.xml +++ b/sdk/storage/azure-storage-file-share-stress/pom.xml @@ -30,12 +30,12 @@ com.azure azure-core - 1.61.0-beta.1 + 1.60.0 com.azure azure-core-http-netty - 1.17.0-beta.1 + 1.16.8 com.azure diff --git a/sdk/storage/azure-storage-file-share/pom.xml b/sdk/storage/azure-storage-file-share/pom.xml index 466c98b2613fc..df74b7223fdef 100644 --- a/sdk/storage/azure-storage-file-share/pom.xml +++ b/sdk/storage/azure-storage-file-share/pom.xml @@ -69,12 +69,12 @@ com.azure azure-core - 1.61.0-beta.1 + 1.60.0 com.azure azure-core-http-netty - 1.17.0-beta.1 + 1.16.8 com.azure @@ -104,7 +104,7 @@ com.azure azure-core-test - 1.27.0-beta.20 + 1.27.0-beta.19 test diff --git a/sdk/storage/azure-storage-perf/pom.xml b/sdk/storage/azure-storage-perf/pom.xml index 290117167468f..c2b3706314a77 100644 --- a/sdk/storage/azure-storage-perf/pom.xml +++ b/sdk/storage/azure-storage-perf/pom.xml @@ -65,12 +65,12 @@ com.azure azure-core - 1.61.0-beta.1 + 1.60.0 com.azure azure-core-http-netty - 1.17.0-beta.1 + 1.16.8 diff --git a/sdk/storage/azure-storage-queue/pom.xml b/sdk/storage/azure-storage-queue/pom.xml index e732052628f9d..6562bac08cea3 100644 --- a/sdk/storage/azure-storage-queue/pom.xml +++ b/sdk/storage/azure-storage-queue/pom.xml @@ -63,12 +63,12 @@ com.azure azure-core - 1.61.0-beta.1 + 1.60.0 com.azure azure-core-http-netty - 1.17.0-beta.1 + 1.16.8 com.azure @@ -87,7 +87,7 @@ com.azure azure-core-test - 1.27.0-beta.20 + 1.27.0-beta.19 test diff --git a/sdk/storage/azure-storage-stress/pom.xml b/sdk/storage/azure-storage-stress/pom.xml index 34d3dca4f5358..9a90179ec3db2 100644 --- a/sdk/storage/azure-storage-stress/pom.xml +++ b/sdk/storage/azure-storage-stress/pom.xml @@ -42,12 +42,12 @@ com.azure azure-core - 1.61.0-beta.1 + 1.60.0 com.azure azure-core-http-netty - 1.17.0-beta.1 + 1.16.8 com.azure diff --git a/sdk/synapse/azure-analytics-synapse-accesscontrol/pom.xml b/sdk/synapse/azure-analytics-synapse-accesscontrol/pom.xml index 2c211a4e5c1da..3732f9c3caa20 100644 --- a/sdk/synapse/azure-analytics-synapse-accesscontrol/pom.xml +++ b/sdk/synapse/azure-analytics-synapse-accesscontrol/pom.xml @@ -48,19 +48,19 @@ com.azure azure-core - 1.61.0-beta.1 + 1.60.0 com.azure azure-core-http-netty - 1.17.0-beta.1 + 1.16.8 com.azure azure-core-test - 1.27.0-beta.20 + 1.27.0-beta.19 test diff --git a/sdk/synapse/azure-analytics-synapse-artifacts/pom.xml b/sdk/synapse/azure-analytics-synapse-artifacts/pom.xml index 294edc27122d1..1321b4a966ddf 100644 --- a/sdk/synapse/azure-analytics-synapse-artifacts/pom.xml +++ b/sdk/synapse/azure-analytics-synapse-artifacts/pom.xml @@ -43,19 +43,19 @@ com.azure azure-core - 1.61.0-beta.1 + 1.60.0 com.azure azure-core-http-netty - 1.17.0-beta.1 + 1.16.8 com.azure azure-core-test - 1.27.0-beta.20 + 1.27.0-beta.19 test diff --git a/sdk/synapse/azure-analytics-synapse-managedprivateendpoints/pom.xml b/sdk/synapse/azure-analytics-synapse-managedprivateendpoints/pom.xml index 9f34dba16cd87..adfd5f9ae5270 100644 --- a/sdk/synapse/azure-analytics-synapse-managedprivateendpoints/pom.xml +++ b/sdk/synapse/azure-analytics-synapse-managedprivateendpoints/pom.xml @@ -48,19 +48,19 @@ com.azure azure-core - 1.61.0-beta.1 + 1.60.0 com.azure azure-core-http-netty - 1.17.0-beta.1 + 1.16.8 com.azure azure-core-test - 1.27.0-beta.20 + 1.27.0-beta.19 test diff --git a/sdk/synapse/azure-analytics-synapse-monitoring/pom.xml b/sdk/synapse/azure-analytics-synapse-monitoring/pom.xml index 202d7df26bce0..6e72e7c4db9a8 100644 --- a/sdk/synapse/azure-analytics-synapse-monitoring/pom.xml +++ b/sdk/synapse/azure-analytics-synapse-monitoring/pom.xml @@ -48,19 +48,19 @@ com.azure azure-core - 1.61.0-beta.1 + 1.60.0 com.azure azure-core-http-netty - 1.17.0-beta.1 + 1.16.8 com.azure azure-core-test - 1.27.0-beta.20 + 1.27.0-beta.19 test diff --git a/sdk/synapse/azure-analytics-synapse-spark/pom.xml b/sdk/synapse/azure-analytics-synapse-spark/pom.xml index c4bc3e6c4e59e..80cee06ef82ab 100644 --- a/sdk/synapse/azure-analytics-synapse-spark/pom.xml +++ b/sdk/synapse/azure-analytics-synapse-spark/pom.xml @@ -54,19 +54,19 @@ com.azure azure-core - 1.61.0-beta.1 + 1.60.0 com.azure azure-core-http-netty - 1.17.0-beta.1 + 1.16.8 com.azure azure-core-test - 1.27.0-beta.20 + 1.27.0-beta.19 test diff --git a/sdk/tables/azure-data-tables-perf/pom.xml b/sdk/tables/azure-data-tables-perf/pom.xml index 17ae26e46e56b..8614f715b37cd 100644 --- a/sdk/tables/azure-data-tables-perf/pom.xml +++ b/sdk/tables/azure-data-tables-perf/pom.xml @@ -30,7 +30,7 @@ com.azure azure-core-test - 1.27.0-beta.20 + 1.27.0-beta.19 com.azure @@ -41,12 +41,12 @@ com.azure azure-core - 1.61.0-beta.1 + 1.60.0 com.azure azure-core-http-netty - 1.17.0-beta.1 + 1.16.8 diff --git a/sdk/tables/azure-data-tables/pom.xml b/sdk/tables/azure-data-tables/pom.xml index 4a38410ee6f2e..50b111d70a298 100644 --- a/sdk/tables/azure-data-tables/pom.xml +++ b/sdk/tables/azure-data-tables/pom.xml @@ -51,12 +51,12 @@ Licensed under the MIT License. com.azure azure-core - 1.61.0-beta.1 + 1.60.0 com.azure azure-core-http-netty - 1.17.0-beta.1 + 1.16.8 com.azure @@ -71,7 +71,7 @@ Licensed under the MIT License. com.azure azure-core-test - 1.27.0-beta.20 + 1.27.0-beta.19 test diff --git a/sdk/template/azure-template-stress/pom.xml b/sdk/template/azure-template-stress/pom.xml index 45a819f5e9e52..f3e7c97e91ce6 100644 --- a/sdk/template/azure-template-stress/pom.xml +++ b/sdk/template/azure-template-stress/pom.xml @@ -33,13 +33,13 @@ com.azure azure-core - 1.61.0-beta.1 + 1.60.0 com.azure azure-core-http-netty - 1.17.0-beta.1 + 1.16.8 com.azure diff --git a/sdk/textanalytics/azure-ai-textanalytics-perf/pom.xml b/sdk/textanalytics/azure-ai-textanalytics-perf/pom.xml index b1db8491c8561..cf5ab30b79b0d 100644 --- a/sdk/textanalytics/azure-ai-textanalytics-perf/pom.xml +++ b/sdk/textanalytics/azure-ai-textanalytics-perf/pom.xml @@ -38,12 +38,12 @@ com.azure azure-core - 1.61.0-beta.1 + 1.60.0 com.azure azure-core-http-netty - 1.17.0-beta.1 + 1.16.8 diff --git a/sdk/textanalytics/azure-ai-textanalytics/pom.xml b/sdk/textanalytics/azure-ai-textanalytics/pom.xml index 067a8a01c1e89..fc242d8e9f627 100644 --- a/sdk/textanalytics/azure-ai-textanalytics/pom.xml +++ b/sdk/textanalytics/azure-ai-textanalytics/pom.xml @@ -47,12 +47,12 @@ com.azure azure-core - 1.61.0-beta.1 + 1.60.0 com.azure azure-core-http-netty - 1.17.0-beta.1 + 1.16.8 com.azure @@ -74,7 +74,7 @@ com.azure azure-core-test - 1.27.0-beta.20 + 1.27.0-beta.19 test diff --git a/sdk/tools/azure-sdk-build-tool/pom.xml b/sdk/tools/azure-sdk-build-tool/pom.xml index 5d63e7c69c3b7..cff81af19f61b 100644 --- a/sdk/tools/azure-sdk-build-tool/pom.xml +++ b/sdk/tools/azure-sdk-build-tool/pom.xml @@ -108,12 +108,12 @@ com.azure azure-core - 1.61.0-beta.1 + 1.60.0 com.azure azure-core-http-netty - 1.17.0-beta.1 + 1.16.8 diff --git a/sdk/trafficmanager/azure-resourcemanager-trafficmanager/pom.xml b/sdk/trafficmanager/azure-resourcemanager-trafficmanager/pom.xml index 9f9257a12cdc5..bb8670c96d439 100644 --- a/sdk/trafficmanager/azure-resourcemanager-trafficmanager/pom.xml +++ b/sdk/trafficmanager/azure-resourcemanager-trafficmanager/pom.xml @@ -76,7 +76,7 @@ com.azure azure-core-http-netty - 1.17.0-beta.1 + 1.16.8 test diff --git a/sdk/transcription/azure-ai-speech-transcription/pom.xml b/sdk/transcription/azure-ai-speech-transcription/pom.xml index 2c1df3177b193..c87a93253b33e 100644 --- a/sdk/transcription/azure-ai-speech-transcription/pom.xml +++ b/sdk/transcription/azure-ai-speech-transcription/pom.xml @@ -48,17 +48,17 @@ Code generated by Microsoft (R) TypeSpec Code Generator. com.azure azure-core - 1.61.0-beta.1 + 1.60.0 com.azure azure-core-http-netty - 1.17.0-beta.1 + 1.16.8 com.azure azure-core-test - 1.27.0-beta.20 + 1.27.0-beta.19 test diff --git a/sdk/translation/azure-ai-documenttranslator/pom.xml b/sdk/translation/azure-ai-documenttranslator/pom.xml index a0b3d56b0b8d5..151994e8b42cc 100644 --- a/sdk/translation/azure-ai-documenttranslator/pom.xml +++ b/sdk/translation/azure-ai-documenttranslator/pom.xml @@ -45,7 +45,7 @@ com.azure azure-core - 1.61.0-beta.1 + 1.60.0 com.azure @@ -55,14 +55,14 @@ com.azure azure-core-http-netty - 1.17.0-beta.1 + 1.16.8 com.azure azure-core-test - 1.27.0-beta.20 + 1.27.0-beta.19 test diff --git a/sdk/translation/azure-ai-translation-document/pom.xml b/sdk/translation/azure-ai-translation-document/pom.xml index 930e242b8a6c1..159bf13e199b4 100644 --- a/sdk/translation/azure-ai-translation-document/pom.xml +++ b/sdk/translation/azure-ai-translation-document/pom.xml @@ -57,18 +57,18 @@ Code generated by Microsoft (R) TypeSpec Code Generator. com.azure azure-core - 1.61.0-beta.1 + 1.60.0 com.azure azure-core-http-netty - 1.17.0-beta.1 + 1.16.8 com.azure azure-core-test - 1.27.0-beta.20 + 1.27.0-beta.19 test diff --git a/sdk/translation/azure-ai-translation-text/pom.xml b/sdk/translation/azure-ai-translation-text/pom.xml index 39c82c493cb4c..d2bc8165243ee 100644 --- a/sdk/translation/azure-ai-translation-text/pom.xml +++ b/sdk/translation/azure-ai-translation-text/pom.xml @@ -49,19 +49,19 @@ com.azure azure-core - 1.61.0-beta.1 + 1.60.0 com.azure azure-core-http-netty - 1.17.0-beta.1 + 1.16.8 com.azure azure-core-test - 1.27.0-beta.20 + 1.27.0-beta.19 test diff --git a/sdk/vision/azure-ai-vision-imageanalysis/pom.xml b/sdk/vision/azure-ai-vision-imageanalysis/pom.xml index 40b45073135fc..13fadcebdd750 100644 --- a/sdk/vision/azure-ai-vision-imageanalysis/pom.xml +++ b/sdk/vision/azure-ai-vision-imageanalysis/pom.xml @@ -50,17 +50,17 @@ com.azure azure-core - 1.61.0-beta.1 + 1.60.0 com.azure azure-core-http-netty - 1.17.0-beta.1 + 1.16.8 com.azure azure-core-test - 1.27.0-beta.20 + 1.27.0-beta.19 test diff --git a/sdk/voicelive/azure-ai-voicelive/pom.xml b/sdk/voicelive/azure-ai-voicelive/pom.xml index 7cc362d7682da..4e816b571c224 100644 --- a/sdk/voicelive/azure-ai-voicelive/pom.xml +++ b/sdk/voicelive/azure-ai-voicelive/pom.xml @@ -49,12 +49,12 @@ Code generated by Microsoft (R) TypeSpec Code Generator. com.azure azure-core - 1.61.0-beta.1 + 1.60.0 com.azure azure-core-http-netty - 1.17.0-beta.1 + 1.16.8 io.opentelemetry @@ -64,7 +64,7 @@ Code generated by Microsoft (R) TypeSpec Code Generator. com.azure azure-core-test - 1.27.0-beta.20 + 1.27.0-beta.19 test diff --git a/sdk/webpubsub/azure-messaging-webpubsub/pom.xml b/sdk/webpubsub/azure-messaging-webpubsub/pom.xml index c13c152196671..516d55bdb252f 100644 --- a/sdk/webpubsub/azure-messaging-webpubsub/pom.xml +++ b/sdk/webpubsub/azure-messaging-webpubsub/pom.xml @@ -44,12 +44,12 @@ com.azure azure-core - 1.61.0-beta.1 + 1.60.0 com.azure azure-core-http-netty - 1.17.0-beta.1 + 1.16.8 com.nimbusds @@ -61,7 +61,7 @@ com.azure azure-core-test - 1.27.0-beta.20 + 1.27.0-beta.19 test From 3a1947d61501a8e3c513d0b77ec6d9eb69f3937a Mon Sep 17 00:00:00 2001 From: alzimmermsft <48699787+alzimmermsft@users.noreply.github.com> Date: Tue, 13 Oct 2026 09:51:52 -0400 Subject: [PATCH 15/21] Additional clean up --- sdk/communication/azure-communication-common/pom.xml | 6 ------ sdk/identity/azure-identity/pom.xml | 6 +++--- sdk/storage-v2/azure-storage-perf/pom.xml | 6 +++--- 3 files changed, 6 insertions(+), 12 deletions(-) diff --git a/sdk/communication/azure-communication-common/pom.xml b/sdk/communication/azure-communication-common/pom.xml index 0cc51b76fa699..f52555fe1afdd 100644 --- a/sdk/communication/azure-communication-common/pom.xml +++ b/sdk/communication/azure-communication-common/pom.xml @@ -80,12 +80,6 @@ 5.13.4 test - - io.projectreactor - reactor-test - 3.8.7 - test - com.azure azure-core-test diff --git a/sdk/identity/azure-identity/pom.xml b/sdk/identity/azure-identity/pom.xml index 4a1745917df6b..4b7c7e2a5b716 100644 --- a/sdk/identity/azure-identity/pom.xml +++ b/sdk/identity/azure-identity/pom.xml @@ -36,13 +36,13 @@ com.azure azure-core - 1.60.0 + 1.61.0-beta.1 com.azure azure-core-http-netty - 1.16.8 + 1.17.0-beta.1 @@ -63,7 +63,7 @@ com.azure azure-core-test - 1.27.0-beta.19 + 1.27.0-beta.20 test diff --git a/sdk/storage-v2/azure-storage-perf/pom.xml b/sdk/storage-v2/azure-storage-perf/pom.xml index 6bf21f01d7003..40507cbb82a06 100644 --- a/sdk/storage-v2/azure-storage-perf/pom.xml +++ b/sdk/storage-v2/azure-storage-perf/pom.xml @@ -37,13 +37,13 @@ io.clientcore core - 1.0.0-beta.11 + 1.0.0-beta.12 com.azure.v2 azure-core - 2.0.0-beta.1 + 2.0.0-beta.1 @@ -55,7 +55,7 @@ io.clientcore http-netty4 - 1.0.0-beta.1 + 1.0.0-beta.1 From 3e021581d79217936fa4e331326c15d1b90dd304 Mon Sep 17 00:00:00 2001 From: alzimmermsft <48699787+alzimmermsft@users.noreply.github.com> Date: Tue, 13 Oct 2026 10:54:06 -0400 Subject: [PATCH 16/21] Testing cleanup --- .../azure/core/http/ProxyOptionsTests.java | 67 ++++++++----------- .../spring-cloud-azure-autoconfigure/pom.xml | 4 +- .../http/NettyCompatibilityTests.java | 37 ---------- 3 files changed, 31 insertions(+), 77 deletions(-) delete mode 100644 sdk/spring/spring-cloud-azure-autoconfigure/src/test/java/com/azure/spring/cloud/autoconfigure/implementation/useragent/http/NettyCompatibilityTests.java diff --git a/sdk/core/azure-core/src/test/java/com/azure/core/http/ProxyOptionsTests.java b/sdk/core/azure-core/src/test/java/com/azure/core/http/ProxyOptionsTests.java index 2e0a5e6a6d096..5c6a396b5df76 100644 --- a/sdk/core/azure-core/src/test/java/com/azure/core/http/ProxyOptionsTests.java +++ b/sdk/core/azure-core/src/test/java/com/azure/core/http/ProxyOptionsTests.java @@ -238,53 +238,35 @@ public void invalidHttpPortEnvironmentConfigDefault(String port) { private static Stream loadFromEnvironmentSupplier() { return Stream.of( // Basic Azure HTTPS proxy. - Arguments.of( - setJavaSystemProxyPrerequisiteToTrue( - new TestConfigurationSource().put(Configuration.PROPERTY_HTTPS_PROXY, AZURE_HTTPS_PROXY_HOST_ONLY)), - PROXY_HOST, 443, null, null, null), + Arguments.of(setJavaSystemProxyPrerequisiteToTrue(AZURE_HTTPS_PROXY_HOST_ONLY, null, true), PROXY_HOST, 443, + null, null, null), // Username only Azure HTTPS proxy. - Arguments.of( - setJavaSystemProxyPrerequisiteToTrue(new TestConfigurationSource() - .put(Configuration.PROPERTY_HTTPS_PROXY, AZURE_HTTPS_PROXY_WITH_USERNAME)), - PROXY_HOST, 443, null, null, null), + Arguments.of(setJavaSystemProxyPrerequisiteToTrue(AZURE_HTTPS_PROXY_WITH_USERNAME, null, true), PROXY_HOST, + 443, null, null, null), // Complete Azure HTTPS proxy. - Arguments.of( - setJavaSystemProxyPrerequisiteToTrue(new TestConfigurationSource() - .put(Configuration.PROPERTY_HTTPS_PROXY, AZURE_HTTPS_PROXY_WITH_USER_AND_PASS)), + Arguments.of(setJavaSystemProxyPrerequisiteToTrue(AZURE_HTTPS_PROXY_WITH_USER_AND_PASS, null, true), PROXY_HOST, 443, FAKE_PROXY_USER_PLACEHOLDER, FAKE_PROXY_PASSWORD_PLACEHOLDER, null), // Azure HTTPS proxy with non-proxying hosts. - Arguments.of( - setJavaSystemProxyPrerequisiteToTrue( - new TestConfigurationSource().put(Configuration.PROPERTY_HTTPS_PROXY, AZURE_HTTPS_PROXY_HOST_ONLY) - .put(Configuration.PROPERTY_NO_PROXY, NON_PROXY_HOSTS)), + Arguments.of(setJavaSystemProxyPrerequisiteToTrue(AZURE_HTTPS_PROXY_HOST_ONLY, NON_PROXY_HOSTS, true), PROXY_HOST, 443, null, null, "(" + NON_PROXY_HOSTS + ")"), // Basic Azure HTTP proxy. - Arguments.of( - setJavaSystemProxyPrerequisiteToTrue( - new TestConfigurationSource().put(Configuration.PROPERTY_HTTP_PROXY, AZURE_HTTP_PROXY_HOST_ONLY)), - PROXY_HOST, 80, null, null, null), + Arguments.of(setJavaSystemProxyPrerequisiteToTrue(AZURE_HTTP_PROXY_HOST_ONLY, null, false), PROXY_HOST, 80, + null, null, null), // Username only Azure HTTP proxy. - Arguments.of( - setJavaSystemProxyPrerequisiteToTrue(new TestConfigurationSource() - .put(Configuration.PROPERTY_HTTP_PROXY, AZURE_HTTP_PROXY_WITH_USERNAME)), - PROXY_HOST, 80, null, null, null), + Arguments.of(setJavaSystemProxyPrerequisiteToTrue(AZURE_HTTP_PROXY_WITH_USERNAME, null, false), PROXY_HOST, + 80, null, null, null), // Complete Azure HTTP proxy. - Arguments.of( - setJavaSystemProxyPrerequisiteToTrue(new TestConfigurationSource() - .put(Configuration.PROPERTY_HTTP_PROXY, AZURE_HTTP_PROXY_WITH_USER_AND_PASS)), + Arguments.of(setJavaSystemProxyPrerequisiteToTrue(AZURE_HTTP_PROXY_WITH_USER_AND_PASS, null, false), PROXY_HOST, 80, FAKE_PROXY_USER_PLACEHOLDER, FAKE_PROXY_PASSWORD_PLACEHOLDER, null), // Azure HTTP proxy with non-proxying hosts. - Arguments.of( - setJavaSystemProxyPrerequisiteToTrue( - new TestConfigurationSource().put(Configuration.PROPERTY_HTTP_PROXY, AZURE_HTTP_PROXY_HOST_ONLY) - .put(Configuration.PROPERTY_NO_PROXY, NON_PROXY_HOSTS)), + Arguments.of(setJavaSystemProxyPrerequisiteToTrue(AZURE_HTTP_PROXY_HOST_ONLY, NON_PROXY_HOSTS, false), PROXY_HOST, 80, null, null, "(" + NON_PROXY_HOSTS + ")"), /* @@ -328,7 +310,7 @@ private static Stream loadFromEnvironmentSupplier() { private static Stream loadFromExplicitConfigurationSupplier() { return Stream.of( /* - * Setting up tests for loading the Java exokicit proxy configurations takes additional work as each + * Setting up tests for loading the Java explicit proxy configurations takes additional work as each * piece of the proxy configuration is a separate environment value. The non-proxy hosts will be checked * against the global environment value when it is not being set by the configuration passed by the test * as this value may be setup by the JVM. @@ -447,10 +429,8 @@ private static Stream nonProxyHostsSupplier() { /* * This emulates loading an environment formatted proxy. */ - TestConfigurationSource envSource - = new TestConfigurationSource().put(Configuration.PROPERTY_HTTPS_PROXY, "http://localhost:7777") - .put(Configuration.PROPERTY_NO_PROXY, noProxyNonProxyHosts); - Configuration environmentProxyConfiguration = setJavaSystemProxyPrerequisiteToTrue(envSource); + Configuration environmentProxyConfiguration + = setJavaSystemProxyPrerequisiteToTrue("http://localhost:7777", noProxyNonProxyHosts, true); Pattern environmentProxyConfigurationPattern = compile(fromConfiguration(environmentProxyConfiguration).getNonProxyHosts(), Pattern.CASE_INSENSITIVE); @@ -510,8 +490,19 @@ public void sanitizeJavaHttpNonProxyHostsDoesNotSplitEscapedPipes() { assertEquals("(" + nonProxyHosts + ")", ProxyOptions.sanitizeNoProxy(nonProxyHosts)); } - private static Configuration setJavaSystemProxyPrerequisiteToTrue(TestConfigurationSource source) { - return new ConfigurationBuilder(EMPTY_SOURCE, EMPTY_SOURCE, source.put(JAVA_SYSTEM_PROXY_PREREQUISITE, "true")) - .build(); + private static Configuration setJavaSystemProxyPrerequisiteToTrue(String proxy, String nonProxyHosts, + boolean isHttps) { + TestConfigurationSource testSource = new TestConfigurationSource().put(JAVA_SYSTEM_PROXY_PREREQUISITE, "true") + // Use empty string when non-proxy hosts is null or empty to ensure that the environment configuration + // doesn't attempt to fall back to loading from System.properties or System.env. + .put(Configuration.PROPERTY_NO_PROXY, CoreUtils.isNullOrEmpty(nonProxyHosts) ? "" : nonProxyHosts); + + if (isHttps) { + testSource.put(Configuration.PROPERTY_HTTPS_PROXY, proxy); + } else { + testSource.put(Configuration.PROPERTY_HTTP_PROXY, proxy); + } + + return new ConfigurationBuilder(EMPTY_SOURCE, EMPTY_SOURCE, testSource).build(); } } diff --git a/sdk/spring/spring-cloud-azure-autoconfigure/pom.xml b/sdk/spring/spring-cloud-azure-autoconfigure/pom.xml index d855a64860124..48e5a0dd36102 100644 --- a/sdk/spring/spring-cloud-azure-autoconfigure/pom.xml +++ b/sdk/spring/spring-cloud-azure-autoconfigure/pom.xml @@ -199,7 +199,7 @@ com.azure azure-core - 1.60.0 + 1.61.0-beta.1 true @@ -427,7 +427,7 @@ com.azure azure-core-http-netty - 1.16.8 + 1.17.0-beta.1 test diff --git a/sdk/spring/spring-cloud-azure-autoconfigure/src/test/java/com/azure/spring/cloud/autoconfigure/implementation/useragent/http/NettyCompatibilityTests.java b/sdk/spring/spring-cloud-azure-autoconfigure/src/test/java/com/azure/spring/cloud/autoconfigure/implementation/useragent/http/NettyCompatibilityTests.java deleted file mode 100644 index 16c10ff7dac21..0000000000000 --- a/sdk/spring/spring-cloud-azure-autoconfigure/src/test/java/com/azure/spring/cloud/autoconfigure/implementation/useragent/http/NettyCompatibilityTests.java +++ /dev/null @@ -1,37 +0,0 @@ -// Copyright (c) Microsoft Corporation. All rights reserved. -// Licensed under the MIT License. - -package com.azure.spring.cloud.autoconfigure.implementation.useragent.http; - -import org.junit.jupiter.api.Test; -import org.junit.jupiter.params.ParameterizedTest; -import org.junit.jupiter.params.provider.ValueSource; -import reactor.netty.resources.LoopResources; - -import java.time.Duration; -import java.util.concurrent.TimeUnit; - -import static org.assertj.core.api.Assertions.assertThat; - -class NettyCompatibilityTests { - - @ParameterizedTest - @ValueSource( - strings = { - "io.netty.channel.MultiThreadIoEventLoopGroup", - "io.netty.channel.epoll.EpollIoHandler", - "io.netty.channel.kqueue.KQueueIoHandler" }) - void transportClassesAreAvailable(String className) throws ClassNotFoundException { - assertThat(Class.forName(className, false, getClass().getClassLoader())).isNotNull(); - } - - @Test - void nioEventLoopsAreUsable() throws Exception { - LoopResources loops = LoopResources.create("azure-spring-netty-test", 1, true); - try { - assertThat(loops.onClient(false).submit(() -> true).get(10, TimeUnit.SECONDS)).isTrue(); - } finally { - loops.disposeLater().block(Duration.ofSeconds(10)); - } - } -} From 53cb4b007e585519dcc100d9fdb6eb5bd2341ee7 Mon Sep 17 00:00:00 2001 From: alzimmermsft <48699787+alzimmermsft@users.noreply.github.com> Date: Tue, 13 Oct 2026 11:34:54 -0400 Subject: [PATCH 17/21] Fix a few more tests --- .../src/test/java/com/azure/core/http/ProxyOptionsTests.java | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/sdk/core/azure-core/src/test/java/com/azure/core/http/ProxyOptionsTests.java b/sdk/core/azure-core/src/test/java/com/azure/core/http/ProxyOptionsTests.java index 5c6a396b5df76..cc5813a589d45 100644 --- a/sdk/core/azure-core/src/test/java/com/azure/core/http/ProxyOptionsTests.java +++ b/sdk/core/azure-core/src/test/java/com/azure/core/http/ProxyOptionsTests.java @@ -500,7 +500,10 @@ private static Configuration setJavaSystemProxyPrerequisiteToTrue(String proxy, if (isHttps) { testSource.put(Configuration.PROPERTY_HTTPS_PROXY, proxy); } else { - testSource.put(Configuration.PROPERTY_HTTP_PROXY, proxy); + testSource.put(Configuration.PROPERTY_HTTP_PROXY, proxy) + // Same as with non-proxy hosts, set HTTPS_PROXY to empty when testing HTTP_PROXY as HTTPS is checked + // first and could fall back to loading from System.properties or System.env. + .put(Configuration.PROPERTY_HTTPS_PROXY, ""); } return new ConfigurationBuilder(EMPTY_SOURCE, EMPTY_SOURCE, testSource).build(); From 66e23119a5218590236df832104706ee20dc5697 Mon Sep 17 00:00:00 2001 From: alzimmermsft <48699787+alzimmermsft@users.noreply.github.com> Date: Tue, 13 Oct 2026 13:51:51 -0400 Subject: [PATCH 18/21] More test fixes --- .../http/client/JdkHttpClientBuilderIT.java | 1 + .../core/http/models/ProxyOptionsTests.java | 51 ++++++++++--------- .../netty4/NettyHttpClientBuilderTests.java | 4 ++ .../okhttp3/OkHttpHttpClientBuilderTests.java | 4 ++ .../httpclient/JdkHttpClientBuilderTests.java | 2 + .../NettyAsyncHttpClientBuilderTests.java | 4 ++ .../OkHttpAsyncHttpClientBuilderTests.java | 2 + .../vertx/VertxHttpClientBuilderTests.java | 1 + 8 files changed, 45 insertions(+), 24 deletions(-) diff --git a/sdk/clientcore/core/src/test/java/io/clientcore/core/http/client/JdkHttpClientBuilderIT.java b/sdk/clientcore/core/src/test/java/io/clientcore/core/http/client/JdkHttpClientBuilderIT.java index c870f5b6cd289..715dae89efe8f 100644 --- a/sdk/clientcore/core/src/test/java/io/clientcore/core/http/client/JdkHttpClientBuilderIT.java +++ b/sdk/clientcore/core/src/test/java/io/clientcore/core/http/client/JdkHttpClientBuilderIT.java @@ -88,6 +88,7 @@ public void buildWithHttpProxyFromEnvConfiguration() throws IOException { Configuration configuration = Configuration.from(new TestConfigurationSource() .put(Configuration.HTTP_PROXY, "http://" + PROXY_USER_INFO + proxyEndpoint.getHost() + ":" + proxyEndpoint.getPort()) + .put(Configuration.HTTPS_PROXY, "") .put("java.net.useSystemProxies", "true")); HttpClient httpClient = new JdkHttpClientBuilder().configuration(configuration).build(); diff --git a/sdk/clientcore/core/src/test/java/io/clientcore/core/http/models/ProxyOptionsTests.java b/sdk/clientcore/core/src/test/java/io/clientcore/core/http/models/ProxyOptionsTests.java index 152e59e297852..06162aa45c8da 100644 --- a/sdk/clientcore/core/src/test/java/io/clientcore/core/http/models/ProxyOptionsTests.java +++ b/sdk/clientcore/core/src/test/java/io/clientcore/core/http/models/ProxyOptionsTests.java @@ -235,52 +235,42 @@ private static Stream loadFromEnvironmentSupplier() { return Stream.of( // Basic Azure HTTPS proxy. Arguments.of( - setJavaSystemProxyPrerequisiteToTrue( - new TestConfigurationSource().put(Configuration.HTTPS_PROXY, AZURE_HTTPS_PROXY_HOST_ONLY)), + setJavaSystemProxyPrerequisiteToTrue(AZURE_HTTPS_PROXY_HOST_ONLY, null, true), PROXY_HOST, 443, null, null, null), // Username only Azure HTTPS proxy. Arguments.of( - setJavaSystemProxyPrerequisiteToTrue( - new TestConfigurationSource().put(Configuration.HTTPS_PROXY, AZURE_HTTPS_PROXY_WITH_USERNAME)), + setJavaSystemProxyPrerequisiteToTrue(AZURE_HTTPS_PROXY_WITH_USERNAME, null, true), PROXY_HOST, 443, null, null, null), // Complete Azure HTTPS proxy. Arguments.of( - setJavaSystemProxyPrerequisiteToTrue( - new TestConfigurationSource().put(Configuration.HTTPS_PROXY, AZURE_HTTPS_PROXY_WITH_USER_AND_PASS)), + setJavaSystemProxyPrerequisiteToTrue(AZURE_HTTPS_PROXY_WITH_USER_AND_PASS, null, true), PROXY_HOST, 443, FAKE_PROXY_USER_PLACEHOLDER, FAKE_PROXY_PASSWORD_PLACEHOLDER, null), // Azure HTTPS proxy with non-proxying hosts. Arguments.of( - setJavaSystemProxyPrerequisiteToTrue( - new TestConfigurationSource().put(Configuration.HTTPS_PROXY, AZURE_HTTPS_PROXY_HOST_ONLY) - .put(Configuration.NO_PROXY, NON_PROXY_HOSTS)), + setJavaSystemProxyPrerequisiteToTrue(AZURE_HTTPS_PROXY_HOST_ONLY, NON_PROXY_HOSTS, true), PROXY_HOST, 443, null, null, "(" + NON_PROXY_HOSTS + ")"), // Basic Azure HTTP proxy. Arguments.of( - setJavaSystemProxyPrerequisiteToTrue( - new TestConfigurationSource().put(Configuration.HTTP_PROXY, AZURE_HTTP_PROXY_HOST_ONLY)), + setJavaSystemProxyPrerequisiteToTrue(AZURE_HTTP_PROXY_HOST_ONLY, null, false), PROXY_HOST, 80, null, null, null), // Username only Azure HTTP proxy. Arguments.of( - setJavaSystemProxyPrerequisiteToTrue( - new TestConfigurationSource().put(Configuration.HTTP_PROXY, AZURE_HTTP_PROXY_WITH_USERNAME)), + setJavaSystemProxyPrerequisiteToTrue(AZURE_HTTP_PROXY_WITH_USERNAME, null, false), PROXY_HOST, 80, null, null, null), // Complete Azure HTTP proxy. Arguments.of( - setJavaSystemProxyPrerequisiteToTrue( - new TestConfigurationSource().put(Configuration.HTTP_PROXY, AZURE_HTTP_PROXY_WITH_USER_AND_PASS)), + setJavaSystemProxyPrerequisiteToTrue(AZURE_HTTP_PROXY_WITH_USER_AND_PASS, null, false), PROXY_HOST, 80, FAKE_PROXY_USER_PLACEHOLDER, FAKE_PROXY_PASSWORD_PLACEHOLDER, null), // Azure HTTP proxy with non-proxying hosts. Arguments.of( - setJavaSystemProxyPrerequisiteToTrue( - new TestConfigurationSource().put(Configuration.HTTP_PROXY, AZURE_HTTP_PROXY_HOST_ONLY) - .put(Configuration.NO_PROXY, NON_PROXY_HOSTS)), + setJavaSystemProxyPrerequisiteToTrue(AZURE_HTTP_PROXY_HOST_ONLY, NON_PROXY_HOSTS, false), PROXY_HOST, 80, null, null, "(" + NON_PROXY_HOSTS + ")"), /* @@ -442,10 +432,8 @@ private static Stream nonProxyHostsSupplier() { /* * This emulates loading an environment formatted proxy. */ - TestConfigurationSource envSource - = new TestConfigurationSource().put(Configuration.HTTPS_PROXY, "http://localhost:7777") - .put(Configuration.NO_PROXY, noProxyNonProxyHosts); - Configuration environmentProxyConfiguration = setJavaSystemProxyPrerequisiteToTrue(envSource); + Configuration environmentProxyConfiguration = setJavaSystemProxyPrerequisiteToTrue("http://localhost:7777", + noProxyNonProxyHosts, true); Pattern environmentProxyConfigurationPattern = compile(fromConfiguration(environmentProxyConfiguration).getNonProxyHosts(), Pattern.CASE_INSENSITIVE); @@ -505,7 +493,22 @@ public void sanitizeJavaHttpNonProxyHostsDoesNotSplitEscapedPipes() { assertEquals("(" + nonProxyHosts + ")", ProxyOptions.sanitizeNoProxy(nonProxyHosts)); } - private static Configuration setJavaSystemProxyPrerequisiteToTrue(TestConfigurationSource source) { - return Configuration.from(EMPTY_SOURCE, EMPTY_SOURCE, source.put(JAVA_SYSTEM_PROXY_PREREQUISITE, "true")); + private static Configuration setJavaSystemProxyPrerequisiteToTrue(String proxy, String nonProxyHosts, + boolean isHttps) { + TestConfigurationSource testSource = new TestConfigurationSource().put(JAVA_SYSTEM_PROXY_PREREQUISITE, "true") + // Use empty string when non-proxy hosts is null or empty to ensure that the environment configuration + // doesn't attempt to fall back to loading from System.properties or System.env. + .put(Configuration.NO_PROXY, CoreUtils.isNullOrEmpty(nonProxyHosts) ? "" : nonProxyHosts); + + if (isHttps) { + testSource.put(Configuration.HTTPS_PROXY, proxy); + } else { + testSource.put(Configuration.HTTP_PROXY, proxy) + // Same as with non-proxy hosts, set HTTPS_PROXY to empty when testing HTTP_PROXY as HTTPS is checked + // first and could fall back to loading from System.properties or System.env. + .put(Configuration.HTTPS_PROXY, ""); + } + + return Configuration.from(EMPTY_SOURCE, EMPTY_SOURCE, testSource); } } diff --git a/sdk/clientcore/http-netty4/src/test/java/io/clientcore/http/netty4/NettyHttpClientBuilderTests.java b/sdk/clientcore/http-netty4/src/test/java/io/clientcore/http/netty4/NettyHttpClientBuilderTests.java index 3263eeec0f780..ac0e01e2f2add 100644 --- a/sdk/clientcore/http-netty4/src/test/java/io/clientcore/http/netty4/NettyHttpClientBuilderTests.java +++ b/sdk/clientcore/http-netty4/src/test/java/io/clientcore/http/netty4/NettyHttpClientBuilderTests.java @@ -210,6 +210,7 @@ private static Stream buildWithEnvConfigurationProxySupplier() { arguments.add( Configuration.from(new TestConfigurationSource().put(Configuration.HTTP_PROXY, "http://localhost:12345") + .put(Configuration.HTTPS_PROXY, "") .put(JAVA_SYSTEM_PROXY_PREREQUISITE, "true"))); /* @@ -221,6 +222,7 @@ private static Stream buildWithEnvConfigurationProxySupplier() { arguments.add( Configuration.from(new TestConfigurationSource().put(Configuration.HTTP_PROXY, "http://1:1@localhost:12345") + .put(Configuration.HTTPS_PROXY, "") .put(JAVA_SYSTEM_PROXY_PREREQUISITE, "true"))); /* @@ -236,6 +238,7 @@ private static Stream buildWithEnvConfigurationProxySupplier() { .from(baseJavaProxyConfigurationSupplier.get().put(JAVA_NON_PROXY_HOSTS, rawJavaNonProxyHosts))); arguments.add( Configuration.from(new TestConfigurationSource().put(Configuration.HTTP_PROXY, "http://localhost:12345") + .put(Configuration.HTTPS_PROXY, "") .put(Configuration.NO_PROXY, rawEnvNonProxyHosts) .put(JAVA_SYSTEM_PROXY_PREREQUISITE, "true"))); @@ -248,6 +251,7 @@ private static Stream buildWithEnvConfigurationProxySupplier() { .put(JAVA_HTTP_PROXY_PASSWORD, "1"))); arguments.add( Configuration.from(new TestConfigurationSource().put(Configuration.HTTP_PROXY, "http://1:1@localhost:12345") + .put(Configuration.HTTPS_PROXY, "") .put(Configuration.NO_PROXY, rawEnvNonProxyHosts) .put(JAVA_SYSTEM_PROXY_PREREQUISITE, "true"))); diff --git a/sdk/clientcore/http-okhttp3/src/test/java/io/clientcore/http/okhttp3/OkHttpHttpClientBuilderTests.java b/sdk/clientcore/http-okhttp3/src/test/java/io/clientcore/http/okhttp3/OkHttpHttpClientBuilderTests.java index a68b162b07d6f..9498ba6526916 100644 --- a/sdk/clientcore/http-okhttp3/src/test/java/io/clientcore/http/okhttp3/OkHttpHttpClientBuilderTests.java +++ b/sdk/clientcore/http-okhttp3/src/test/java/io/clientcore/http/okhttp3/OkHttpHttpClientBuilderTests.java @@ -505,6 +505,7 @@ private static Stream buildWithEnvConfigurationProxySupplier() { Configuration simpleEnvProxy = Configuration.from(new TestConfigurationSource().put(Configuration.HTTP_PROXY, "http://localhost:12345") + .put(Configuration.HTTPS_PROXY, "") .put(JAVA_SYSTEM_PROXY_PREREQUISITE, "true")); arguments.add(Arguments.of(true, simpleEnvProxy, defaultUri)); @@ -520,6 +521,7 @@ private static Stream buildWithEnvConfigurationProxySupplier() { Configuration envProxyWithAuthentication = Configuration.from(EMPTY_SOURCE, EMPTY_SOURCE, new TestConfigurationSource().put(Configuration.HTTP_PROXY, "http://1:1@localhost:12345") + .put(Configuration.HTTPS_PROXY, "") .put(JAVA_SYSTEM_PROXY_PREREQUISITE, "true")); arguments.add(Arguments.of(true, envProxyWithAuthentication, defaultUri)); @@ -544,6 +546,7 @@ private static Stream buildWithEnvConfigurationProxySupplier() { = () -> baseJavaProxyConfigurationSupplier.get().put(JAVA_NON_PROXY_HOSTS, rawJavaNonProxyHosts); Supplier envNonProxyHostsSupplier = () -> new TestConfigurationSource().put(Configuration.HTTP_PROXY, "http://localhost:12345") + .put(Configuration.HTTPS_PROXY, "") .put(Configuration.NO_PROXY, rawEnvNonProxyHosts) .put(JAVA_SYSTEM_PROXY_PREREQUISITE, "true"); List> nonProxyHostsSuppliers @@ -568,6 +571,7 @@ private static Stream buildWithEnvConfigurationProxySupplier() { = () -> javaNonProxyHostsSupplier.get().put(JAVA_HTTP_PROXY_USER, "1").put(JAVA_HTTP_PROXY_PASSWORD, "1"); Supplier authenticatedEnvNonProxyHostsSupplier = () -> new TestConfigurationSource().put(Configuration.HTTP_PROXY, "http://1:1@localhost:12345") + .put(Configuration.HTTPS_PROXY, "") .put(Configuration.NO_PROXY, rawEnvNonProxyHosts) .put(JAVA_SYSTEM_PROXY_PREREQUISITE, "true"); List> authenticatedNonProxyHostsSuppliers diff --git a/sdk/core/azure-core-http-jdk-httpclient/src/test/java/com/azure/core/http/jdk/httpclient/JdkHttpClientBuilderTests.java b/sdk/core/azure-core-http-jdk-httpclient/src/test/java/com/azure/core/http/jdk/httpclient/JdkHttpClientBuilderTests.java index a13e7b4e45e6e..7c948d68e28f5 100644 --- a/sdk/core/azure-core-http-jdk-httpclient/src/test/java/com/azure/core/http/jdk/httpclient/JdkHttpClientBuilderTests.java +++ b/sdk/core/azure-core-http-jdk-httpclient/src/test/java/com/azure/core/http/jdk/httpclient/JdkHttpClientBuilderTests.java @@ -151,6 +151,7 @@ public void buildWithHttpProxyFromEnvConfiguration() { new TestConfigurationSource() .put(Configuration.PROPERTY_HTTP_PROXY, "http://" + PROXY_USER_INFO + "localhost:" + PROXY_SERVER_HTTP_PORT) + .put(Configuration.PROPERTY_HTTPS_PROXY, "") .put("java.net.useSystemProxies", "true")).build(); configurationProxyTest(configuration); @@ -193,6 +194,7 @@ private static Stream buildWithExplicitConfigurationProxySupplier() { final Configuration envConfiguration = new ConfigurationBuilder(EMPTY_SOURCE, EMPTY_SOURCE, new TestConfigurationSource().put(Configuration.PROPERTY_HTTP_PROXY, "http://localhost:8888") + .put(Configuration.PROPERTY_HTTPS_PROXY, "") .put(Configuration.PROPERTY_NO_PROXY, "localhost")).build(); arguments.add(Arguments.of(envConfiguration)); diff --git a/sdk/core/azure-core-http-netty/src/test/java/com/azure/core/http/netty/NettyAsyncHttpClientBuilderTests.java b/sdk/core/azure-core-http-netty/src/test/java/com/azure/core/http/netty/NettyAsyncHttpClientBuilderTests.java index adb258481a3f1..e0a0abc61676e 100644 --- a/sdk/core/azure-core-http-netty/src/test/java/com/azure/core/http/netty/NettyAsyncHttpClientBuilderTests.java +++ b/sdk/core/azure-core-http-netty/src/test/java/com/azure/core/http/netty/NettyAsyncHttpClientBuilderTests.java @@ -290,6 +290,7 @@ private static Stream buildWithEnvConfigurationProxySupplier() { Configuration simpleEnvProxy = new ConfigurationBuilder(EMPTY_SOURCE, EMPTY_SOURCE, new TestConfigurationSource().put(Configuration.PROPERTY_HTTP_PROXY, "http://localhost:12345") + .put(Configuration.PROPERTY_HTTPS_PROXY, "") .put(JAVA_SYSTEM_PROXY_PREREQUISITE, "true")).build(); arguments.add(Arguments.of(true, false, simpleEnvProxy, DEFAULT_URL)); @@ -304,6 +305,7 @@ private static Stream buildWithEnvConfigurationProxySupplier() { Configuration envProxyWithAuthentication = new ConfigurationBuilder(EMPTY_SOURCE, EMPTY_SOURCE, new TestConfigurationSource().put(Configuration.PROPERTY_HTTP_PROXY, "http://1:1@localhost:12345") + .put(Configuration.PROPERTY_HTTPS_PROXY, "") .put(JAVA_SYSTEM_PROXY_PREREQUISITE, "true")).build(); arguments.add(Arguments.of(true, true, envProxyWithAuthentication, DEFAULT_URL)); @@ -329,6 +331,7 @@ private static Stream buildWithEnvConfigurationProxySupplier() { = () -> baseJavaProxyConfigurationSupplier.get().put(JAVA_NON_PROXY_HOSTS, rawJavaNonProxyHosts); Supplier envNonProxyHostsSupplier = () -> new TestConfigurationSource().put(Configuration.PROPERTY_HTTP_PROXY, "http://localhost:12345") + .put(Configuration.PROPERTY_HTTPS_PROXY, "") .put(Configuration.PROPERTY_NO_PROXY, rawEnvNonProxyHosts) .put(JAVA_SYSTEM_PROXY_PREREQUISITE, "true"); @@ -356,6 +359,7 @@ private static Stream buildWithEnvConfigurationProxySupplier() { = () -> javaNonProxyHostsSupplier.get().put(JAVA_HTTP_PROXY_USER, "1").put(JAVA_HTTP_PROXY_PASSWORD, "1"); Supplier authenticatedEnvNonProxyHostsSupplier = () -> new TestConfigurationSource().put(Configuration.PROPERTY_HTTP_PROXY, "http://1:1@localhost:12345") + .put(Configuration.PROPERTY_HTTPS_PROXY, "") .put(Configuration.PROPERTY_NO_PROXY, rawEnvNonProxyHosts) .put(JAVA_SYSTEM_PROXY_PREREQUISITE, "true"); diff --git a/sdk/core/azure-core-http-okhttp/src/test/java/com/azure/core/http/okhttp/OkHttpAsyncHttpClientBuilderTests.java b/sdk/core/azure-core-http-okhttp/src/test/java/com/azure/core/http/okhttp/OkHttpAsyncHttpClientBuilderTests.java index 066cfd98590cf..009cc9a5ecd70 100644 --- a/sdk/core/azure-core-http-okhttp/src/test/java/com/azure/core/http/okhttp/OkHttpAsyncHttpClientBuilderTests.java +++ b/sdk/core/azure-core-http-okhttp/src/test/java/com/azure/core/http/okhttp/OkHttpAsyncHttpClientBuilderTests.java @@ -455,6 +455,7 @@ private static Stream buildWithEnvConfigurationProxySupplier() { Configuration simpleEnvProxy = new ConfigurationBuilder(EMPTY_SOURCE, EMPTY_SOURCE, new TestConfigurationSource().put(Configuration.PROPERTY_HTTP_PROXY, "http://localhost:12345") + .put(Configuration.PROPERTY_HTTPS_PROXY, "") .put(JAVA_SYSTEM_PROXY_PREREQUISITE, "true")).build(); arguments.add(Arguments.of(true, simpleEnvProxy, SERVER_HTTP_URI + DEFAULT_PATH)); @@ -468,6 +469,7 @@ private static Stream buildWithEnvConfigurationProxySupplier() { Configuration envProxyWithAuthentication = new ConfigurationBuilder(EMPTY_SOURCE, EMPTY_SOURCE, new TestConfigurationSource().put(Configuration.PROPERTY_HTTP_PROXY, "http://1:1@localhost:12345") + .put(Configuration.PROPERTY_HTTPS_PROXY, "") .put(JAVA_SYSTEM_PROXY_PREREQUISITE, "true")).build(); arguments.add(Arguments.of(true, envProxyWithAuthentication, SERVER_HTTP_URI + DEFAULT_PATH)); diff --git a/sdk/core/azure-core-http-vertx/src/test/java/com/azure/core/http/vertx/VertxHttpClientBuilderTests.java b/sdk/core/azure-core-http-vertx/src/test/java/com/azure/core/http/vertx/VertxHttpClientBuilderTests.java index ecc6f3ce4c0cb..cee7e74a07b7c 100644 --- a/sdk/core/azure-core-http-vertx/src/test/java/com/azure/core/http/vertx/VertxHttpClientBuilderTests.java +++ b/sdk/core/azure-core-http-vertx/src/test/java/com/azure/core/http/vertx/VertxHttpClientBuilderTests.java @@ -135,6 +135,7 @@ public void buildWithHttpProxyFromEnvConfiguration() { new TestConfigurationSource() .put(Configuration.PROPERTY_HTTP_PROXY, "http://" + PROXY_USER_INFO + "localhost:" + PROXY_SERVER_HTTP_PORT) + .put(Configuration.PROPERTY_HTTPS_PROXY, "") .put("java.net.useSystemProxies", "true")).build(); HttpClient httpClient = new VertxHttpClientBuilder().configuration(configuration).build(); From 6da79fc66df5b2f93241da6ca7957252feec8499 Mon Sep 17 00:00:00 2001 From: alzimmermsft <48699787+alzimmermsft@users.noreply.github.com> Date: Tue, 13 Oct 2026 14:11:25 -0400 Subject: [PATCH 19/21] Fix linting --- .../core/http/models/ProxyOptionsTests.java | 36 ++++++++----------- .../httpclient/JdkHttpClientBuilderTests.java | 10 +++--- .../NettyAsyncHttpClientBuilderTests.java | 2 +- .../vertx/VertxHttpClientBuilderTests.java | 10 +++--- 4 files changed, 23 insertions(+), 35 deletions(-) diff --git a/sdk/clientcore/core/src/test/java/io/clientcore/core/http/models/ProxyOptionsTests.java b/sdk/clientcore/core/src/test/java/io/clientcore/core/http/models/ProxyOptionsTests.java index 06162aa45c8da..9617412cd76d5 100644 --- a/sdk/clientcore/core/src/test/java/io/clientcore/core/http/models/ProxyOptionsTests.java +++ b/sdk/clientcore/core/src/test/java/io/clientcore/core/http/models/ProxyOptionsTests.java @@ -234,43 +234,35 @@ public void invalidHttpPortEnvironmentConfigDefault(String port) { private static Stream loadFromEnvironmentSupplier() { return Stream.of( // Basic Azure HTTPS proxy. - Arguments.of( - setJavaSystemProxyPrerequisiteToTrue(AZURE_HTTPS_PROXY_HOST_ONLY, null, true), - PROXY_HOST, 443, null, null, null), + Arguments.of(setJavaSystemProxyPrerequisiteToTrue(AZURE_HTTPS_PROXY_HOST_ONLY, null, true), PROXY_HOST, 443, + null, null, null), // Username only Azure HTTPS proxy. - Arguments.of( - setJavaSystemProxyPrerequisiteToTrue(AZURE_HTTPS_PROXY_WITH_USERNAME, null, true), - PROXY_HOST, 443, null, null, null), + Arguments.of(setJavaSystemProxyPrerequisiteToTrue(AZURE_HTTPS_PROXY_WITH_USERNAME, null, true), PROXY_HOST, + 443, null, null, null), // Complete Azure HTTPS proxy. - Arguments.of( - setJavaSystemProxyPrerequisiteToTrue(AZURE_HTTPS_PROXY_WITH_USER_AND_PASS, null, true), + Arguments.of(setJavaSystemProxyPrerequisiteToTrue(AZURE_HTTPS_PROXY_WITH_USER_AND_PASS, null, true), PROXY_HOST, 443, FAKE_PROXY_USER_PLACEHOLDER, FAKE_PROXY_PASSWORD_PLACEHOLDER, null), // Azure HTTPS proxy with non-proxying hosts. - Arguments.of( - setJavaSystemProxyPrerequisiteToTrue(AZURE_HTTPS_PROXY_HOST_ONLY, NON_PROXY_HOSTS, true), + Arguments.of(setJavaSystemProxyPrerequisiteToTrue(AZURE_HTTPS_PROXY_HOST_ONLY, NON_PROXY_HOSTS, true), PROXY_HOST, 443, null, null, "(" + NON_PROXY_HOSTS + ")"), // Basic Azure HTTP proxy. - Arguments.of( - setJavaSystemProxyPrerequisiteToTrue(AZURE_HTTP_PROXY_HOST_ONLY, null, false), - PROXY_HOST, 80, null, null, null), + Arguments.of(setJavaSystemProxyPrerequisiteToTrue(AZURE_HTTP_PROXY_HOST_ONLY, null, false), PROXY_HOST, 80, + null, null, null), // Username only Azure HTTP proxy. - Arguments.of( - setJavaSystemProxyPrerequisiteToTrue(AZURE_HTTP_PROXY_WITH_USERNAME, null, false), - PROXY_HOST, 80, null, null, null), + Arguments.of(setJavaSystemProxyPrerequisiteToTrue(AZURE_HTTP_PROXY_WITH_USERNAME, null, false), PROXY_HOST, + 80, null, null, null), // Complete Azure HTTP proxy. - Arguments.of( - setJavaSystemProxyPrerequisiteToTrue(AZURE_HTTP_PROXY_WITH_USER_AND_PASS, null, false), + Arguments.of(setJavaSystemProxyPrerequisiteToTrue(AZURE_HTTP_PROXY_WITH_USER_AND_PASS, null, false), PROXY_HOST, 80, FAKE_PROXY_USER_PLACEHOLDER, FAKE_PROXY_PASSWORD_PLACEHOLDER, null), // Azure HTTP proxy with non-proxying hosts. - Arguments.of( - setJavaSystemProxyPrerequisiteToTrue(AZURE_HTTP_PROXY_HOST_ONLY, NON_PROXY_HOSTS, false), + Arguments.of(setJavaSystemProxyPrerequisiteToTrue(AZURE_HTTP_PROXY_HOST_ONLY, NON_PROXY_HOSTS, false), PROXY_HOST, 80, null, null, "(" + NON_PROXY_HOSTS + ")"), /* @@ -432,8 +424,8 @@ private static Stream nonProxyHostsSupplier() { /* * This emulates loading an environment formatted proxy. */ - Configuration environmentProxyConfiguration = setJavaSystemProxyPrerequisiteToTrue("http://localhost:7777", - noProxyNonProxyHosts, true); + Configuration environmentProxyConfiguration + = setJavaSystemProxyPrerequisiteToTrue("http://localhost:7777", noProxyNonProxyHosts, true); Pattern environmentProxyConfigurationPattern = compile(fromConfiguration(environmentProxyConfiguration).getNonProxyHosts(), Pattern.CASE_INSENSITIVE); diff --git a/sdk/core/azure-core-http-jdk-httpclient/src/test/java/com/azure/core/http/jdk/httpclient/JdkHttpClientBuilderTests.java b/sdk/core/azure-core-http-jdk-httpclient/src/test/java/com/azure/core/http/jdk/httpclient/JdkHttpClientBuilderTests.java index 7c948d68e28f5..93a85fea1b911 100644 --- a/sdk/core/azure-core-http-jdk-httpclient/src/test/java/com/azure/core/http/jdk/httpclient/JdkHttpClientBuilderTests.java +++ b/sdk/core/azure-core-http-jdk-httpclient/src/test/java/com/azure/core/http/jdk/httpclient/JdkHttpClientBuilderTests.java @@ -147,12 +147,10 @@ public void buildWithHttpProxy() { @Test public void buildWithHttpProxyFromEnvConfiguration() { - Configuration configuration = new ConfigurationBuilder(EMPTY_SOURCE, EMPTY_SOURCE, - new TestConfigurationSource() - .put(Configuration.PROPERTY_HTTP_PROXY, - "http://" + PROXY_USER_INFO + "localhost:" + PROXY_SERVER_HTTP_PORT) - .put(Configuration.PROPERTY_HTTPS_PROXY, "") - .put("java.net.useSystemProxies", "true")).build(); + Configuration configuration = new ConfigurationBuilder(EMPTY_SOURCE, EMPTY_SOURCE, new TestConfigurationSource() + .put(Configuration.PROPERTY_HTTP_PROXY, "http://" + PROXY_USER_INFO + "localhost:" + PROXY_SERVER_HTTP_PORT) + .put(Configuration.PROPERTY_HTTPS_PROXY, "") + .put("java.net.useSystemProxies", "true")).build(); configurationProxyTest(configuration); } diff --git a/sdk/core/azure-core-http-netty/src/test/java/com/azure/core/http/netty/NettyAsyncHttpClientBuilderTests.java b/sdk/core/azure-core-http-netty/src/test/java/com/azure/core/http/netty/NettyAsyncHttpClientBuilderTests.java index e0a0abc61676e..2e87c7b7088a6 100644 --- a/sdk/core/azure-core-http-netty/src/test/java/com/azure/core/http/netty/NettyAsyncHttpClientBuilderTests.java +++ b/sdk/core/azure-core-http-netty/src/test/java/com/azure/core/http/netty/NettyAsyncHttpClientBuilderTests.java @@ -331,7 +331,7 @@ private static Stream buildWithEnvConfigurationProxySupplier() { = () -> baseJavaProxyConfigurationSupplier.get().put(JAVA_NON_PROXY_HOSTS, rawJavaNonProxyHosts); Supplier envNonProxyHostsSupplier = () -> new TestConfigurationSource().put(Configuration.PROPERTY_HTTP_PROXY, "http://localhost:12345") - .put(Configuration.PROPERTY_HTTPS_PROXY, "") + .put(Configuration.PROPERTY_HTTPS_PROXY, "") .put(Configuration.PROPERTY_NO_PROXY, rawEnvNonProxyHosts) .put(JAVA_SYSTEM_PROXY_PREREQUISITE, "true"); diff --git a/sdk/core/azure-core-http-vertx/src/test/java/com/azure/core/http/vertx/VertxHttpClientBuilderTests.java b/sdk/core/azure-core-http-vertx/src/test/java/com/azure/core/http/vertx/VertxHttpClientBuilderTests.java index cee7e74a07b7c..5505ad215efc1 100644 --- a/sdk/core/azure-core-http-vertx/src/test/java/com/azure/core/http/vertx/VertxHttpClientBuilderTests.java +++ b/sdk/core/azure-core-http-vertx/src/test/java/com/azure/core/http/vertx/VertxHttpClientBuilderTests.java @@ -131,12 +131,10 @@ public void buildWithHttpProxy() { @Test public void buildWithHttpProxyFromEnvConfiguration() { - Configuration configuration = new ConfigurationBuilder(EMPTY_SOURCE, EMPTY_SOURCE, - new TestConfigurationSource() - .put(Configuration.PROPERTY_HTTP_PROXY, - "http://" + PROXY_USER_INFO + "localhost:" + PROXY_SERVER_HTTP_PORT) - .put(Configuration.PROPERTY_HTTPS_PROXY, "") - .put("java.net.useSystemProxies", "true")).build(); + Configuration configuration = new ConfigurationBuilder(EMPTY_SOURCE, EMPTY_SOURCE, new TestConfigurationSource() + .put(Configuration.PROPERTY_HTTP_PROXY, "http://" + PROXY_USER_INFO + "localhost:" + PROXY_SERVER_HTTP_PORT) + .put(Configuration.PROPERTY_HTTPS_PROXY, "") + .put("java.net.useSystemProxies", "true")).build(); HttpClient httpClient = new VertxHttpClientBuilder().configuration(configuration).build(); From 2fa61db78570d599ce1eb4b031a25eb2b483ee12 Mon Sep 17 00:00:00 2001 From: alzimmermsft <48699787+alzimmermsft@users.noreply.github.com> Date: Tue, 13 Oct 2026 14:51:53 -0400 Subject: [PATCH 20/21] More test fixes --- .../azure/core/http/netty/NettyAsyncHttpClientBuilderTests.java | 2 ++ .../core/http/okhttp/OkHttpAsyncHttpClientBuilderTests.java | 2 ++ 2 files changed, 4 insertions(+) diff --git a/sdk/core/azure-core-http-netty/src/test/java/com/azure/core/http/netty/NettyAsyncHttpClientBuilderTests.java b/sdk/core/azure-core-http-netty/src/test/java/com/azure/core/http/netty/NettyAsyncHttpClientBuilderTests.java index 2e87c7b7088a6..e93d31a8978ce 100644 --- a/sdk/core/azure-core-http-netty/src/test/java/com/azure/core/http/netty/NettyAsyncHttpClientBuilderTests.java +++ b/sdk/core/azure-core-http-netty/src/test/java/com/azure/core/http/netty/NettyAsyncHttpClientBuilderTests.java @@ -291,6 +291,7 @@ private static Stream buildWithEnvConfigurationProxySupplier() { Configuration simpleEnvProxy = new ConfigurationBuilder(EMPTY_SOURCE, EMPTY_SOURCE, new TestConfigurationSource().put(Configuration.PROPERTY_HTTP_PROXY, "http://localhost:12345") .put(Configuration.PROPERTY_HTTPS_PROXY, "") + .put(Configuration.PROPERTY_NO_PROXY, "") .put(JAVA_SYSTEM_PROXY_PREREQUISITE, "true")).build(); arguments.add(Arguments.of(true, false, simpleEnvProxy, DEFAULT_URL)); @@ -306,6 +307,7 @@ private static Stream buildWithEnvConfigurationProxySupplier() { Configuration envProxyWithAuthentication = new ConfigurationBuilder(EMPTY_SOURCE, EMPTY_SOURCE, new TestConfigurationSource().put(Configuration.PROPERTY_HTTP_PROXY, "http://1:1@localhost:12345") .put(Configuration.PROPERTY_HTTPS_PROXY, "") + .put(Configuration.PROPERTY_NO_PROXY, "") .put(JAVA_SYSTEM_PROXY_PREREQUISITE, "true")).build(); arguments.add(Arguments.of(true, true, envProxyWithAuthentication, DEFAULT_URL)); diff --git a/sdk/core/azure-core-http-okhttp/src/test/java/com/azure/core/http/okhttp/OkHttpAsyncHttpClientBuilderTests.java b/sdk/core/azure-core-http-okhttp/src/test/java/com/azure/core/http/okhttp/OkHttpAsyncHttpClientBuilderTests.java index 009cc9a5ecd70..79b98573d01f2 100644 --- a/sdk/core/azure-core-http-okhttp/src/test/java/com/azure/core/http/okhttp/OkHttpAsyncHttpClientBuilderTests.java +++ b/sdk/core/azure-core-http-okhttp/src/test/java/com/azure/core/http/okhttp/OkHttpAsyncHttpClientBuilderTests.java @@ -456,6 +456,7 @@ private static Stream buildWithEnvConfigurationProxySupplier() { Configuration simpleEnvProxy = new ConfigurationBuilder(EMPTY_SOURCE, EMPTY_SOURCE, new TestConfigurationSource().put(Configuration.PROPERTY_HTTP_PROXY, "http://localhost:12345") .put(Configuration.PROPERTY_HTTPS_PROXY, "") + .put(Configuration.PROPERTY_NO_PROXY, "") .put(JAVA_SYSTEM_PROXY_PREREQUISITE, "true")).build(); arguments.add(Arguments.of(true, simpleEnvProxy, SERVER_HTTP_URI + DEFAULT_PATH)); @@ -470,6 +471,7 @@ private static Stream buildWithEnvConfigurationProxySupplier() { Configuration envProxyWithAuthentication = new ConfigurationBuilder(EMPTY_SOURCE, EMPTY_SOURCE, new TestConfigurationSource().put(Configuration.PROPERTY_HTTP_PROXY, "http://1:1@localhost:12345") .put(Configuration.PROPERTY_HTTPS_PROXY, "") + .put(Configuration.PROPERTY_NO_PROXY, "") .put(JAVA_SYSTEM_PROXY_PREREQUISITE, "true")).build(); arguments.add(Arguments.of(true, envProxyWithAuthentication, SERVER_HTTP_URI + DEFAULT_PATH)); From 1b349728d3a954f8701943db407be3a08024b1ea Mon Sep 17 00:00:00 2001 From: alzimmermsft <48699787+alzimmermsft@users.noreply.github.com> Date: Tue, 13 Oct 2026 18:05:56 -0400 Subject: [PATCH 21/21] PR feedback --- eng/versioning/external_dependencies.txt | 2 +- sdk/clientcore/http-netty4/CHANGELOG.md | 2 +- sdk/core/azure-core-http-netty/CHANGELOG.md | 2 +- sdk/core/azure-core-http-netty/README.md | 2 +- sdk/core/azure-core-http-netty/cgmanifest.json | 2 +- .../azure/core/http/netty/implementation/NettyUtility.java | 3 ++- sdk/cosmos/azure-cosmos/CHANGELOG.md | 2 +- sdk/openai/azure-ai-openai-realtime/CHANGELOG.md | 4 ++-- sdk/webpubsub/azure-messaging-webpubsub-client/CHANGELOG.md | 2 +- 9 files changed, 11 insertions(+), 10 deletions(-) diff --git a/eng/versioning/external_dependencies.txt b/eng/versioning/external_dependencies.txt index 4c8912688f40d..0d4bd6af14c10 100644 --- a/eng/versioning/external_dependencies.txt +++ b/eng/versioning/external_dependencies.txt @@ -304,7 +304,7 @@ springboot4_com.mysql:mysql-connector-j;9.7.0 springboot4_com.nimbusds:nimbus-jose-jwt;10.8 springboot4_io.lettuce:lettuce-core;7.5.2.RELEASE springboot4_io.micrometer:micrometer-core;1.17.1 -springboot4_io.netty:netty-buffer;4.2.19.Final +springboot4_io.netty:netty-buffer;4.2.17.Final springboot4_io.netty:netty-codec-http;4.2.17.Final springboot4_io.netty:netty-common;4.2.17.Final springboot4_io.netty:netty-handler;4.2.17.Final diff --git a/sdk/clientcore/http-netty4/CHANGELOG.md b/sdk/clientcore/http-netty4/CHANGELOG.md index 3c4880097307d..98163b4239585 100644 --- a/sdk/clientcore/http-netty4/CHANGELOG.md +++ b/sdk/clientcore/http-netty4/CHANGELOG.md @@ -10,6 +10,6 @@ ### Other Changes -- Upgraded Netty to `4.2.18.Final`, using I/O handler factories for event loops while preserving pooled buffer allocation +- Upgraded Netty to `4.2.19.Final`, using I/O handler factories for event loops while preserving pooled buffer allocation unless `io.netty.allocator.type` is explicitly configured. - Preserved HTTP/2 response decompression with Netty's separate compression module when using Java modules. diff --git a/sdk/core/azure-core-http-netty/CHANGELOG.md b/sdk/core/azure-core-http-netty/CHANGELOG.md index 517b4d625e2ed..db11cd9233df7 100644 --- a/sdk/core/azure-core-http-netty/CHANGELOG.md +++ b/sdk/core/azure-core-http-netty/CHANGELOG.md @@ -15,7 +15,7 @@ #### Dependency Updates -- Migrated Netty dependencies from `4.1.137.Final` to `4.2.18.Final`. +- Migrated Netty dependencies from `4.1.137.Final` to `4.2.19.Final`. - Upgraded Reactor Netty from `1.2.18` to `1.3.7` and Reactor from `3.7.19` to `3.8.7`. ## 1.16.8 (2026-09-29) diff --git a/sdk/core/azure-core-http-netty/README.md b/sdk/core/azure-core-http-netty/README.md index dbbb99d78464c..0489ce5573be8 100644 --- a/sdk/core/azure-core-http-netty/README.md +++ b/sdk/core/azure-core-http-netty/README.md @@ -57,7 +57,7 @@ add the direct dependency to your project as follows. ### Netty 4.2 compatibility -Starting with `1.17.0-beta.1`, this library uses Netty `4.2.18.Final`, Reactor Netty `1.3.7`, and Reactor `3.8.7`. +Starting with `1.17.0-beta.1`, this library uses Netty `4.2.19.Final`, Reactor Netty `1.3.7`, and Reactor `3.8.7`. Netty 4.1 and 4.2 must not be mixed on the classpath. If your application or framework manages these dependencies, align the entire Netty and Reactor stack when upgrading. Java 8 remains supported. diff --git a/sdk/core/azure-core-http-netty/cgmanifest.json b/sdk/core/azure-core-http-netty/cgmanifest.json index c19810b2ecec7..0f3d3948a2dd0 100644 --- a/sdk/core/azure-core-http-netty/cgmanifest.json +++ b/sdk/core/azure-core-http-netty/cgmanifest.json @@ -9,7 +9,7 @@ "maven": { "groupId": "io.netty", "artifactId": "netty-handler-proxy", - "version": "4.2.18.Final" + "version": "4.2.19.Final" } } } 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 d72427d235cb3..233bca94b296e 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 @@ -38,7 +38,8 @@ public final class NettyUtility { // the SDK will fall back to using the JDK implementations. private static final List REQUIRED_NETTY_VERSION_ARTIFACTS = Arrays.asList("netty-common", "netty-handler", "netty-handler-proxy", "netty-buffer", "netty-codec-base", - "netty-codec-compression", "netty-codec-http", "netty-codec-http2", "netty-codec-socks"); + "netty-codec-compression", "netty-codec-dns", "netty-codec-http", "netty-codec-http2", "netty-codec-socks", + "netty-resolver", "netty-resolver-dns", "netty-transport"); private static final List OPTIONAL_NETTY_VERSION_ARTIFACTS = Arrays .asList("netty-transport-native-unix-common", "netty-transport-native-epoll", "netty-transport-native-kqueue"); diff --git a/sdk/cosmos/azure-cosmos/CHANGELOG.md b/sdk/cosmos/azure-cosmos/CHANGELOG.md index 21159412152a1..2cab777b4aeef 100644 --- a/sdk/cosmos/azure-cosmos/CHANGELOG.md +++ b/sdk/cosmos/azure-cosmos/CHANGELOG.md @@ -11,7 +11,7 @@ #### Other Changes -* Updated Netty to `4.2.18.Final`, Reactor Netty to `1.3.7`, and Reactor Core to `3.8.7`. Migrated direct TCP event loops to the Netty 4.2 I/O handler API while preserving pooled buffers and explicit TLS validation settings. +* Updated Netty to `4.2.19.Final`, Reactor Netty to `1.3.7`, and Reactor Core to `3.8.7`. Migrated direct TCP event loops to the Netty 4.2 I/O handler API while preserving pooled buffers and explicit TLS validation settings. * Added a compact `ppaf` bookmark to each data-plane attempt in `CosmosDiagnostics`, containing the current per-partition write region, failed regions, and the time it was designated, or an empty object when no override is active. ### 4.83.0 (2026-09-22) diff --git a/sdk/openai/azure-ai-openai-realtime/CHANGELOG.md b/sdk/openai/azure-ai-openai-realtime/CHANGELOG.md index bc00a2f5cd4c9..29ba79c4bccd4 100644 --- a/sdk/openai/azure-ai-openai-realtime/CHANGELOG.md +++ b/sdk/openai/azure-ai-openai-realtime/CHANGELOG.md @@ -2,8 +2,8 @@ #### Dependency Updates -- Migrated `netty-codec-http` to `4.2.18.Final` and updated WebSocket event loops for Netty 4.2. +- Migrated `netty-codec-http` to `4.2.19.Final` and updated WebSocket event loops for Netty 4.2. ## 1.0.0-beta.1 (TBD) -- Azure OpenAI Realtime client library for Java. \ No newline at end of file +- Azure OpenAI Realtime client library for Java. diff --git a/sdk/webpubsub/azure-messaging-webpubsub-client/CHANGELOG.md b/sdk/webpubsub/azure-messaging-webpubsub-client/CHANGELOG.md index 73356e0da05b9..cdb638dfd811e 100644 --- a/sdk/webpubsub/azure-messaging-webpubsub-client/CHANGELOG.md +++ b/sdk/webpubsub/azure-messaging-webpubsub-client/CHANGELOG.md @@ -14,7 +14,7 @@ #### Dependency Updates -- Migrated `netty-codec-http` to `4.2.18.Final` and updated WebSocket event loops for Netty 4.2. +- Migrated `netty-codec-http` to `4.2.19.Final` and updated WebSocket event loops for Netty 4.2. ## 1.1.11 (2026-10-06)