All Versions
33
Latest Version
Avg Release Cycle
37 days
Latest Release
1233 days ago

Changelog History
Page 2

  • v3.3.8.RELEASE Changes

    July 20, 2020

    ๐Ÿš€ Reactor-Core 3.3.8.RELEASE is part of Dysprosium-SR10 Release Train.

    ๐Ÿš€ This maintenance release is a recommended update for all Reactor 3 users.

    ๐Ÿš€ This version also contains all changes from v3.2.19.RELEASE.

    ๐Ÿฑ ๐Ÿž Bug fixes

    • ๐Ÿ– Handle null publisher in MonoDelayUntil (#2245)
    • ๐Ÿ›  fix #2260 Avoid onSubscribe race in FluxTimeout (#2266)

    ๐Ÿ“š ๐Ÿ“– Documentation, Tests and Build

    • โฑ [doc] Fix Scheduler Javadoc (#2190)
    • [doc] fix #2199 Fix typo in reference guide
    • ๐Ÿ— [build] fix #2264 add blockhound to testset
    • [doc] Fix small error in TupleUtils asciidoc (#2201)
    • ๐Ÿ’… [polish] fix #2246 Remove usage of globalRegistry in metrics tests
    • ๐Ÿ’… [polish] FluxUsingWhenTest awaitility + order of capturing subscription
    • [doc] fix #2257 Improve flatMapIterable prefetch javadoc

    ๐Ÿš€ ๐Ÿ‘ Thanks to the following contributors that also participated to this release

    @dennyac, @nicolasgavalda

  • v3.3.7.RELEASE Changes

    June 25, 2020

    ๐Ÿš€ reactor-core 3.3.7.RELEASE is part of Dysprosium-SR9 Release Train.

    ๐Ÿฑ โœจ New features and improvements

    ๐Ÿฑ ๐Ÿž Bug fixes

    • Align MonoCollect and MonoCollectList to avoid race condition which leads to NullPointerException (#2186)
    • ๐Ÿ– Handle nulls from collectors in Flux.collect() (#2181)

    ๐Ÿ“š ๐Ÿ“– Documentation, Tests and Build

    • โฑ [test] Improve thread regrowth test of boundedElastic/Elastic by considering negative values that might be produced as 0 (no regrowth, aka no increase in the number of active threads from the scheduler).
    • ๐Ÿ— [build] Ensure tools fat jar is the one published (#2189)
    • ๐Ÿ“‡ [build] Fix input package rule for OSGi metadata generator (#2185)

    ๐Ÿš€ ๐Ÿ‘ Thanks to the following contributors that also participated to this release

    @rstoyanchev , @melix , @gurkerl83

  • v3.3.6.RELEASE Changes

    June 25, 2020

    ๐Ÿš€ Reactor-Core 3.3.6.RELEASE is part of Dysprosium-SR8 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)
    • Ensure FluxSwitchOnFirst serializes requests (according to RS spec Rule 2.7) (#2161)
    • Ensures next element is dropped if UnicastProcessor disposed to avoid racing between onNext and dispose (#2180)
    • โฑ Use ZoneId.of(String) to avoid blocking disk load during first access of Schedulers.boundedElastic() (#2143)

    ๐Ÿฑ ๐Ÿž Bug fixes

    • Accommodate ASYNC fusion in Mono.metrics() to avoid NullPointerException or hanging in certain cases (#2160 )
    • ๐Ÿ›  Fix volatile read of first element and ConditionalSubscriber classcast in FluxSwitchOnFirst (#2166)
    • ๐Ÿ”„ Change the Subscription set by reportThrowInSubscribe to an instance compatible with QueueSubscription, preventing fused cases where a ClassCastException would be thrown. (#2152 )

    ๐Ÿ“š ๐Ÿ“– Documentation, Tests and Build

    • โœ… [test] Fix publishOn scan test, hiccup before asserting BUFFERED
    • ๐Ÿ‘ [doc] Better describe Mono.first() and Mono.or() behavior (#2159)
    • [doc] Fix typo Retry.fromFunction() instead of from() (#2172)
    • [doc] Fix RetrySpec doc: throwablePredicate is actually filter (#2162)
    • [doc] Document onCancel / onDipose limited to 1 use (#2015)
    • ๐Ÿšš [doc] Remove wrong curly braces in generate code example (#2110)
    • ๐Ÿ— [build] Have blockHoundTest fork JVM on every case (see #2144)
    • ๐Ÿ— [build] Consistently use tabs for gradle file indentation (#2157)
    • ๐Ÿ“‡ [publication] Publish Gradle metadata, without optional dependencies (#2151)

    ๐Ÿš€ ๐Ÿ‘ Thanks to the following contributors that also participated to this release

    @alex-dukhno , @chakas , @berry120 , @OlegDokuka , @PyvesB , @josemalonsom

  • v3.3.5.RELEASE Changes

    April 27, 2020

    ๐Ÿš€ 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)
      • Including backport and complement of fixes to UnicastProcessor (#2124, #2125, #980, #2126)
      • 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.3.3.RELEASE Changes

    February 24, 2020

    ๐Ÿš€ 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.

    ๐Ÿฑ โœจ 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

    • 0๏ธโƒฃ 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.3.2.RELEASE

    January 13, 2020
  • v3.3.1.RELEASE Changes

    December 02, 2019

    ๐Ÿš€ 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)

    โšก๏ธ โš ๏ธ 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.3.0.RELEASE Changes

    September 25, 2019

    ๐Ÿš€ Reactor-Core 3.3.0.RELEASE is part of Dysprosium-RELEASE Release Train.

    ๐Ÿš€ This release note covers the first GA release of the 3.3.x cycle, and as such describes the changes from the perspective of a 3.2.x to 3.3.0 comparison.

    ๐Ÿš€ See also release notes from 3.2.12, 3.2.11, 3.2.10 and 3.2.9 for changes that were inherited from the 3.2.x maintenance releases.

    ๐Ÿš€ This release is a big opportunity to polish the APIs and some behaviors with less restriction than maintenance releases.

    โฑ ๐ŸŒŸ It also introduces a few new features, the highlight of which is the BoundedElasticScheduler:
    โฑ this one has evolved from the ElasticScheduler and is intended as a future replacement for it.
    โฑ A cap can be put on the number of threads such a scheduler can spawn. After that cap is reached, further task submissions are deferred (being enqueued) up to a second global limit on enqueued tasks (optionally unbounded).

    โšก๏ธ โš ๏ธ Update considerations and deprecations

    • (from RC1:)
    • A few Mono operators have slightly changed their behavior in regards to how when they propagate onNext: they could trigger onError after onNext, which is not permitted in Mono.
      • Mono#usingWhen now waits for the async complete handler termination before propagating onNext (#1832)
      • Mono#using similarly avoids triggering onNext+onError if cleanup fails (#1853)
      • Mono#doOnTerminate now acts similarly to doOnSuccess, executing the side effect before the onNext is propagated downstream (#1752)
    • ๐Ÿ—„ Mono#do[On|After]SuccessOrError has been deprecated and marked for removal in 3.4 (#1854)
    • ๐Ÿ’… usingWhen API has been polished, and some variants deprecated for removal in 3.4 (#1687)
      • A new overload has been introduced that uses BiFunction for error handler (exposing the failure that causes "rollback")
      • A single-handler version has been added to Mono for alignment with Flux. This is the simplest case: same handler for complete, error and cancel terminations.
      • All other overloads have been deprecated. Goal is to favor either the simple 1-handler-covers-all case OR force users to be explicit about ALL possible terminations.
    • (from M3:)
    • ๐Ÿ—„ #1742 Processors and Kotlin extensions deprecations
    • ๐Ÿšš the WorkQueueProcessor and TopicProcessor have been marked as deprecated for 3.3.x and will be removed in 3.4
    • ๐Ÿ—„ have been deprecated, due to underlying use of Unsafe
    • Recommended core alternative is to combine EmitterProcessor and publishOn
    • ๐Ÿ—„ the Kotlin extensions are deprecated in core and replaced by a dedicated project/repo, reactor-kotlin-extensions
    • ๐Ÿ—„ in both cases, the deprecated classes don't appear in the generated javadoc jar
    • โฑ #1764 Deprecated method Schedulers.Factory#decorateExecutorService has been removed
    • #1669 All onBackpressureBuffer(maxSize+error) variants now delay errors
    • ๐Ÿšš In debug mode, most of the original stacktrace is artificially moved at the end of the exception's output, after the "backtrace" (#1781)
    • ๐Ÿ—„ #1745 compose() has been deprecated and renamed transformDeferred()
    • ๐Ÿšš deprecated operator will be removed in 3.4
    • ๐Ÿšฆ #1451 Dematerialize has been reworked and now expects 1 request per upstream Signal
    • ๐Ÿšฆ This avoids onNext events to be emitted only when the subsequent signal is ready upstream
    • ๐Ÿšฆ This also means that in order to get a terminal signal like onComplete signal, the corresponding Signal must be explicitly requested from upstream (one extra request(1))
    • (from M2:)
    • Exceptions are now unwrapped (Exceptions#unwrap) in most sources that immediately produce an error, acting like a Callable (b6f4d29)
    • ๐Ÿšš Moved reactor-tools sources into the core repository (#1731)

    ๐Ÿฑ โœจ New features and improvements

    • โฑ ๐ŸŒŸ Added a boundedElastic Scheduler that caps number of threads and scales to 0 (#1804)
      • global singleton also cap deferred tasks past the thread limit to 100K (32d2a29)
      • thread cap and task queue capacity can be configured separately, the later can even be unbounded
    • โž• Add windowUntilChanged operator, ensure the stateful predicate is subscriber-specific and cleaned on cancel (#1850, #1901)
    • ๐Ÿ‘Œ Improve the naming (eg. scan(Attr.NAME) or toString) of global singleton Schedulers (#1885, #1886)
      • for instance, instead of parallel(parallel) this is now Schedulers.parallel()
    • ๐Ÿ‘Œ Improvements around subscription recursivity / subscribe loop performance (#1882)
    • Avoid extra lastAssembly by using CorePublisher where possible (#1883)
    • (from RC1:)
    • Due to a few Throwable constants, class references could leak in multi-classloader environments. This is now avoided by skipping the filling of the stacktrace (#1872)
    • โž• Add BufferUntilChanged operator (#1706, bb5b2bb)
    • โž• Added new StepVerifier API to subscribe to source and verify it later (#1848, b2ce5fe)
    • (from M3:)
    • โž• Add "VirtualTimeScheduler#getScheduledTaskCount()" (#1746)
    • #1763 Flux.parallel now uses Schedulers.DEFAULT_POOL_SIZE (which can be overridden by system property)
    • #1767 Add ParallelFlux#then to compose on parallel termination
    • โฑ #1722 Make sure ElasticScheduler.CachedService gets disposed
    • #1798 Use bounded wildcard in error(Supplier)
    • ๐Ÿ’… Polish flux metrics (#1802)
      • see also the other commits linked in that PR
    • Actually record executor service metrics to Micrometer (#1795)
    • โž• Add a Context-aware {Mono,Flux}.deferWithContext (#1819)
    • โšก๏ธ Eliminate subscribe from stack by optimizing the "tail calls" (#1761, #1826)
    • #1416 Add lambda subscribe variants with a context
    • (from M2:)
    • Avoid triggering Context lookups in error sources (4f2bc7a)
    • Extended blockHound whitelist
      • all ScheduledExecutor offer (95c0884)
      • DelayedWorkQueue#take (#1726)
    • โœ‚ Remove unnecessary volatile with UnicastProcessor fusion (c86db5a)
    • ๐Ÿ‘Œ Improved cache eviction in ElasticScheduler (#1700)
    • (from M1:)
    • โœ… Compatibility with projects using the Java Module System (JPMS) has been improved by declaring an official Automatic-Module-Name (reactor.core and reactor.test, #1641, #1692)
    • The CorePublisher interface has been introduced to distinguish Publisher from 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 toString representation of classes that are known to have an obscure representation, as well as extracting such objects that would be nested in containers like a Collection, Tuple2, Signal, ...
    • Reworked the format of "backtraces" (#1672, #1702)
      • Backtraces are the additional callsite information captured by debug mode and checkpoint and appended to onError Throwable as a suppressed exception
    • 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)

    ๐Ÿฑ ๐Ÿž Bug fixes

    • (from M2:)
    • Avoid unbounded Flux.replay request with bounded subscribers (#1185)
    • โœ‚ Removed "checkpoint" prefix in backtraces from return-only callsites (#1740)
    • (from M1:)
    • ๐Ÿšฆ [reactor-test] Prevent StepVerifier collect hang when consuming all signals (#1529)
    • Unwrap CompletionException in Mono#fromFuture (#1652)
    • ๐Ÿ›  Fix MonoProcessor#block duration.zero change (c995c01)

    ๐Ÿ“š ๐Ÿ“– Documentation, Tests and Build

    • Document Java9stubs-related importing issues (#1680)
    • [doc] Disambiguate lowTide example in limitRate javadoc
    • Document reactor-tools in refguide (#1903)
    • โœ… [internal test utils] Rework autoCleanup methods into a reusable JUnit Rule
    • โœ… [internal test utils] Add direct assertion method on RetainedDetector
    • (from RC1:)
    • [doc] Add limitRate marble diagrams (#1449)
    • ๐Ÿ’… [build] Polish benchmarks build, remove jmh plugin (#1844, 1ba4944)
    • ๐Ÿ— [build] Make it possible to run two JMH tasks - baseline and current (#1862)
    • (from M3:)
    • ๐Ÿ— [build] Use "check" task as an aggregator, not "test" (#1776)
    • ๐Ÿ‘€ [doc] #1539 Add "metrics" section to the reference guide (see also #1812, #1817)
    • (from M2:)
    • ๐Ÿ— [build] JMH benchmarks are now in a separate sub-project, forked scrabble benchmark there (8895e94)
    • ๐Ÿ— [build] Log console output in Gradle ONLY for failed tests on CI (fc74beb)
    • (from M1:)
    • [doc] Document that BaseSubscriber instances can't be reused (#1490)
    • ๐Ÿ— [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)

    ๐Ÿš€ ๐Ÿ‘ Thanks to the following contributors that also participated to the Dysprosium-RELEASE or pre-releases

    @aftersss, @akarnokd, @apuravchauhan, @berry120, @Buzzardo, @dittos, @don-vip, @flambard, @gindex, @hisener, @izeye, @jnizet, @mumukiller, @OlegDokuka, @pcdavid, @pmackowski, @ramonPires, @szpak, @ttddyy, @UgiR, @zhouzhou19950825

  • v3.3.0.RC1 Changes

    September 04, 2019

    ๐Ÿš€ Reactor-Core 3.3.0.RC1 is part of Dysprosium-RC1 Pre-Release Train.

    ๐Ÿ›  This first release candidate of the 3.3.x cycle contains bugfixes and improvements from the GA 3.2.12.RELEASE as well as a few new features. It also involves a few behavior impacting changes and deprecations.

    โšก๏ธ โš ๏ธ Update considerations and deprecations

    • A few Mono operators have slightly changed their behavior in regards to how when they propagate onNext: they could trigger onError after onNext, which is not permitted in Mono.
      • Mono#usingWhen now waits for the async complete handler termination before propagating onNext (#1832)
      • Mono#using similarly avoids triggering onNext+onError if cleanup fails (#1853)
      • Mono#doOnTerminate now acts similarly to doOnSuccess, executing the side effect before the onNext is propagated downstream (#1752)
    • ๐Ÿ—„ Mono#do[On|After]SuccessOrError has been deprecated and marked for removal in 3.4 (#1854)
    • ๐Ÿ’… usingWhen API has been polished, and some variants deprecated for removal in 3.4 (#1687)
      • A new overload has been introduced that uses BiFunction for error handler (exposing the failure that causes "rollback")
      • A single-handler version has been added to Mono for alignment with Flux. This is the simplest case: same handler for complete, error and cancel terminations.
      • All other overloads have been deprecated. Goal is to favor either the simple 1-handler-covers-all case OR force users to be explicit about ALL possible terminations.

    ๐Ÿฑ โœจ New features and improvements

    • Due to a few Throwable constants, class references could leak in multi-classloader environments. This is now avoided by skipping the filling of the stacktrace (#1872)
    • โž• Add BufferUntilChanged operator (#1706, bb5b2bb)
    • โž• Added new StepVerifier API to subscribe to source and verify it later (#1848, b2ce5fe)

    ๐Ÿฑ ๐Ÿž Bug fixes

    • (from 3.2:)
    • ๐Ÿ‘ Flux#flatMap with scalar source now supports onErrorContinue (#1684)
    • Flux#doAfterTerminate now executed when onError in fused mode (#1836, #1835)
    • Explicitly catch LinkageError in Traces. This helps with some static analyzers (#1830)
    • ๐Ÿ‘ Pass on cancelSupport when lifting ConnectableFlux (#1860)

    ๐Ÿ“š ๐Ÿ“– Documentation, Tests and Build

    • [doc] Add limitRate marble diagrams (#1449)
    • ๐Ÿ’… [build] Polish benchmarks build, remove jmh plugin (#1844, 1ba4944)
    • โœ๏ธ [doc] Fix several typos in javadocs (#1845)
    • ๐Ÿ— [build] Make it possible to run two JMH tasks - baseline and current (#1862)
    • ๐Ÿ’… [polish] Fix MaterializeSubscriber toString, AbstractQueue's won't work (df34ad9)
    • โšก๏ธ [chores] Update BlockHound to RC1 (#1877)
    • (from 3.2:)
    • ๐Ÿšš [github] Removed CONTRIBUTING.md and issue_template in favor of centralized ones (740c048)
    • ๐Ÿ— [build] Use JCenter, not MavenCentral for doDownloadBaseline (aa08709, d4f5332)
    • ๐Ÿšš [doc] Remove double mention of subscribe in Flux README (#1861)
    • 0๏ธโƒฃ [doc] Document that default initial delay for interval is the period (#1866)

    ๐Ÿš€ ๐Ÿ‘ Thanks to the following contributors that also participated to this release

    @gindex, @UgiR

  • v3.3.0.M3 Changes

    July 30, 2019

    ๐Ÿš€ Reactor-Core 3.3.0.M3 is part of Dysprosium-M3 Release Train.

    ๐Ÿ›  This third milestone of the 3.3.x cycle contains bugfixes and improvements (including changes from the GA 3.2.11.RELEASE) as well as some behavior/API impacting changes:

    โšก๏ธ โš ๏ธ Update considerations and deprecations

    • ๐Ÿ—„ #1742 Processors and Kotlin extensions deprecations
    • ๐Ÿšš the WorkQueueProcessor and TopicProcessor have been marked as deprecated for 3.3.x and will be removed in 3.4
    • ๐Ÿ—„ the Kotlin extensions are deprecated in core and replaced by a dedicated project/repo
    • ๐Ÿ—„ in both cases, the deprecated classes don't appear in the generated javadoc jar
    • โฑ #1764 Deprecated method Schedulers.Factory#decorateExecutorService has been removed
    • #1669 All onBackpressureBuffer(maxSize+error) variants now delay errors
    • ๐Ÿšš In debug mode, most of the original stacktrace is artificially moved at the end of the exception's output, after the "backtrace" (#1781)
    • ๐Ÿ—„ #1745 compose() has been deprecated and renamed transformDeferred()
    • ๐Ÿšš deprecated operator will be removed in 3.4
    • ๐Ÿšฆ #1451 Dematerialize has been reworked and now expects 1 request per upstream Signal
    • ๐Ÿšฆ This avoids onNext events to be emitted only when the subsequent signal is ready upstream
    • ๐Ÿšฆ This also means that in order to get a terminal signal like onComplete signal, the corresponding Signal must be explicitly requested from upstream (one extra request(1))

    ๐Ÿฑ โœจ New features and improvements

    • โž• Add "VirtualTimeScheduler#getScheduledTaskCount()" (#1746)
    • #1763 Flux.parallel now uses Schedulers.DEFAULT_POOL_SIZE (which can be overridden by system property)
    • #1767 Add ParallelFlux#then to compose on parallel termination
    • โฑ #1722 Make sure ElasticScheduler.CachedService gets disposed
    • #1798 Use bounded wildcard in error(Supplier)
    • ๐Ÿ’… Polish flux metrics (#1802)
      • see also the other commits linked in that PR
    • Actually record executor service metrics to Micrometer (#1795)
    • โž• Add a Context-aware {Mono,Flux}.deferWithContext (#1819)
    • โšก๏ธ Eliminate subscribe from stack by optimizing the "tail calls" (#1761, #1826)
    • #1416 Add lambda subscribe variants with a context
    • (from 3.2:)
    • #1793 Reject Context.of calls with duplicate keys
    • ๐Ÿ’… Polish ContextN null checks (#1801)

    ๐Ÿฑ ๐Ÿž Bug fixes

    • (from 3.2:)
    • โฑ #1739 Enforce a name for Schedulers.fromExecutorService
      • without this explicit name, the metrics would use null as a name
    • ๐Ÿ‘ #1783 Do not drop errors in MonoCacheTime, better doc (#1784)
    • #1738 FluxRefCount inner doesn't guard against multiple cancels
    • #1797 Explicitly reject null keys/values in Context constructors
    • ๐Ÿ‘ป #1741 MonoCreate hanging if delayUntil throws exception

    ๐Ÿ“š ๐Ÿ“– Documentation, Tests and Build

    • ๐Ÿ“š [doc] Various documentation improvements and typo fixes (1847fcf, a7a25d3, 6289325, 631b399, #1757, #1796, #1820, #1821, d48ac6c)
    • ๐Ÿ— [build] Use "check" task as an aggregator, not "test" (#1776)
    • ๐Ÿ‘€ [doc] #1539 Add "metrics" section to the reference guide (see also #1812, #1817)
    • โšก๏ธ Update BlockHound to 1.0.0.M4 (#1751)
    • ๐Ÿ’… [chores] Polish codebase to fix compiler warnings/suppress some in tests (#1824)

    ๐Ÿš€ ๐Ÿ‘ Thanks to the following contributors that also participated to this release

    @jbnizet, @izeye, @dittos, @apuravchauhan, @gindex, @hisener, @berry120, @pcdavid, @ttddyy, @ramonPires