v4.1.3
- Revert to previous parsePath logic by @jguerra in https://github.com/Netflix/zuul/pull/2202
Full Changelog: https://github.com/Netflix/zuul/compare/v4.1.2...v4.1.3
v4.1.2
- build(deps): bump gradle-wrapper from 9.2.1 to 9.6.1 by @dependabot[bot] in https://github.com/Netflix/zuul/pull/2180
- build(deps): bump org.apache.logging.log4j:log4j-core from 2.25.1 to 2.26.1 by @dependabot[bot] in https://github.com/Netflix/zuul/pull/2178
- build(deps): bump org.apache.logging.log4j:log4j-slf4j2-impl from 2.25.2 to 2.26.1 by @dependabot[bot] in https://github.com/Netflix/zuul/pull/2179
- build(deps): bump com.google.guava:guava from 33.3.0-jre to 33.6.0-jre by @dependabot[bot] in https://github.com/Netflix/zuul/pull/2177
- Bump jackson version and regenerate locks by @jguerra in https://github.com/Netflix/zuul/pull/2188
- build(deps): bump com.netflix.eureka:eureka-client from 2.0.4 to 2.0.6 by @dependabot[bot] in https://github.com/Netflix/zuul/pull/2192
- build(deps): bump org.apache.commons:commons-lang3 from 3.18.0 to 3.20.0 by @dependabot[bot] in https://github.com/Netflix/zuul/pull/2189
- build(deps): bump com.uber.nullaway:nullaway from 0.13.7 to 0.13.8 by @dependabot[bot] in https://github.com/Netflix/zuul/pull/2193
- build(deps): bump org.slf4j:slf4j-api from 2.0.16 to 2.0.18 by @dependabot[bot] in https://github.com/Netflix/zuul/pull/2191
- build(deps): bump com.palantir.javaformat:gradle-palantir-java-format from 2.94.0 to 2.96.0 by @dependabot[bot] in https://github.com/Netflix/zuul/pull/2196
- Extract parse path to helper by @jguerra in https://github.com/Netflix/zuul/pull/2195
- regenerate locks by @jguerra in https://github.com/Netflix/zuul/pull/2201
- Retry on CLOSE_NOTIFY_CONNECTION by @fool1280 in https://github.com/Netflix/zuul/pull/2198
Full Changelog: https://github.com/Netflix/zuul/compare/v4.1.1...v4.1.2
v4.1.1
- Strip X-Forwarded-Host, X-Forwarded-Prefix and Forwarded from untrusted connections by @fool1280 in https://github.com/Netflix/zuul/pull/2186
- Further path normalization by @fool1280 in https://github.com/Netflix/zuul/pull/2185
Full Changelog: https://github.com/Netflix/zuul/compare/v4.1.0...v4.1.1
v4.1.0
- build(deps): bump org.wiremock:wiremock from 3.10.0 to 3.13.2 by @dependabot[bot] in https://github.com/Netflix/zuul/pull/2173
- build(deps): bump com.palantir.javaformat:gradle-palantir-java-format from 2.83.0 to 2.94.0 by @dependabot[bot] in https://github.com/Netflix/zuul/pull/2164
- build(deps): bump com.diffplug.spotless from 8.1.0 to 8.8.0 by @dependabot[bot] in https://github.com/Netflix/zuul/pull/2165
- Reformat with spotless by @jguerra in https://github.com/Netflix/zuul/pull/2182
- Add new connection pool options for using default buffer sizing by @jguerra in https://github.com/Netflix/zuul/pull/2176
Full Changelog: https://github.com/Netflix/zuul/compare/v4.0.0...v4.1.0
v4.0.0
Zuul 4.0.0 replaces the RxJava Observable based async filter execution with CompletableFuture. RxJava 1.x is long past end-of-life, and moving to CompletableFuture lets the filter runner drop its custom RxJava Scheduler and Observer for plain JDK primitives.
ZuulFilter.applyAsyncnow returnsCompletableFuture<O>instead ofObservable<O>. The Observable-based method is renamed toapplyAsyncObservableand deprecated. Both have default bridge implementations on the interface, so a filter can override either one (#2075)- The
debugRouting/debugRequestinfrastructure is removed (#2078) - Connection draining is now event-based rather than channel-attribute based (#2161). Zuul-core fires a
ConnectionCloseEventdown the pipeline instead of setting a channel attribute that every write has to check, so a graceful shutdown starts immediately on the event instead of waiting for the next response (an idle HTTP/1.1 connection can be closed right away), and OOS closes get random jitter to spread them out. The close handlers were reworked andCLOSE_AFTER_RESPONSEwas removed - see Connection draining below SessionContextno longer extendsHashMap<String, Object>; it now wraps one via composition (#2171) and is@NullMarked(#2174). The commonMapmethods are re-exposed directly, but code that relied on it being aMapneeds updating, and nullmarking turns the accessors@Nullablewhich can surface new NullAway warnings in consumers. ThegetRouteHost/setRouteHost/removeRouteHostaccessors are removed - use the genericget/setwith your ownKey<T>.
A filter overriding applyAsync to return an Observable will not compile against 4.0.0. The minimal fix is a one-line rename:
Before:
@Override
public Observable<HttpResponseMessage> applyAsync(HttpRequestMessage request) {
return service.call(request).map(this::toResponse);
}
After:
@Override
public Observable<HttpResponseMessage> applyAsyncObservable(HttpRequestMessage request) {
return service.call(request).map(this::toResponse);
}
The default applyAsync bridges applyAsyncObservable back to a CompletableFuture, so the rest of the filter keeps working unchanged. The filter should be rewritten to return a CompletableFuture directly and delete applyAsyncObservable. applyAsyncObservable will be removed entirely in a later 4.x release.
Consumers that build their own channel pipelines need small updates:
- The close and expiry handlers moved to the
com.netflix.netty.common.closepackage - HTTP/2 connection close now lives on the connection pipeline, not the stream - drop any stream-level close-handler wiring
CLOSE_AFTER_RESPONSE/ theallow_then_closerejection type is gone; throttled connections just close
Also in this release: lazy hashCode caching (#2085), Objects.requireNonNull / @NonNull over preconditions (#2090), removal of unused classes (#2153), and a switch to typed SessionContext.Key<T> keys instead of stringly-typed context keys, both in the filter runner (#2167) and across SessionContext's own internal state (#2174).
Full Changelog: https://github.com/Netflix/zuul/compare/v3.6.21...v4.0.0
v3.6.21
- build(deps): bump com.uber.nullaway:nullaway from 0.13.1 to 0.13.7 by @dependabot[bot] in https://github.com/Netflix/zuul/pull/2166
- build(deps): bump actions/checkout from 6 to 7 by @dependabot[bot] in https://github.com/Netflix/zuul/pull/2150
- Upgrade Netty to v4.2.16.Final by @gavinbunney in https://github.com/Netflix/zuul/pull/2175
Full Changelog: https://github.com/Netflix/zuul/compare/v3.6.20...v3.6.21
v3.6.20
- Add
Headers.collapseMultiValuedHeaders()by @gavinbunney in https://github.com/Netflix/zuul/pull/2172
Full Changelog: https://github.com/Netflix/zuul/compare/v3.6.19...v3.6.20
v3.6.19
- Make http2 graceful shutdown timeouts configurable by @jguerra in https://github.com/Netflix/zuul/pull/2162
- Fix server shutdown hook logic by @jguerra in https://github.com/Netflix/zuul/pull/2163
- Skip filters with a no-op processContentChunk during chunk processing by @gavinbunney in https://github.com/Netflix/zuul/pull/2168
- Avoid allocating an iterator per filter in
FilterConstraints.isConstrainedby @gavinbunney in https://github.com/Netflix/zuul/pull/2169
Full Changelog: https://github.com/Netflix/zuul/compare/v3.6.18...v3.6.19
v3.6.18
- Resolve
FilterConstraints once and key theisConstrainedcache byClassby @gavinbunney in https://github.com/Netflix/zuul/pull/2158 - Add single-pass
setAlltoHeadersthat preserves multi-valued headers by @gavinbunney in https://github.com/Netflix/zuul/pull/2157
Full Changelog: https://github.com/Netflix/zuul/compare/v3.6.17...v3.6.18
v3.6.17
- Add zero-allocation iteration helpers to
Headersby @gavinbunney in https://github.com/Netflix/zuul/pull/2154 - Build origin requests and client responses with the allocation-free
Headersiterators by @gavinbunney in https://github.com/Netflix/zuul/pull/2155
Full Changelog: https://github.com/Netflix/zuul/compare/v3.6.16...v3.6.17