Releases: reactor/reactor-core
v3.4.28
Reactor-Core 3.4.28
is part of 2020.0.30
Release Train (Europium
SR30).
What's Changed
🐞 Bug fixes
ExecutorScheduler
should useonScheduleHook
by @chemicL in #3356- Use
onErrorStop
instead on cleaning context by @OlegDokuka in #3370
📖 Documentation, Tests and Build
- Replace
Renovate
withDependabot
by @chemicL in #3377 - Apply
dependencies.gradle
in root project by @chemicL in #3381 - Dependabot: ignore
Mockito
5.x
by @chemicL in #3385 - Fix typo in dependabot config by @chemicL in #3386
- Dependabot: improve ignored versions spec by @chemicL in #3392
- Dependabot: ignore
ArchUnit
1+
by @chemicL in #3394
🆙 Dependency Upgrades
- Bump
org.openjdk.jcstress:jcstress-core
from0.15
to0.16
by @dependabot in #3378 - Bump
com.gradle.enterprise
from3.12.3
to3.12.4
by @dependabot in #3379 - Bump
byteBuddyVersion
from1.12.23
to1.14.1
by @dependabot in #3382 - Bump
jmhVersion
from1.35
to1.36
by @dependabot in #3383 - Bump
org.assertj:assertj-core
from3.23.1
to3.24.2
by @dependabot in #3389 - Bump
org.openjdk.jol:jol-core
from0.16
to0.17
by @dependabot in #3393
Full Changelog: v3.4.27...v3.4.28
v3.5.3
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
- Upgrade gradle plugins by @chemicL in #3342
- Upgrade dependencies by @chemicL in #3343
- Upgrade Micrometer dependencies by @chemicL in #3344
New Contributors
- @AndreasHuber-CH made their first contribution in #3317
- @pderop made their first contribution in #3337
Full Changelog: v3.5.2...v3.5.3
v3.4.27
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
- ensures exception is caught if inner fused for
FlatMap
#3353 by @OlegDokuka in #3353
🆙 Dependency Upgrades
Full Changelog: v3.4.26...v3.4.27
v3.5.2
Reactor-Core 3.5.2
is part of 2022.0.2
Release Train.
What's Changed
🐞 Bug fixes
- Add
reflection hints
fornative-image
support by @violetagg in #3325
Full Changelog: v3.5.1...v3.5.2
v3.5.1
Reactor-Core 3.5.1
is part of 2022.0.1
Release Train.
What's Changed
⚠️ Update considerations and deprecations
- Fix regression:
Sinks.one()#tryEmitValue(null)
by @simonbasle in #3287 - Ensure context restored in
RetrySpec
by @OlegDokuka in #3316
✨ New features and improvements
- Ensure given iterable is interacted once per subscriber by @OlegDokuka in #3297
🐞 Bug fixes
- Fix #3307 case by @OlegDokuka in #3312
📖 Documentation, Tests and Build
- Revert
Add jcenter() to the repositories list
by @violetagg in #3279 - Perf baseline
3.5.0
, adaptShakespeare
bench to2022.0.0
release by @simonbasle in #3278 - Fix typo in in documentation by @SpikeBlues in #3300
- Remove
NotNull
annotation fromjetbrains
by @OlegDokuka in #3303
New Contributors
- @SpikeBlues made their first contribution in #3300
Full Changelog: v3.5.0...v3.5.1
v3.4.26
Reactor-Core 3.4.26
is part of 2020.0.26
Release Train (Europium
SR26).
What's Changed
⚠️ Update considerations and deprecations
- Fix regression:
Sinks.one()#tryEmitValue(null)
by @simonbasle in #3287 - Ensure context restored in
RetrySpec
by @OlegDokuka in #3316
✨ New features and improvements
- Ensure given iterable is interacted once per subscriber by @OlegDokuka in #3297
🐞 Bug fixes
- Fix #3307 case by @OlegDokuka in #3312
📖 Documentation, Tests and Build
- Fix typo in in documentation by @SpikeBlues in #3300
- Remove
NotNull
annotation fromjetbrains
by @OlegDokuka in #3303
New Contributors
- @SpikeBlues made their first contribution in #3300
Full Changelog: v3.4.25...v3.4.26
v3.4.25
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 newScheduler
instance when necessary.- Implementors of
Scheduler
should also implement theinit()
method, which currently delegates tostart()
in the default implementation.
⚠️ ♻️ Behavior Changes
- Disable fusion in
MonoSubscriber
by @UgiR in #3245- A number of
Mono
operators derived from theOperators.MonoSubscriber
have stopped negotiating fusion (even though theirPublisher
still implementsFuseable
) - The highest impact is likely to be on tests that validate the fusion negotiation (eg.
StepVerifier
'sexpectFusion(...)
)
- A number of
✨ New features and improvements
- Add on discard support for
FluxZip
/MonoZip
by @OlegDokuka in #3209 - Optimize
Scheduler
initialization by @chemicL in #3248 - Disable fusion in
MonoSubscriber
by @UgiR in #3245 - Fix breaking change for
fromFuture
source cancellation by @OlegDokuka in #3252 - Add
Flux.mergePriority
, does not wait for all sources to emit by @osi in #3267 - Only initialize logging once per test session by @marcphilipp in #3263
- Limit the number of
Scheduler#disposeGracefully
threads by @simonbasle in #3259
🐞 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
- Upgrade several plugins and test dependencies by @simonbasle in #3254
New Contributors
- @marcphilipp made their first contribution in #3263
Full Changelog: v3.4.24...v3.4.25
v3.5.0
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 sourcePublisher
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
- These now live in the reactor-kotlin-extensions library
- Remove deprecated
Mono.doOn
/AfterSuccessOrError
by @simonbasle in #2954- The
doOn*
recommended alternatives includedoOnNext(Consumer)
,doOnError(Consumer)
,doOnTerminate(Runnable)
, anddoOnSuccess(Consumer)
, - The
doAfter*
recommended alternatives aredoAfterTerminate(Runnable)
anddoFinally(Consumer)
.
- The
- Remove deprecated context-related operators by @simonbasle in #2953
deferWithContext(Function)
-> usedeferContextual(Function)
instead,subscriberContext(Context)
andsubscriberContext(Function)
-> usecontextWrite(ContextView)
andcontextWrite(Function)
instead,Signal::getContext()
-> useSignal::getContextView()
instead,Context::putAll(Context)
-> useContext::putAll(ContextView)
instead.
- Remove deprecated
ElasticScheduler
by @simonbasle in #2955- Use
BoundedElasticScheduler
(Schedulers.boundedElastic()
) instead.
- Use
⚠️ ⌛ 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 newObservation
API of Micrometer 1.10.0, read more about it the release notes. - The class
reactor.util.Metrics
,Flux::metrics()
andMono::metrics()
operators have been deprecated.
- We introduced a new module,
- Deprecate
[Flux|Mono|Synchronous]Sink currentContext
by @simonbasle in #2974, #3021contextView()
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 newScheduler
instance when necessary.- Implementors of
Scheduler
should also implement theinit()
method, which currently delegates tostart()
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 astake(n,true)
/limitRequest
by @simonbasle in #2969SourceException
wrapper for main stream errors delivered to windows by @chemicL in #3167Scheduler.isDisposed()
only true for disposed instances by @chemicL in #3243- adds cancellation of the source future support by @OlegDokuka in #3146
Scannable.tags()
rework, addtagsDeduplicated()
by @simonbasle in #3037- Disable fusion in
MonoSubscriber
by @UgiR in #3245- A number of
Mono
operators derived from theOperators.MonoSubscriber
have stopped negotiating fusion (even though theirPublisher
still implementsFuseable
) - The highest impact is likely to be on tests that validate the fusion negotiation (eg.
StepVerifier
'sexpectFusion(...)
)
- A number of
✨ New features and improvements
Context propagation and bridging to ThreadLocal
s
- Add
context-propagation-api
dependency +ReactorContextAccessor
by @simonbasle in #3098, #3107, #3256 - Add
ContextPropagation
runtime util +captureContext
operator by @simonbasle in #3145 handle
/tap
implicitThreadLocal
restoration ifContextCapture
by @simonbasle in #3180- Add
forEach
method toContextView
and subclasses by @chemicL in #3092 - Introducing default impl for
Context::forEach
by @chemicL in #3101 - Introducing
Context::putAllMap
by @chemicL in #3102
Observability and logging
- Introduce new module
reactor-core-micrometer
by @simonbasle in #3015- Please consult the reference documentation for more details.
- Add
StateLogger
for structured logging of state machines by @OlegDokuka in #3077 - Polish
Observation
names and tag keys by @simonbasle in #3110 Micrometer#observation()
: avoids scopes, set parentObservation by @simonbasle in #3119- Add logging in
Exceptions.throwIf[Jvm]Fatal
, addisFatal
methods by @simonbasle in #3122 - Only initialize logging once per test session by @marcphilipp in #3263
- Add
TimedScheduler
toreactor-core-micrometer
module by @simonbasle in #3109
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
withfairBackpressure
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)
andFlux.cache(int)
by @chemicL in #3200 - Add
disposeGracefully
method toScheduler
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 useConditionalSubscriber
by @simonbasle in #3035 - Implement disposing of tasks scheduled on
VirtualTimeScheduler
by @mdindoffer in #3097 - Ensure
StepVerifier
evaluates signal that exitsthenConsumeWhile
by @simonbasle in #3203 - Improve
LoggerUtils
support and addTestLoggerExtension
by @simonbasle in #3123
🐞 Bug fixes
- [agent] Avoid instrumenting methods with unwrappable returnType by @simonbasle in #2973
- Avoid
FluxReplay
buffer retaining/leaking with tiny TTL by @simonbasle in #2998 - Fix subscribers being retained by
SinkOneMulticast
by @simonbasle in #3002 - Fix a
Many
sink /EmitterProcessor
subscriber disposal leak by @simonbasle in #3029 - Fix
doOnEach
ASYNC fusion triggeringonNext
signal twice by @simonbasle in #3045 - Fix cancel too synchronized in
MonoCollect[List]
by @simonbasle in #3053 - Async fusion bug: extra fixes and changes by @simonbasle in #3046
- ensures
onLastAssembly
does not break fusion chain by @OlegDokuka in #3156 - Improve
Loggers.useConsoleLoggers()
thread safety by @alexismanin in #3174 - Dispose picked worker when
BoundedElasticScheduler
rejects task by @Fearsin in #3183 - Allow blocking calls in
WorkerTask#dispose
by @nathankooij in #3213 - fixes incorrect value/error set during
tryEmitXXX
call by @OlegDokuka in #3260 - cleans context for concat map for retry companion publisher by @OlegDokuka in #3262
- Fix meters documentation generation following renames by @simonbasle in #3217
- Fix subscription loss in
FluxTakeUntilOther
by @simonbasle in #3270 - Fix cancel behavior of
FluxTakeUntilOther
by @haraldpusch in #3219 - fixes breaking change for
fromFuture
source cancellation by @OlegDokuka in #3252
📖 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...
v3.5.0-RC1
What's Changed
⚠️ Update considerations and deprecations
- Fix meters documentation generation following renames by @simonbasle in #3217
✨ New features and improvements
- Replay terminal signals to late subscribers in
Flux.replay(int)
andFlux.cache(int)
by @chemicL in #3200 - Ensure
StepVerifier
evaluates signal that exitsthenConsumeWhile
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 ofwhenComplete
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
- @Fearsin made their first contribution in #3183
- @nathankooij made their first contribution in #3213
- @He-Pin made their first contribution in #3224
- @haraldpusch made their first contribution in #3219
Full Changelog: v3.5.0-M6...v3.5.0-RC1
v3.4.24
What's Changed
✨ New features and improvements
- Replay terminal signals to late subscribers in
Flux.replay(int)
andFlux.cache(int)
by @chemicL in #3200 - Ensure
StepVerifier
evaluates signal that exitsthenConsumeWhile
by @simonbasle in #3203 - Fix cancel behavior of
FluxTakeUntilOther
by @haraldpusch in #3219 - Make use of
CompletionStage#handle
instead ofwhenComplete
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
New Contributors
- @Fearsin made their first contribution in #3183
- @nathankooij made their first contribution in #3213
- @He-Pin made their first contribution in #3224
- @haraldpusch made their first contribution in #3219
Full Changelog: v3.4.23...v3.4.24