v4.1.9
- Match query param names verbatim in HttpQueryParams.get by @lenamonj in https://github.com/Netflix/zuul/pull/2213
- Add method for case insensitive query param lookup by @jguerra in https://github.com/Netflix/zuul/pull/2224
- @lenamonj made their first contribution in https://github.com/Netflix/zuul/pull/2213
Full Changelog: https://github.com/Netflix/zuul/compare/v4.1.8...v4.1.9
v4.1.8
- build(deps): bump actions/setup-java from 5 to 6 by @dependabot[bot] in https://github.com/Netflix/zuul/pull/2209
- build(deps): bump gradle/actions from 6 to 6.2.0 by @dependabot[bot] in https://github.com/Netflix/zuul/pull/2204
- build(deps): bump actions/stale from 10 to 11 by @dependabot[bot] in https://github.com/Netflix/zuul/pull/2203
- build(deps): bump org.openrewrite.rewrite from 7.12.1 to 7.37.0 by @dependabot[bot] in https://github.com/Netflix/zuul/pull/2194
- Use retainedDuplicate when buffering the last content chunk by @tappenzeller in https://github.com/Netflix/zuul/pull/2211
- Avoid per-header allocation in zuul-to-netty handoff by @gavinbunney in https://github.com/Netflix/zuul/pull/2221
Full Changelog: https://github.com/Netflix/zuul/compare/v4.1.7...v4.1.8
v4.1.7
- Updating Netty to version 4.2.18 by @ilanachalom in https://github.com/Netflix/zuul/pull/2214
Full Changelog: https://github.com/Netflix/zuul/compare/v4.1.5...v4.1.7
v4.1.5
- Restrict the headers that are collapsed by @jguerra in https://github.com/Netflix/zuul/pull/2210
Full Changelog: https://github.com/Netflix/zuul/compare/v4.1.4...v4.1.5
v4.1.4
- Switch ConnCounter to rely on PolledMeters by @jguerra in https://github.com/Netflix/zuul/pull/2206
Full Changelog: https://github.com/Netflix/zuul/compare/v4.1.3...v4.1.4
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