Releases: reactor/reactor-core
v3.0.4.RELEASE
This is the 4th release of Reactor 3.0, part of {ALUMINIUM-RELEASE}
Release Train.
This is a recommended update for all Reactor 3 users.
⚠️ Update considerations and deprecations
Cancellation
is being deprecated and will be removed in 3.1.0. The newDisposable
replaces it (#322)Scheduler
now implementsDisposable
. We advise that if you have an implementation ofScheduler
, you explicitly implement bothshutdown()
anddispose()
, with the concrete code in dispose() and the shutdown() method calling dispose().- Same with
Scheduler.Worker
- A report has been issued in #339 and might force library developers to issue a patch release recompiled against reactor-core 3.0.4 if they wish to offer third party users option to upgrade too.
✨ New features and improvements
- A new
BaseSubscriber
has been added to allow to easily subscribe and play
with the request/cancel. It offers hooks, including a hookFinally that always
execute on sequence termination (#254, #279) - Added new buffer operators based on predicates:
bufferUntil
andbufferWhile
(#227) - The new
doFinally
operator allows to perform a side effect on any type of
termination (onError, onComplete and cancel) (#251) - When using a
WorkQueueProcessor
, a best effort attempt at detecting the capacity
of the underlyingExecutor
is made in order to prevent you from subscribing
too much (#199) - Added a
doOnEach
variant toFlux
that takes aConsumer<Signal>
(#264, #289) - Added a
onBackpressureBuffer
variant that takes aBufferOverflowStrategy
,
allowing to decide what to do if the bounded buffer fills up: error, drop last
element, drop oldest element in buffer... (#281) - A variant of
Mono.and
based on aFunction<T, Mono<V>>
now allows to easily
combine a value and the result of applying an asynchronous processing on it
into aTuple2
(#300) Worker
now has aisShutdown()
method (#313)- A
Disposable
interface has been introduced, preparing to replaceCancellation
. For now it extends Cancellation (#322)
🪲 Bug fixes
FluxHandle
sink always useonOperatorError
(#282)- Rework handling of
RejectedExecutionException
in most processors (#275, #293, #298, #274, #299, #313, #319)- the exception is more consistently thrown by all schedulers in case its underlying executor rejects a task because the scheduler was shut down.
- Fix the onNext/onComplete callback reversal in async-fused sequences (#230)
- A Callable returning null now always trigger onError(NPE) (#261)
- Don't silence errorNotImplemented in Schedulers (#257)
- Improve doOn callback failures handling (#247)
- Prevent logging of a
Subscription
as aCollection
inlog()
(instead using
a dedicated format), which would cause aNotImplementedException
with some
loggers applying custom logic to Collections (#262) - Fix
flatMapSequential
dropping some elements when there are more than
prefetch
source elements (workaround: use same number for prefetch and
maxConcurrency) (#301) - Fix the sharing of state between multiple subscribers for
Mono#doOnTerminate
(#242)
Various changes
- Fix typos in javadoc of multiple files
- Update doc to 3.0.4.BUILD-SNAPSHOT
- Integrate reactor-test 3.0.4
- Build and tests improvements:
- Use compileOnly configuration and RELEASE version for JSR-166 backport dependency (#291, #292)
- Improve Travis build integration and tweak gradle tests
- Convert some long running tests to using virtual time, separate consistency
tests into their own category (not ran during PR integration), reduce iteration
count in some looping tests.
👍 Thanks to the following contributors that also participated to this release
@dfeist, @wilkinsona, @akarnokd, @not-for-me
And thanks for raising issues/feedback: @dfeist, @balamaci, @srinivasvsk, @kdvolder, @gdrouet, @artembilan, @graememoss, @jurna
v3.0.3.RELEASE
This is the third release of Reactor 3.0. This is a recommended update for all Reactor 3 users.
Update considerations and deprecations
- the RxJava2 adapters have been moved to external project reactor-addons/reactor-adapter
RxJava1Adapter
support has been dropped in favor of the official rxjava-reactive-stream. SinceRxJava1Adapter
was broken by latest rxjava1 maintenance releases, this might not be considered a hard breaking change.- if you used the test class
TestSubscriber
from the sources, it has been removed from the public API (renamedAssertSubscriber
and placed in test scope until it is removed definitely). Please use theStepVerifier
class in the external project reactor-addons/reactor-tests3.0.3.RELEASE
instead. - the protected field
subscriber
inOperators.MonoSubscriber
has been renamedactual
to be consistent with the other reactor-core operators. It should only be impacting for users that have implemented their own Mono operators. Flux#then(Publisher<Void>)
has been deprecated, use the new namethenEmpty
(will be removed in3.1
, see #238)Flux#subscribe
overrides with a prefetch parameter have been deprecated in favor of chaining the newlimitRate
to other variants (#225)
🐞 Known bugs
- #230 is not entirely fixed: callbacks for
onNext
andonComplete
can still be called in wrong order, which impacts thedoOnSuccess
operator.- see discussion in PR #243. workaround: use
doOnNext
rather thandoOnSuccess
- see discussion in PR #243. workaround: use
New features and improvements
- new
mergeSequential
andflatMapSequential
operators (#178)- these allow to eagerly subscribe to the merged publishers, but to keep items emitted by them in order
- new
limitRate
operator (#180)- allows to control the backpressure signal sent to the upstream instead of relying on downstream backpressure signals that may be too high, effectively rate limiting the upstream
- cached schedulers are reset and shutdown upon
setFactory
, and are now aSupplier<Scheduler>
(#218) - added
subscribe
variants with aConsumer<Subscription>
callback (#196) - macro and micro optimizations in
Flux
(fromStream
,thenMany
,zip
) andMono
(when
,and
,or
andthenMany
) (#240, #237)
Bug fixes
- don't share doOnSuccess state (#232)
- fix MonoSubscriber fusion logic (#230)
- fix
PeekFuseableSubscriber#poll
not usingOperators.onOperatorError
(#205) - cancel
Subscription
on consumer error (#212) - self Suppression IllegalArgumentException when 'onErrorResume' propagates existing exception (#204)
- make
Scheduler
shutdown consistent handling with future.cancel(true/false) - do not override subscription with a cancelled one (#202)
- various fixes synchronized from reactive-streams-commons (#215)
- improves error handling for flow with doOnError and subscribe (#190)
Various changes
- various code cleanups and javadoc improvements
- increased test coverage
- a first step in the direction of harmonizing Flux and Mono
thenXXX
APIs (#238, #198) - exported IntelliJ inspection profile, renamed code style configuration in
/codequality/idea
- ring buffer code missing attribution to https://lmax-exchange.github.io/disruptor/ (#229)
- reduce logging level used in Hooks.onXX (#213)
- use
j.u.Objects
inSignal
equals
andtoString
Thanks to the following contributors that also participated to this release 👍 : @dfeist @poutsma @snicoll @akarnokd
v3.0.2.RELEASE - Reactor 3.0 GA !
Welcome to Reactor 3.0 !
v3.0.1.RELEASE
Full list of changes and fix : https://github.com/reactor/reactor-core/milestone/7?closed=1
v3.0.0.RELEASE
[artifactory-release] Release version 3.0.0.RELEASE
v3.0.0.RC2
Changes from RC1:
- name consistency fixes on Sinks : fail -> error, MonoSink#complete -> success
- remove MonoSink interface from MonoProcessor
- remove fromCallableOrEmpty in favor of Mono#create
- remove RingBuffer from surface API
- fix Mono#when and #whenDelayError vararg/iterable signatures
- remove TestSubscriber
- generic "handle" operator, removing immediate need for lifting and tricks for error handling
- global error hooks
- TupleXx fields are no longer public, use Getters only.
- global debug mode that auto adds logging , maybe combined with an open global hook for assembly
- Rework some operator error utils from Exceptions linked to global state into new Hooks
- the end of ComputationScheduler since SingleScheduler is enough for the use case of non blocking task runs
- New Flux#doOnEach and Flux/Mono#doOnLifecycle
- more scheduler hooks
- porting rx join/groupJoin operators
v3.0.0.RC1
Breaking from v2.5.0.M4
- Bump to 3.0.x
- Package restructure and name consistency fixes
- Flux & Mono operator fixes
v2.5.0.M4
New exciting stuff, polishing, name changes, fixes, efficiency, clarifications: that's the result of an extended feedback and an active stream of improvements from Reactive Streams Commons.
TBC:
Breaking from M3 :
Computations
andTimer
factories are now used throughSchedulers
Computations#concurrent
->Schedulers#elastic
Computations#parallel
->Schedulers#parallel
orSchedulers#computation
if pure non blocking tasks
- Mono.any -> first
- Mono.get -> block
- Mono.toCompletableFuture -> toFuture,
- Mono.fromCompletableFuture -> fromFuture
- Flux.amb -> firstEmitting
- Flux.toXx -> collectXxx
- Flux.exists -> any
- Flux.stream() -> toStream()
- Flux.partition -> parallel
- Mono and Flux after -> then
- Mono and Flux consume -> subscribe
Removed :
- ExecutorUtils
- UUIDUtils moved to reactor-io/reactor-ipc
- yield
v2.5.0.M3
- Introducing Scheduler/Worker contract from Reactive Streams Commons
Breaking from M2 :
SchedulerGroup
is nowComputations
andio
->concurrent
,async
->parallel
publishOn()
is nowsubscribeOn()
dispatchOn()
is nowpublishOn()
- connect() and similar interruptible API now return
Cancellation
instead ofRunnable
Timer
API changesstartEmitter()
is nowconnectEmitter()
Additions :
- scheduling support for plain ExecutorService
Flux#concatMapIterable/flatMapIterable
- User experience improvements on Mono
Mono#when
now properly completes when all input are complete.- +
Mono#fromSupplier
andMono#whenDelayError
- +
Flux#collect(java.util.stream.Collector)
- Minor fixes
- Performance tweaks (yes we still can !) especially for Mono !
v2.5.0.M2
View full release announce here : https://spring.io/blog/2016/03/11/reactor-core-2-5-becomes-a-unified-reactive-foundation-on-java-8