Skip to content

Releases: reactor/reactor-core

v3.4.28

14 Mar 13:19
Compare
Choose a tag to compare

Reactor-Core 3.4.28 is part of 2020.0.30 Release Train (Europium SR30).

What's Changed

🐞 Bug fixes

📖 Documentation, Tests and Build

🆙 Dependency Upgrades

Full Changelog: v3.4.27...v3.4.28

v3.5.3

14 Feb 19:01
d1c5c1c
Compare
Choose a tag to compare

Reactor-Core 3.5.3 is part of 2022.0.3 Release Train.

What's Changed

⚠️ Update considerations and deprecations

  • ensures empty inner source handled properly in case of sync fusion for concatMapIterable by @OlegDokuka in #3329

✨ New features and improvements

  • Add .singleOptional() to Mono and Flux by @AndreasHuber-CH in #3317
  • Avoid BlockHound NoSuchTypeException when context propagation dependency is unavailable by @pderop in #3337
  • Context propagation with automatic ThreadLocals restoration by @chemicL in #3335

🐞 Bug fixes

  • Remove Traces$SharedSecretsCallSiteSupplierFactory from the native-image configuration by @violetagg in #3339
  • ensures exception is caught if inner fused for FlatMap #3353 by @OlegDokuka in #3353

🆙 Dependency Upgrades

New Contributors

Full Changelog: v3.5.2...v3.5.3

v3.4.27

14 Feb 19:01
cb43648
Compare
Choose a tag to compare

Reactor-Core 3.4.27 is part of 2020.0.28 Release Train (Europium SR28).

What's Changed

⚠️ Update considerations and deprecations

  • ensures empty inner source handled properly in case of sync fusion for concatMapIterable by @OlegDokuka in #3329

🐞 Bug fixes

🆙 Dependency Upgrades

Full Changelog: v3.4.26...v3.4.27

v3.5.2

10 Jan 18:35
Compare
Choose a tag to compare

Reactor-Core 3.5.2 is part of 2022.0.2 Release Train.

What's Changed

🐞 Bug fixes

Full Changelog: v3.5.1...v3.5.2

v3.5.1

13 Dec 20:10
Compare
Choose a tag to compare

Reactor-Core 3.5.1 is part of 2022.0.1 Release Train.

What's Changed

⚠️ Update considerations and deprecations

✨ New features and improvements

  • Ensure given iterable is interacted once per subscriber by @OlegDokuka in #3297

🐞 Bug fixes

📖 Documentation, Tests and Build

New Contributors

Full Changelog: v3.5.0...v3.5.1

v3.4.26

13 Dec 19:33
Compare
Choose a tag to compare

Reactor-Core 3.4.26 is part of 2020.0.26 Release Train (Europium SR26).

What's Changed

⚠️ Update considerations and deprecations

✨ New features and improvements

  • Ensure given iterable is interacted once per subscriber by @OlegDokuka in #3297

🐞 Bug fixes

📖 Documentation, Tests and Build

New Contributors

Full Changelog: v3.4.25...v3.4.26

v3.4.25

15 Nov 11:26
Compare
Choose a tag to compare

Reactor-Core 3.4.25 is part of 2020.0.25 Release Train (Europium SR25).

What's Changed

⚠️ Update considerations and deprecations

⚠️ ⌛ Deprecations

  • Deprecate scheduler start by @chemicL in #3236
    • Scheduler#init() method should be used instead. Restart capability is discouraged and the new method is allowed to throw in case of initializing a disposed instance. Please create a new Scheduler instance when necessary.
    • Implementors of Scheduler should also implement the init() method, which currently delegates to start() in the default implementation.

