github reactor/reactor-core v3.0.6.RELEASE

latest releases: v3.8.5, v3.7.18, v3.8.4...
9 years ago

This is the 6th release of Reactor 3.0, part of Aluminium-SR2 Release Train.

This is a recommended update for all Reactor 3 users.

⚠️ Update considerations and deprecations

  • In this release, we evaluated and polished ad-hoc public api usage in preparation for the next major release 3.1.0. Specifically we:
    • Deprecated Flux and Mono xxxMillis(long, ...) signatures in favor of a unique xxx(Duration) alternative. (see #436)
    • Merged the now deprecated TimedScheduler into Scheduler for an easier execution contract (see #451).
    • Deprecated Operators.SubscriberAdapter which was encouraging inefficient encapsulation.
    • Merged introspection interfaces Trackable, Loopback, Producer, Receiver, MultiReceiver and MultiProducer into a single Scannable contract for easier serviceability extension development. (see #249)
    • Deprecated ambiguous FluxSink/MonoSink.setCancellation in favor of fluent and explicit onCancel and onDispose. It's important to distinguish the various reactor shutdown states:
      • terminated == onError || onComplete
      • cancelled == cancel
      • disposed == terminated || cancelled
    • Deprecated FluxSink.serialize() since now Flux.create default to serialize (see #456), use of Flux.push can now be used alternatively for optimized single-producer push sources.
    • Aligned all error delaying aliases under combinatory conditions (merge, zip etc) to a suffixed alias standard xxxDelayError. In 3.1 we look forward giving subscribe-time option to override this behavior if the non suffixed operator alias is used. (see #480).
  • Default timed operator Scheduler is now Schedulers.parallel, note that thread-name will now vary between the number of workers as in parallel-x instead of a single timed-n. (see 93a08ae)

Avoiding deprecated API now as documented in javadoc will significantly reduce the burden of updating to 3.1. We track most of the deprecated APIs marked for deletion in 3.1 in #323.

✨ New features and improvements

  • Avoid unnecessary cancel events on onNext in Mono Subscribers such as operators or terminal subscribe/block calls. (see #442)
  • Add Flux/Mono Duration + Scheduler aliases (see #436)
  • Add FluxSink and MonoSink onCancel(Disposable) and onDispose(Disposable) (see #450, #444).
  • Add Scannable to query reactor component stateful graphs (see #249).
  • Add Flux.push for single producer, push-only alternative to Flux.create (see #456).
  • Flux.create is now "serialized by default" and allows for multi producer push (see #456).
  • Add FluxSink.onRequest(LongConsumer) to notify producer of downstream requests (see #456).
  • Add Mono.whenDelayError(Iterable) (see #470)
  • Add Mono.untilOther(Publisher) to coordinate on another Publisher (see #465)
  • Add Flux/Mono filterWhen(Function<T, Publisher<Boolean>>> for async filtering (see #498)

🪲 Bug fixes

  • Fix Flux.windowWhile replenishing issue (see #477)
  • Fix Flux.concatMap prefetch to unbounded when used with Integer.MAX_VALUE (see #476)
  • Fix Mono.fromRunnable fusion issue that resulted in no runnable invoked (see #455)
  • Fix Flux/Mono.publish(Function) ArrayOutOfBoundsException (see #438)
  • Fix Schedulers.fromExecutorService(mayInterruptIfNeeded) issue where interrupt option was ignored (see #443)
  • Throwable.addSuppressed is now protected against circle reference in error handling (see #439)
  • Fix TopicProcessor silently failing on backlog size == 1 (see #445)
  • Fix Flux.flatMapIterable termination issue (see #453)
  • Fix BaseSubscriber.dispose to actually cancel upstream (see #461)

📖 Documentation, Tests and Build

  • Added some advanced use documentation (see #505)

👍 Thanks to the following contributors that also participated to this release !

@lhotari @madhead @RunninglVlan @bdavisx @nebhale

A warm welcome to @rajinisivaram as our new internal contributor. You might already have noticed her name as she is also working on the awesome https://github.com/reactor/reactor-kafka.

Finally a massive thank you to our resident reactive doctor @akarnokd and his support in various design issues, lately on the new filterWhenoperator.

Don't miss a new reactor-core release

NewReleases is sending notifications on new releases.