reactor-core 3.3.3.RELEASE is part of Californium-SR16 Release Train.
⚠️ Update considerations and deprecations
- Added a
deferopt-in inVirtualTimeScheduler.create(#1251, #2012)- Manually-created
VirtualTimeSchedulerwill now eagerly advance time even if there is no pending task. Use the overload withdefer=trueto get the old default behavior. StepVerifier-created ones will continue lazily advancing time when no task is scheduled, in order to make testing of things like delays inside aflatMappossible.
- Manually-created
- For users of
fromStreamandfromIterablewith custom non-CollectionIterables, see #2014 and #2021- the
iterator()method is now invoked twice per wrapping of a givenIterable(once through defaultspliterator()to check the iterable is finite aka.hasCharacteristic(SIZED), once for the iteration itself)
- the
✨ New features and improvements
- Fixed Flux.replay / Flux.cache hanging or serving wrong values, by correctly replaying request(UNBOUNDED) when no early subscriber (#2030, #2028)
- Propagate all req from FluxReplay pre-connect subscribers (#1921)
- Reimplemented boundedElasticScheduler to allow reentrancy (#1992, #2040, #1973)
- Multiple subscribeOn calls with a BoundedElasticScheduler could easily cause deadlock
- This also fixes #1973, although there was an intermediate fix in the old implementation
- From 3.2.15:
- Discard concatMapIterable/fromIterable's remainder on Cancel (#2014)
- the remainder of the internal
Iteratoris discarded when cancelled mid-iteration - we avoid the risk of iterating an infinite iterator by first checking if the
Iterableis aCollectionor itsSpliteratorhas theSIZEDcharacteristic. - the above check can result in at most 2 calls to
Iterable#iteratorfor custom iterables
- the remainder of the internal
- [polish] Improve onDiscardMultiple/QueueWithClear resiliency (#2021)
- Discard concatMapIterable/fromIterable's remainder on Cancel (#2014)
🪲 Bug fixes
- Avoid parallel insertion in Context's default putAll with foreign Context implementation (#2050)
- From 3.2.15:
- Account for requests made to upstream in FluxBufferPredicate (#1937, #2029)
- collect() discards on consumer error when fused (#2042)
- Unconditionally dispose worker in MonoSubscribeOn#cancel (#2037)
- Pass on cancelSupport when lifting ConnectableLiftFuseable (#1860)
- Correctly count continued errors on flatmapped callable (#2011)
- Handle "empty
Callable" inFlux#collectList(#2023, #2024) - Fix fused last(T) not delivering defaultValue (#2020)
📖 Documentation, Tests and Build
- Document Flux#next() behavior for an empty Flux (#1899)