⚠️ ♻️ Behavior Changes

  • Disable fusion in MonoSubscriber by @UgiR in #3245
    • A number of Mono operators derived from the Operators.MonoSubscriber have stopped negotiating fusion (even though their Publisher still implements Fuseable)
    • The highest impact is likely to be on tests that validate the fusion negotiation (eg. StepVerifier's expectFusion(...))

✨ New features and improvements

🐞 Bug fixes

  • Fix incorrect value/error set during tryEmitXXX call by @OlegDokuka in #3260
  • Fix subscription loss in FluxTakeUntilOther by @simonbasle in #3270 (fixing a 3.4.24 regression)

📖 Documentation, Tests and Build

  • Fix flaky FluxPublishOnTest by @simonbasle in #3241
  • SingleScheduler.isDisposed() only true on disposed instance by @chemicL in #3242
  • Use new GHA API for setting output, latest core actions by @simonbasle in #3237
  • Clean up references to fusion in MonoSubscriber comments by @UgiR in #3261
  • Improve Mono#fromFuture/fromCompletionStage javadocs by @simonbasle in #3272

🆙 Dependency Upgrades

New Contributors

Full Changelog: v3.4.24...v3.4.25

v3.5.0

10 Nov 15:26
Compare
Choose a tag to compare

Reactor-Core 3.5.0 is part of 2022.0.0 Release Train.

This is the first GA release of 2022.0.0 🎉

This note focuses on 3.5.0 proper, curating changes from across all milestones and also includes changes already released as part of 3.4.x line up to 3.4.25.

While there are plenty of improvements and bug fixes, it's worth to highlight the bigger themes first:

  • The Mono stack is now more lazy and complies to the Reactive Streams specification by only evaluating the source Publisher after receiving appropriate demand. Previously this usually happened during subscription time.
  • We reworked the metrics utilities. Please consult the reference documentation for more details.
  • A new context-propagation library has become an important part of the Reactor and Micrometer backbone to allow bridging between reactive and ThreadLocal contextual metadata. Reactor supports this bridging as soon as context-propagation library is present at runtime. Read more in the reference documentation.

Please pay special attention to the following update considerations. More detailed listing of features, bug fixes, and improvements follow.

⚠️ Update considerations and deprecations

⚠️ 🗑️ Removals

  • Remove Kotlin extensions by @simonbasle in #2949
  • Remove deprecated Mono.doOn/AfterSuccessOrError by @simonbasle in #2954
    • The doOn* recommended alternatives include doOnNext(Consumer), doOnError(Consumer), doOnTerminate(Runnable), and doOnSuccess(Consumer),
    • The doAfter* recommended alternatives are doAfterTerminate(Runnable) and doFinally(Consumer).
  • Remove deprecated context-related operators by @simonbasle in #2953
    • deferWithContext(Function) -> use deferContextual(Function) instead,
    • subscriberContext(Context) and subscriberContext(Function) -> use contextWrite(ContextView) and contextWrite(Function) instead,
    • Signal::getContext() -> use Signal::getContextView() instead,
    • Context::putAll(Context) -> use Context::putAll(ContextView) instead.
  • Remove deprecated ElasticScheduler by @simonbasle in #2955
    • Use BoundedElasticScheduler (Schedulers.boundedElastic()) instead.

⚠️ ⌛ Deprecations

  • Introduce new module reactor-core-micrometer by @simonbasle in #3015
    • We introduced a new module, reactor-core-micrometer, and added operators and features supporting the new Observation API of Micrometer 1.10.0, read more about it the release notes.
    • The class reactor.util.Metrics, Flux::metrics() and Mono::metrics() operators have been deprecated.
  • Deprecate [Flux|Mono|Synchronous]Sink currentContext by @simonbasle in #2974, #3021
    • contextView() should be used instead.
  • Deprecate scheduler start by @chemicL in #3236
    • Scheduler#init() method should be used instead. Restart capability is discouraged and the new method is allowed to throw in case of initializing a disposed instance. Please create a new Scheduler instance when necessary.
    • Implementors of Scheduler should also implement the init() method, which currently delegates to start() in the default implementation.

⚠️ ♻️ Behavior Changes

  • Make some Mono sources and aggregators lazier by @OlegDokuka in #3081
  • Change behavior of switchOnNext/switchMap default 0 prefetch by @simonbasle in #2956
  • Have concatMap default to 0 prefetch behavior by @simonbasle in #2967
  • take(n) now behaves as take(n,true)/limitRequest by @simonbasle in #2969
  • SourceException wrapper for main stream errors delivered to windows by @chemicL in #3167
  • Scheduler.isDisposed() only true for disposed instances by @chemicL in #3243
  • adds cancellation of the source future support by @OlegDokuka in #3146
  • Scannable.tags() rework, add tagsDeduplicated() by @simonbasle in #3037
  • Disable fusion in MonoSubscriber by @UgiR in #3245
    • A number of Mono operators derived from the Operators.MonoSubscriber have stopped negotiating fusion (even though their Publisher still implements Fuseable)
    • The highest impact is likely to be on tests that validate the fusion negotiation (eg. StepVerifier's expectFusion(...))

✨ New features and improvements

Context propagation and bridging to ThreadLocals

Observability and logging

Operators and relevant machinery

  • Add 'tap', a generic side-effect/observability operator by @simonbasle in #3013
  • Add Flux.mergePriority, does not wait for all sources to emit by @osi in #3267
  • Introduce an alternative to Processor-with-upstream case by @simonbasle in #3042, #3065
  • Implement variant of windowTimeout with fairBackpressure by @OlegDokuka in #3054
  • Add windowTimeout sendNext early guard against maxSize overflow by @OlegDokuka in #3073
  • Replay terminal signals to late subscribers in Flux.replay(int) and Flux.cache(int) by @chemicL in #3200
  • Add disposeGracefully method to Scheduler by @chemicL in #3089
  • Optimize Scheduler initialization by @chemicL in #3248
  • Limit the number of Scheduler#disposeGracefully threads by @simonbasle in #3259
  • Add key hook parts to Schedulers.onHandleError by @simonbasle in #3039
  • Use byte padding to avoid fields re-ordering on JDK 15 and above by @lantalex in #3168
  • Make use of CompletionStage#handle instead of whenComplete by @He-Pin in #3221
  • adds on discard support for FluxZip/MonoZip by @OlegDokuka in #3209
  • Include classname of null-returning map function in NPE msg by @ismailalammar in #2984

reactor-test module

  • [reactor-test] Add StepVerifier option to use ConditionalSubscriber by @simonbasle in #3035
  • Implement disposing of tasks scheduled on VirtualTimeScheduler by @mdindoffer in #3097
  • Ensure StepVerifier evaluates signal that exits thenConsumeWhile by @simonbasle in #3203
  • Improve LoggerUtils support and add TestLoggerExtension by @simonbasle in #3123

🐞 Bug fixes

📖 Documentation, Tests and Build

  • Fix windowTimeout stress test to use sinks by @OlegDokuka in #3074
  • [test] Fix flaky BoundedElasticTest with better controlled tasks by @simonbasle in #2968
  • [doc] Polish Schedulers javadoc for common/cached instances by @dedeibel in #2995
  • Increase landscape width of refguide content for readability by @tmyksj in #3009
  • [test] Improve flaky BoundedElasticScheduler toString test by @simonbasle in #3010
  • Polish README by @simonbasle in #3007
  • Refguide on mobile to use screen space optimally by @tmyksj in #3019
  • Correct typo in metrics.adoc by @jarredhiggs in #3047
  • Introducing JCStress tests for concurrent queues by @chemicL in #3069
  • Fix doc typo: missing word in reactiveProgramming.adoc by @eduardNeagoe in #3075
  • Make context-propagation-api dependency optional + documentation by @simonbasle in #3100
  • Clarify ContextN.putAll(Map) intended internal use in javadoc by @chemicL in #3103
  • Rework guide...
Read more

v3.5.0-RC1

11 Oct 17:52
72b78d6
Compare
Choose a tag to compare
v3.5.0-RC1 Pre-release
Pre-release

What's Changed

⚠️ Update considerations and deprecations

✨ New features and improvements

  • Replay terminal signals to late subscribers in Flux.replay(int) and Flux.cache(int) by @chemicL in #3200
  • Ensure StepVerifier evaluates signal that exits thenConsumeWhile by @simonbasle in #3203
  • Add ContextPropagation runtime util + captureContext operator by @simonbasle in #3145
  • Fix cancel behavior of FluxTakeUntilOther by @haraldpusch in #3219
  • Make use of CompletionStage#handle instead of whenComplete by @He-Pin in #3221

🐞 Bug fixes

  • Dispose picked worker when BoundedElasticScheduler rejects task by @Fearsin in #3183
  • Allow blocking calls in WorkerTask#dispose by @nathankooij in #3213

📖 Documentation, Tests and Build

  • Document reactor-Core-Micrometer obs/meters/tags via enums by @simonbasle in #3175
  • Improve JapiCmp: avoid misses, improve reporting and exclusions by @simonbasle in #3198
  • Adapt to Micrometer SNAPSHOTs before RC1 by @simonbasle in #3215
  • Micrometer Observation test: ensure assert fails the test by @simonbasle in #3220
  • Polish Micrometer Docs generation by @simonbasle in #3225
  • Document not to reuse/cache EmitFailureHandle#busyLooping by @He-Pin in #3224
  • Rework the refguide section on metrics to focus on new module by @simonbasle in #3205

🆙 Dependency Upgrades

  • Update dependencies junit, mockito, bytebuddy, jcstress, spotless... by @chemicL in #3218
  • Update Micrometer dependency to RC1 by @violetagg in #3228

New Contributors

Full Changelog: v3.5.0-M6...v3.5.0-RC1

v3.4.24

11 Oct 17:50
925351c
Compare
Choose a tag to compare

What's Changed

✨ New features and improvements

  • Replay terminal signals to late subscribers in Flux.replay(int) and Flux.cache(int) by @chemicL in #3200
  • Ensure StepVerifier evaluates signal that exits thenConsumeWhile by @simonbasle in #3203
  • Fix cancel behavior of FluxTakeUntilOther by @haraldpusch in #3219
  • Make use of CompletionStage#handle instead of whenComplete by @He-Pin in #3221

🐞 Bug fixes

  • Dispose picked worker when BoundedElasticScheduler rejects task by @Fearsin in #3183
  • Allow blocking calls in WorkerTask#dispose by @nathankooij in #3213

📖 Documentation, Tests and Build

  • Improve JapiCmp: avoid misses, improve reporting and exclusions by @simonbasle in #3198
  • Document not to reuse/cache EmitFailureHandle#busyLooping by @He-Pin in #3224

🆙 Dependency Upgrades

  • Update dependencies junit, mockito, bytebuddy, jcstress, spotless... by @chemicL in #3218

New Contributors

Full Changelog: v3.4.23...v3.4.24