Releases: reactor/reactor-core
v3.2.18.RELEASE
Reactor-Core 3.2.18.RELEASE
is part of Californium-SR19
Release Train.
β¨ New features and improvements
- Ensure
DeferredSubscription
makes requests serially if there is racing between set / requestN (according to RS spec Rule 2.7)(#2164) - Ensures next element is dropped if
UnicastProcessor
disposed to avoid racing betweenonNext
anddispose
(#2180)
π Documentation, Tests and Build
- [publication] Publish Gradle metadata, without optional dependencies (#2151)
- [build] Consistently use tabs for gradle file indentation (#2157)
- [build] Backport last relevant build changes from 3.3 (#2156)
π Thanks to the following contributors that also participated to this release
v3.3.5.RELEASE
reactor-core 3.3.5.RELEASE
is part of Dysprosium-SR7
Release Train.
It also contains all fixes from 3.2.17.RELEASE.
β οΈ Update considerations and deprecations
- A corner case of throwing from the
subscribe
method can lead to twoonSubscribe
signal if said exception is thrown after having sent theSubscription
(#2107, #2111, #2072) - Most well-formed subscribers will ignore this, but
StepVerifier
cannot, which can "hide" the true error - This potentially extra
Subscription
can be identified withOperators.canAppearAfterOnSubscribe(Subscription)
, which is used byStepVerifier
to ignore that particular extra subscription
β¨ New features and improvements
- Unify error-handling in
subscribe
/subscribeOrReturn
mutualized implementation, preventStepVerifier
getting confused by a doubleonSubscribe
in that very specific case ((#2072, #2107, #2111) - [tools] Support build-time debug instrumentation (#2105)
- [tools] Support running reactor-tools as a "normal" Java Agent (#2104, #2098)
- From 3.2.17:
- Cover several cases of
onNext
vscancel
races that would bypass resource discarding (#2134, #2126, #2102, #2124, #2125, #2122, #2077, #2102) - Flux#from and Mono#flux consistently apply onAssembly hooks (#2055, #2067)
- Flux#from/wrap does not call Flux#onAssembly
- Flux#from and Mono#flux apply onAssembly hooks
- Cover several cases of
πͺ² Bug fixes
- Fix DefaultStepVerifierBuilder#onSubscribe error format (#2106)
- From 3.2.17:
- Propagate rejection error from
MonoDelayElement#onNext
downstream
- Propagate rejection error from
π Documentation, Tests and Build
- [test] Don't reuse same exception in
errorOnSubscribe
steps (#2112) - [doc] Polish doc of Iterable operators, clarify iterator() calls (#2135, #2014, #2127)
- [test] Split
errorOnSubscribe
scenarios into separate tests (#2099) - [build] Follow-up to #2088 bump to Gradle 6.3 : 3.3 specifics (#2088, #2089)
- Polish docs, code compilation warnings, flakkt tests, etc... (#2087, #2084, #2084)
- [test] Use JUnit Jupiter's
@TestFactory
inBaseOperatorTest
(#2085) - [test] Use JUnit Platform + Vintage engine (#2073)
- [test] Add a post-test listener that resets hooks consistently (#2082)
- from 3.2.17
- [test] Extract Tracked to MemoryUtils, add OffHeapDetector (#2125)
- [test] Provides tests suite to expose onDiscard leaks and fixes (#2125)
- Create CODEOWNERS (#2097)
- [build] Test with JDK 14, bump to Gradle 6.3 (#2088)
- [test] Remove testStaticInit task, verify in main test task (#2093)
- [Polish] Split bndoptions elements in array for clarity (#2091)
- [build] Simplify stubbing for Java 9+ (#2091)
- [build] Backport gradle/releaser.gradle to 3.2 (e4fe960)
π Thanks to the following contributors that also participated to this release
v3.2.17.RELEASE
reactor-core 3.2.17.RELEASE
is part of Californium-SR18
Release Train.
β¨ New features and improvements
- Cover several cases of
onNext
vscancel
races that would bypass resource discarding (#2134, #2126, #2102, #2124, #2125, #2122, #2077, #2102) - Flux#from and Mono#flux consistently apply onAssembly hooks (#2055, #2067)
- Flux#from/wrap does not call Flux#onAssembly
- Flux#from and Mono#flux apply onAssembly hooks
πͺ² Bug fixes
- Propagate rejection error from
MonoDelayElement#onNext
downstream
π Documentation, Tests and Build
- [test] Extract Tracked to MemoryUtils, add OffHeapDetector (#2125)
- [test] Provides tests suite to expose onDiscard leaks and fixes (#2125)
- Create CODEOWNERS (#2097)
- [build] Test with JDK 14, bump to Gradle 6.3 (#2088)
- [test] Remove testStaticInit task, verify in main test task (#2093)
- [Polish] Split bndoptions elements in array for clarity (#2091)
- [build] Simplify stubbing for Java 9+ (#2091)
- [build] Backport gradle/releaser.gradle to 3.2 (e4fe960)
π Thanks to the following contributors that also participated to this release
v3.3.4.RELEASE
reactor-core 3.3.4.RELEASE
is part of Dysprosium-SR6
Release Train.
β οΈ Update considerations and deprecations
- Introduce and use VirtualTimeScheduler#getOrSet(boolean) (#2060, #2017)
- VirtualTimeScheduler did not run scheduled tasks since 3.3.3.RELEASE
retryWhen(Function)
, allretryBackoff
andretry(Predicate)
/retry(long, Predicate)
are now deprecated, to be replaced by the more genericretryWhen(Retry)
(seeRetrySpec
andRetryBackoffSpec
for configurable builders that cover these methods and more)
β¨ New features and improvements
- Refactor of retryWhen to switch to a Spec/Builder model (#1979, #1978, #1905, #2063, #2052, #2064, #2079)
- The new model is slated to replace
retryWhen(Function)
andretryBackoff
as well as someretry
variants in 3.4.0 - The API is build around the
Retry
abstract class, with two builders (orSpec
) to fluently configure the retries - This allows us to introduce additional new features:
- all variants support a filter for errors to be retried
- we now have sync and async retry callbacks when retry triggers
- we can customize the exception to be thrown when max attempts is reached and we
- transient bursts of errors can be handled separately, resetting eg. the backoff to its minimum provided at least one
onNext
comes in between errors
- The new model is slated to replace
- In
repeatWhen
andretryWhen
, when aContext
is emitted, we now merge it with the current instead of replacing it (#2056)
πͺ² Bug fixes
- Mono.toFuture() now avoids invoking cancel after completion (#2070)
- Various fixes in switchOnFirst (#2019, #2068)
- inner stream cancellation is better taken into account
- some race conditions have been fixed
- race conditions are tested
- cancellation signal of the whole sequence is correctly forwarded to the inner flux
- the new API
VirtualTimeScheduler#getOrSet(boolean)
fixes virtual time in theStepVerifier
(#2060, #2017)
π Documentation, Tests and Build
- [build] Bump Gradle to latest 5.6.x => 5.6.4 (93e4c96)
- [test] Various improvements over flakky tests (cce796c, 282947e, 9812173)
π Thanks to the following contributors that also participated to this release
v3.2.16.RELEASE
v3.3.3.RELEASE
reactor-core 3.3.3.RELEASE
is part of Californium-SR16
Release Train.
β οΈ Update considerations and deprecations
- Added a
defer
opt-in inVirtualTimeScheduler.create
(#1251, #2012)- Manually-created
VirtualTimeScheduler
will now eagerly advance time even if there is no pending task. Use the overload withdefer=true
to 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 aflatMap
possible.
- Manually-created
- For users of
fromStream
andfromIterable
with custom non-Collection
Iterables
, 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
Iterator
is discarded when cancelled mid-iteration - we avoid the risk of iterating an infinite iterator by first checking if the
Iterable
is aCollection
or itsSpliterator
has theSIZED
characteristic. - the above check can result in at most 2 calls to
Iterable#iterator
for 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)
π Thanks to the following contributors that also participated to this release
v3.2.15.RELEASE
reactor-core 3.2.15.RELEASE
is part of Californium-SR16
Release Train.
β οΈ Update considerations and deprecations
- For users of
fromStream
andfromIterable
with custom non-Collection
Iterables
, 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
- Discard concatMapIterable/fromIterable's remainder on Cancel (#2014)
- the remainder of the internal
Iterator
is discarded when cancelled mid-iteration - we avoid the risk of iterating an infinite iterator by first checking if the
Iterable
is aCollection
or itsSpliterator
has theSIZED
characteristic. - the above check can result in at most 2 calls to
Iterable#iterator
for custom iterables
- the remainder of the internal
- [polish] Improve onDiscardMultiple/QueueWithClear resiliency (#2021)
πͺ² Bug fixes
- 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)
- FluxReplay source was not canceled with Hooks.onEachOperator() and a fuseable source
- Correctly count continued errors on flatmapped callable (#2011)
- Handle "empty
Callable
" inFlux#collectList
(#2023, #2024) - Fix fused last(T) not delivering defaultValue (#2020)
π Thanks to the following contributors that also participated to this release
v3.3.2.RELEASE
reactor-core 3.3.2.RELEASE
is part of Dysprosium-SR3
Release Train.
π₯ Known issues
- (since 3.3.0.M2) There are regressions with
Flux.replay
/cache
hanging or delivering wrong data (tracked in #2030)
β οΈ Update considerations and deprecations
- Documentation zip file is now published with -docs classifier (#1975)
β¨ New features and improvements
- Add onErrorContinue support to FluxFlattenIterable (#2008)
- Eagerly remove executor metrics after each worker is terminated (#1787)
- Do not instrument CGLIB proxies in BlockHound (#1983)
- Discard elements of Collection in collect(), cover more cases (#1924)
- Avoid creating Map.Entry in Context.putAll (#1970, #1971)
- Implement Mono.cache() as MonoCacheTime without TTL (#2002)
π Documentation, Tests and Build
- [build] Improve builds and prepare for a releaser script automating a lot (198ce1a, 0953bcf, 63265b5, 086132c, 22ecb2e)
- bump versions in README, publish to artifactory, correctly get credentials from env, etc...
- Add FAQ section about logging with MDC (#1985, #1986)
- [doc] Fix typos and improve explanations/diagrams (#2001, #1994, #1989, #1981, #1999)
- Check for explicit
currentContext()
with ArchUnit (#1988) - [build] Remove propdeps-maven and use propdeps for optional (2ba4760)
- StepVerifier fix For Fusion and request after onNext (#1982)
- Documentation zip file is now published with -docs classifier (#1975)
π Thanks to the following contributors that also participated to this release
@echooymxq, @hojongs, @martin-tarjanyi, @mdonkers, @OlegDokuka, @sgsfak
v3.3.1.RELEASE
Reactor-Core 3.3.1.RELEASE
is part of Dysprosium-SR2
Release Train.
It also includes changes from the 3.2.13.RELEASE version.
One important change to pick up for testing Reactor is in StepVerifier
: the combination of expectNoEvent
followed by thenCancel
wasn't working terribly well, and a new better terminal expectation has been introduced: expectTimeout
(#1913)
π₯ Known issues
- (since 3.3.0.M2) There are regressions with
Flux.replay
/cache
hanging or delivering wrong data (tracked in #2030)
β οΈ Update considerations and deprecations
- #1911 Instrument ScheduledExecutorService via Micrometer
- Instead of doing our own executor decorator we now rely on the Micrometer one, but it might have different coverage of tasks
β¨ New features and improvements
- #1557 Removed greediness from FluxBufferTimeout
- #1938 Remove overeager toString calls in FluxIndexFuseable
- #1913
StepVerifier
:expectTimeout(Duration)
as an alternative toexpectNoEvent(Duration).thenCancel()
- #1902 When
transform
ortransformDeferred
apply a transformation to a non-ReactorPublisher
, warn when/if the originalContext
is lost (#1888) - #1966 Internal simplification of how the comparator is applied in
collectSortedList
- #1962 Avoid extending
Map.Entry
inContext1
to ensure various libraries don't represent it inconsistenly when printing out collections ofContext
- #1963 Retain insertion order in
ContextN
(by extendingLinkedHashMap
instead ofHashMap
) - changes from 3.2.13.RELEASE:
- #1916 Interpret MAX_VALUEms as indefinite caching in
Mono#cache(Function, Function, Supplier)
(backported) - #1746 Add
VirtualTimeScheduler#getScheduledTaskCount()
(backported) - #1968 Make
Flux#publish()
propagate 1st subscriberContext
- #1953 Add
Exceptions.isTraceback
, and a mean to unwrap a composite without the tacebacks (Exceptions.unwrapMultipleExcludingTracebacks
)
- #1916 Interpret MAX_VALUEms as indefinite caching in
πͺ² Bug fixes
- changes from 3.2.13.RELEASE:
π Documentation, Tests and Build
- [doc] #1908 Marble diagram for
bufferWhile
was incorrectly showing dropped separators - [doc] #1915
Flux#join
javadoc and marble have been clarified - [dependency] Bumped BlockHound to the release version (#1923)
- [build] Reorganization of the build with separation of concerns (buildSrc, gradle.properties, etc...) (0bd50de, a1dab8a)
- [build] Add reactor.blockhound to OSGI optional bundles (#1932, #1933)
- [build] Prepare for a releasetrain releaser script: add new tasks, allow mavenLocal source (06977a6, #1960)
- changes from 3.2.13.RELEASE:
- [build] Switched to Gradle 5.6 (8e97f91)
- [build] Switched publication plugin to
maven-publish
andartifactory
(#1943) - [build] Fixed generation of refguide pdf when custom version is used (2c621b6)
- [polish]
Exceptions.multiple(Iterable)
now produces aCompositeException
, more test coverage ofExceptions
util (#1954)
π Thanks to the following contributors that also participated to this release
@andreisilviudragnea, @akarnokd, @berry120, @dittos, @EleanorRoseLegg, @gindex, @jabrena, @simondaudin, @slisaasquatch, @thiyagu-7, @ttddyy, @slisaasquatch, @wonwoo
v3.2.13.RELEASE
Reactor-Core 3.2.13.RELEASE
is part of Californium-SR14
Release Train.
β¨ New features and improvements
- #1916 Interpret MAX_VALUEms as indefinite caching in
Mono#cache(Function, Function, Supplier)
(backported) - #1746 Add
VirtualTimeScheduler#getScheduledTaskCount()
(backported) - #1968 Make
Flux#publish()
propagate 1st subscriberContext
- #1953 Add
Exceptions.isTraceback
, and a mean to unwrap a composite without the tacebacks (Exceptions.unwrapMultipleExcludingTracebacks
)
πͺ² Bug fixes
- #1945 Avoid unnecessary wrapping of exceptions in scalar flatMap
- #1959 GroupedFlux fused with
parallel()
not replenishing properly
π Documentation, Tests and Build
- [build] Switched to Gradle 5.6 (8e97f91)
- [build] Switched publication plugin to
maven-publish
andartifactory
(#1943) - [build] Fixed generation of refguide pdf when custom version is used (2c621b6)
- [polish]
Exceptions.multiple(Iterable)
now produces aCompositeException
, more test coverage ofExceptions
util (#1954)