Reactor-Core 3.3.0.M1 is part of Dysprosium-M1 Release Train.
This first milestone of the 3.3.x cycle, containing bugfixes and improvements (including changes from the GA 3.2.9.RELEASE). It also contains two API deprecations (Kotlin extensions and WorkQueueProcessor/TopicProcessor).
⚠️ Update considerations and deprecations
- Kotlin extensions have been deprecated and copied to a new artifact (#1697)
- This release train contains the new
reactor-kotlin-extensionsartifact, which will regroup all Kotlin extensions and future Kotlin-related work
- This release train contains the new
WorkQueueProcessorandTopicProcessorhave been deprecated, due to underlying use ofUnsafe(see #1051, #1052)- Recommended core alternative is to combine
EmitterProcessorandpublishOn - The processors have however been copied over to
reactor-extrafor people that want to continue using them as-is
- Recommended core alternative is to combine
✨ New features and improvements
- Compatibility with projects using the Java Module System (JPMS) has been improved by declaring an official
Automatic-Module-Name(reactor.coreandreactor.test, #1641, #1692) - The
CorePublisherinterface has been introduced to distinguishPublisherfrom reactor (#1527) - Add a simplified API for wrapping scheduled tasks (#1546)
- Add an API-preserving hide() method to ConnectableFlux (#1577)
- [reactor-test] Added hasDiscardedMatching method in StepVerifier (#1509)
- [reactor-test] Add ToStringConverter and Extractor to StepVerifierOptions (#1558)
- This allows to override the natural
toStringrepresentation of classes that are known to have an obscure representation, as well as extracting such objects that would be nested in containers like aCollection,Tuple2,Signal, ...
- This allows to override the natural
- Reworked the format of "backtraces" (#1672, #1702)
- Backtraces are the additional callsite information captured by debug mode and checkpoint and appended to onError
Throwableas a suppressed exception
- Backtraces are the additional callsite information captured by debug mode and checkpoint and appended to onError
- Reactor now integrates into Blockhound 1.0.0.M3 using the SPI on reactor side instead of programmatic explicit registration on blockhound side (#1682, #1690)
- (from 3.2:)
- Multiple improvements around resource cleanup and discarding:
- Buffering FluxSinks now discard on cancel vs next race (#1634)
- Null out lastKey to avoid retaining in distinctUntilChanged (#1647)
- Atomically update the state of MonoSubscriber to CANCELLED (f02d8b9)
- Deal with onNext or onComplete vs cancel races in collectList (#1660)
- Operators.onDiscardMultiple now avoids stream and potential NPE (cce04e7)
- Fix displaying of light checkpoints in backtraces (#1646)
- Removed redundant volatiles in switchOnFirst (#1496)
- Set parallel and elastic Schedulers removeOnCancelPolicy to avoid task memory leak (#1674)
🪲 Bug fixes
- [reactor-test] Prevent StepVerifier collect hang when consuming all signals (#1529)
- Unwrap CompletionException in Mono#fromFuture (#1652)
- Fix MonoProcessor#block duration.zero change (c995c01)
- (from 3.2:)
- Fixed a missing exit condition in Flux.publish drain loop with SYNC fusion (#1528)
- ParallelFlux#doOnEach now sees the Context (#1656, #1657)
- onBackpressureBuffer could use a greater-than-configured
maxSize(#1666) - Flux.generate would fail to propagates an exception in some fused scenarios (#1685)
📖 Documentation, Tests and Build
- [doc] Document that BaseSubscriber instances can't be reused (#1490)
- [doc] Small improvements in reference guide (#1594)
- [CI] Sanity check build on JDK12 on Travis (446ca1b)
- [doc] Use the correct marble diagram for Mono#onErrorResume (#1679)
- [build] Polish .gitignore to avoid too broad regex (92ae4e5)
- (from 3.2:)
- [test] Made small adjustments to a few flakky tests (#1643, 957060e, cd94cb9)
- [build] Make downloadBaseline faster by using compression + onlyIfNewer (c436cf0)
- [build] Skip downloadBaseline/japicmp in --offline mode (22691ef)
👍 Thanks to the following contributors that also participated to this release
@aftersss, @Buzzardo, @flambard, @mumukiller, @OlegDokuka, @pmackowski, @szpak