This is the 10th release of Reactor 3.1, part of BISMUTH-SR11 Release Train.
This is a recommended update for all Reactor 3.1 users.
✨ New features and improvements
- Avoid logging
QueueSubscriptionobjects as collections inlog()'sonNext(#1270) - Blocking code detection and rejection has been improved for
toStream()andtoIterable(), and now only reject when the iteration is performed (#1313)- it would previously reject right where the
Iterablewas materialized, but what actually blocks is the act of iterating.
- it would previously reject right where the
- Calling
Mono.from(Flux.from(mono))is now immediately returning themonoinstance, as this is conceptually a no-op. (#1329)- the inverse operation (
Flux.from(Mono.from(flux))) is NOT a no-op as it transforms the originalFluxinto aMono, so it still returns a different instance.
- the inverse operation (
🪲 Bug fixes
- Address multiple
bufferTimeoutandbufferWhenissues (#1247) - Fix a race condition on
refCountquick subscribe-and-cancel (#1260) Flux#publishandEmitterProcessorshould trigger an extra poll during sync fusion (#1290)ParallelFlux, when decorated throughlift()(eg. by instrumenting using Sleuth), would throw anIndexOutOfBoundsException(#1293)Flux#publish,concatMap*could run on the wrongSchedulerwhen fused (#1302)- When using
doOnSuccessand subscribing without an error handler, errors would be swallowed (#1337)- This now generates a
ErrorCallbackNotImplementedexception like in other cases, unless adoOnTerminateis also used - The best practice is still to always define an error handler when using
subscribe(...)
- This now generates a