Skip to content

Releases: reactor/reactor-core

v3.2.18.RELEASE

25 Jun 07:58
Compare
Choose a tag to compare

Reactor-Core 3.2.18.RELEASE is part of Californium-SR19 Release Train.

✨ New features and improvements

  • EnsureDeferredSubscription 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 between onNext and dispose (#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

@OlegDokuka

v3.3.5.RELEASE

27 Apr 13:06
Compare
Choose a tag to compare

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 two onSubscribe signal if said exception is thrown after having sent the Subscription (#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 with Operators.canAppearAfterOnSubscribe(Subscription), which is used by StepVerifier to ignore that particular extra subscription

✨ New features and improvements

  • Unify error-handling in subscribe/subscribeOrReturn mutualized implementation, prevent StepVerifier getting confused by a double onSubscribe 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 vs cancel 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

  • Fix DefaultStepVerifierBuilder#onSubscribe error format (#2106)
  • From 3.2.17:
    • Propagate rejection error from MonoDelayElement#onNext downstream

πŸ“– 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 in BaseOperatorTest (#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

@OlegDokuka, @pimlock

v3.2.17.RELEASE

27 Apr 13:08
Compare
Choose a tag to compare

reactor-core 3.2.17.RELEASE is part of Californium-SR18 Release Train.

✨ New features and improvements

  • Cover several cases of onNext vs cancel 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

@OlegDokuka, @pimlock

v3.3.4.RELEASE

23 Mar 18:18
Compare
Choose a tag to compare

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), all retryBackoff and retry(Predicate)/retry(long, Predicate) are now deprecated, to be replaced by the more generic retryWhen(Retry) (see RetrySpec and RetryBackoffSpec 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) and retryBackoff as well as some retry variants in 3.4.0
    • The API is build around the Retry abstract class, with two builders (or Spec) 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
  • In repeatWhen and retryWhen, when a Context 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 the StepVerifier (#2060, #2017)

πŸ“– Documentation, Tests and Build

πŸ‘ Thanks to the following contributors that also participated to this release

@OlegDokuka

v3.2.16.RELEASE

24 Mar 13:32
Compare
Choose a tag to compare

reactor-core 3.2.16.RELEASE is part of Californium-SR17 Release Train.

πŸͺ² Bug fixes

  • Mono.toFuture() now avoids invoking cancel after completion (#2070)

πŸ“– Documentation, Tests and Build

  • [build] Bump Gradle to latest 5.6.x => 5.6.4 (93e4c96)

v3.3.3.RELEASE

24 Feb 16:03
Compare
Choose a tag to compare

reactor-core 3.3.3.RELEASE is part of Californium-SR16 Release Train.

⚠️ Update considerations and deprecations

  • Added a defer opt-in in VirtualTimeScheduler.create (#1251, #2012)
    • Manually-created VirtualTimeScheduler will now eagerly advance time even if there is no pending task. Use the overload with defer=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 a flatMap possible.
  • For users of fromStream and fromIterable with custom non-Collection Iterables, see #2014 and #2021
    • the iterator() method is now invoked twice per wrapping of a given Iterable (once through default spliterator() to check the iterable is finite aka. hasCharacteristic(SIZED), once for the iteration itself)

✨ 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 a Collection or its Spliterator has the SIZED characteristic.
      • the above check can result in at most 2 calls to Iterable#iterator for custom iterables
    • [polish] Improve onDiscardMultiple/QueueWithClear resiliency (#2021)

πŸͺ² 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" in Flux#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

@btkelly, @ilyavy, @robotmrv, @yarosla

v3.2.15.RELEASE

24 Feb 13:00
Compare
Choose a tag to compare

reactor-core 3.2.15.RELEASE is part of Californium-SR16 Release Train.

⚠️ Update considerations and deprecations

  • For users of fromStream and fromIterable with custom non-Collection Iterables, see #2014 and #2021
    • the iterator() method is now invoked twice per wrapping of a given Iterable (once through default spliterator() to check the iterable is finite aka. hasCharacteristic(SIZED), once for the iteration itself)

✨ 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 a Collection or its Spliterator has the SIZED characteristic.
    • the above check can result in at most 2 calls to Iterable#iterator for custom iterables
  • [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" in Flux#collectList (#2023, #2024)
  • Fix fused last(T) not delivering defaultValue (#2020)

πŸ‘ Thanks to the following contributors that also participated to this release

@btkelly, @robotmrv

v3.3.2.RELEASE

24 Jan 10:47
Compare
Choose a tag to compare

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

02 Dec 09:54
Compare
Choose a tag to compare

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 to expectNoEvent(Duration).thenCancel()
  • #1902 When transform or transformDeferred apply a transformation to a non-Reactor Publisher, warn when/if the original Context is lost (#1888)
  • #1966 Internal simplification of how the comparator is applied in collectSortedList
  • #1962 Avoid extending Map.Entry in Context1 to ensure various libraries don't represent it inconsistenly when printing out collections of Context
  • #1963 Retain insertion order in ContextN (by extending LinkedHashMap instead of HashMap)
  • 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 subscriber Context
    • #1953 Add Exceptions.isTraceback, and a mean to unwrap a composite without the tacebacks (Exceptions.unwrapMultipleExcludingTracebacks)

πŸͺ² Bug fixes

  • changes from 3.2.13.RELEASE:
    • #1945 Avoid unnecessary wrapping of exceptions in scalar flatMap
    • #1959 GroupedFlux fused with parallel() not replenishing properly

πŸ“– 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 and artifactory (#1943)
    • [build] Fixed generation of refguide pdf when custom version is used (2c621b6)
    • [polish] Exceptions.multiple(Iterable) now produces a CompositeException, more test coverage of Exceptions 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

02 Dec 09:30
Compare
Choose a tag to compare

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 subscriber Context
  • #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 and artifactory (#1943)
  • [build] Fixed generation of refguide pdf when custom version is used (2c621b6)
  • [polish] Exceptions.multiple(Iterable) now produces a CompositeException, more test coverage of Exceptions util (#1954)

πŸ‘ Thanks to the following contributors that also participated to this release

@andreisilviudragnea, @akarnokd, @ttddyy