Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Hardening automatic context propagation #3549

Merged
merged 27 commits into from
Oct 3, 2023
Merged

Conversation

chemicL
Copy link
Member

@chemicL chemicL commented Jul 27, 2023

Summary

This change addresses Flux, Mono, and Publisher implementations that are implemented outside of reactor-core for the purposes of automatic restoration of ThreadLocal state from the Context.
Original issue: #3478

Motivation

Arbitrary Flux, Mono, or raw Publisher implementations can deliver signals from any Thread they desire, with no need to use Scheduler-controlled Threads. The implementations in reactor-core, whenever they switch Threads or when they receive signals out-of-band (e.g. request(n)) restore the ThreadLocal state. Recently, factories for Flux and Mono creation from external sources, such as a raw Publisher, or Future implementations, have added guards via a dedicated ThreadLocal-restoring Subscriber to deal with signals from the sources that are not performing the restoration. However, custom Flux, Mono, and Publisher sources not wrapped via from() method can deliver signals without the ThreadLocal state restored. This is the case with reactor-netty's Flux implementation delivering signals from Netty's event loop. Also, while wrapping the sources obtained via Flux.from and Mono.from factories works fine, plenty of operators, such as flatMap, accept a raw Publisher and don't provide any guard against changing Thread, which means these operators need to be addressed.

Core ideas

This PR applies wrapping of either the Producer or Subscriber. It is driven by a Scannable flag on the Publisher. We do it in these scenarios:

  1. Wrap the Publisher when we assemble an operator at runtime of another operator (flatMap for example).
  2. Wrap the Subscriber at operators that allow the user to directly emit signals from a different Thread (Sinks for example).
  3. Wrap the Subscriber when subscribe(Subscriber) from RS Publisher is called and the source is not protected.

Why wrap the Publisher and not always wrap the Subscriber? The reason is that even when we wrap the Subscriber, the user can still call the base method, which would again wrap the Subscriber. We could also introduce a flag on the Subscriber type to determine that or do plenty of instanceof checks. The latter would be too expensive, while the former could potentially be a very intrusive and long effort.

Changes

  • Added a new Scannable attribute: INTERNAL_PRODUCER, which allows determining if a Flux or Mono is a reactor-core implementation.
  • Reviewed Scannable implementations to report INTERNAL_PRODUCER properly for internal implementations.
  • Introduced new methods in Operators class, which allow wrapping the Subscriber with a context restoration guard whenever the Publisher is not an INTERNAL_PRODUCER and allow wrapping the Publisher directly by applying an operator that restores ThreadLocals when signals travel downstream.
  • In Flux, Mono, InternalFluxPublisher, InternalMonoPublisher, FluxFromMonoOperator, MonoFromFluxOperator, MonoFromPublisher, the subscribe(Subscriber) method from Publisher uses Subscriber wrapping as a last-resort chance to restore ThreadLocals. In case subscribe(CoreSubscriber) is used, we have no way to intercept it, as it is abstract, so we need other means of wrapping too.
  • Flux.from, Mono.from, Mono.fromDirect and their respective wrap() methods also apply the wrapping.
  • In operators which receive a Publisher from the user during runtime (for instance flatMap receives it as a return value of a lambda provided by the user), either Operators.toFluxOrMono is used or direct type wrapping when it is known what is expected.
  • Added plenty of tests that depict the issue for the identified cases that are able to accept a Publisher that can switch a Thread when delivering signals

Considered alternatives

A workaround would be to recommend users to wrap any non-reactor implementation with .contextWrite(Function.identity()), however that seems impractical and can be a source of errors when a library unaware of such a recommendation doesn't do so for its sources. Even if a library would do so, the user could apply another such guard leading to undesired performance impact. Therefore, it seems like the solution needs to land in reactor-core.

A different way to implement the barrier that restores ThreadLocal values would be to introduce a parent class for Flux and for Mono that is on the subscribe path which wraps every Subscriber when necessary. This would not prevent against raw Publisher implementations though. [TBC]

TODO

  • Review ParallelFlux implementations.
  • Review SourceProducer implementations.
  • Review InnerProducer implementations.
  • Review ConnectableFlux implementations and hot producers.
  • Review GroupedFlux implementations.
  • Review Sinks and Flux and Mono creators that have generative sinks.
  • Review Processors implementations. (DEPRECATED, skip)
  • Deliver onComplete asynchronously by the test Flux and Mono and validate the ThreadLocal state.
  • Validate onError cases.
  • Review tests and extract common patterns (methods accepting a Supplier of the chain to validate signals on)
  • Consider a from(Publisher) method that returns a Publisher that is either a Flux or Mono, which has appropriate guards (Mono for a non-INTERNAL_PRODUCER Mono, Flux for anything else). Implemented as Operators.toFluxOrMono.

@chemicL chemicL added this to the 3.6.0-RC1 milestone Sep 28, 2023
@chemicL chemicL added the area/context This issue is related to the Context label Sep 28, 2023
@chemicL chemicL changed the base branch from 3.5.x to main September 28, 2023 13:48
@chemicL chemicL marked this pull request as ready for review September 28, 2023 13:49
@chemicL chemicL requested a review from a team as a code owner September 28, 2023 13:49
@chemicL chemicL self-assigned this Sep 28, 2023
@@ -47,7 +47,7 @@ public Object scanUnsafe(Attr key) {
if (key == Attr.PREFETCH) return getPrefetch();
if (key == Attr.RUN_STYLE) return Attr.RunStyle.SYNC;

return null;
return super.scanUnsafe(key);
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

the minor outcome is that super scan will go through the same attr one more time (hey, potential small perf penalty). So... may be it worth just adding attr explicitly as it was before

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actually, the individual implementations should not duplicate what the parent does, just enhancements and changes should be reported.

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

That is for common cases. Here, in low-level library, that was likely done performance wise. Even it was not important before, now we would have to be sure that by doing common OOP stuff we don't impact performance on the hot path (since now that code is part of the hot path and any redundancy will add significant impact at scale).
Such thing may invisible for latency of a single request, but at scale, especially in the case when just few Netty threads are doing all the work such small Impact in 0,00001% will have %1 overall perf degradation for 100_000 queued requests which would have to be served by the same number of threads. Thus such unthoughtful change may impact someones production.

Copy link
Member Author

@chemicL chemicL Oct 4, 2023

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The reasoning you give assumes that 1 thread is handling the queue. If you keep maintaining the queue filled at 100k pending requests constantly it means you're in much bigger trouble. To put things into perspective assume mean time to handle a request is 1ms. That means you'd wait 100s for a request to start being processed. That 0,00001% impact, or 1% overall impact is honestly meaningless to you at that point. Your request is already waiting for 1 minute 40 seconds. It doesn't matter you'd wait an additional second, having the end result being 1 minute 41 seconds.

Putting that discussion aside, as you suggest, I will see whether inlining kicks in, as I'd expect it should with such short methods, but if this is a tricky situation to the JIT, we'll see that in JMH tests, which I'm also going to perform.

@OlegDokuka
Copy link
Contributor

one main suggestion for now is to eliminate all super.scanUnsafe(key) and replace it with explicit if (key == InternalProducerAttr.INSTANCE) return true;.

Copy link
Contributor

@OlegDokuka OlegDokuka left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

LG overall with minor comments

@chemicL
Copy link
Member Author

chemicL commented Sep 29, 2023

one main suggestion for now is to eliminate all super.scanUnsafe(key) and replace it with explicit if (key == InternalProducerAttr.INSTANCE) return true;.

I'd suggest the opposite. Removing duplicates in children if the parent does some common job.

@OlegDokuka
Copy link
Contributor

OlegDokuka commented Sep 29, 2023

one main suggestion for now is to eliminate all super.scanUnsafe(key) and replace it with explicit if (key == InternalProducerAttr.INSTANCE) return true;.

I'd suggest the opposite. Removing duplicates in children if the parent does some common job.

Calling super should increase calls depth hence decrease inlining probability. I would do JMH perf test on that to see diff.

Anyways, this should not stop us on merging that effort. I suggest revising perf aspect separately. FYI, in reactor we prefer duplication and copying over DRY rule where possible. That may sound ridiculous but it worth it for hot path which this scan operation becomes with this PR

@chemicL chemicL merged commit 12926b9 into main Oct 3, 2023
7 checks passed
chemicL added a commit that referenced this pull request Oct 31, 2023
This change revisits InternalMonoOperator and InternalFluxOperator
implementations and wraps their async sources with a context restoring
Subscriber implementation.

This is a follow-up for #3549
zeebe-bors-camunda bot added a commit to camunda/camunda that referenced this pull request Nov 16, 2023
15184: deps(maven): Update dependency io.projectreactor:reactor-core to v3.6.0 (main) r=npepinpe a=renovate[bot]

[![Mend Renovate logo banner](https://app.renovatebot.com/images/banner.svg)](https://renovatebot.com)

This PR contains the following updates:

| Package | Change | Age | Adoption | Passing | Confidence |
|---|---|---|---|---|---|
| [io.projectreactor:reactor-core](https://togithub.com/reactor/reactor-core) | `3.5.11` -> `3.6.0` | [![age](https://developer.mend.io/api/mc/badges/age/maven/io.projectreactor:reactor-core/3.6.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/maven/io.projectreactor:reactor-core/3.6.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/maven/io.projectreactor:reactor-core/3.5.11/3.6.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/maven/io.projectreactor:reactor-core/3.5.11/3.6.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) |

---

> [!WARNING]
> Some dependencies could not be looked up. Check the Dependency Dashboard for more information.

---

### Release Notes

<details>
<summary>reactor/reactor-core (io.projectreactor:reactor-core)</summary>

### [`v3.6.0`](https://togithub.com/reactor/reactor-core/releases/tag/v3.6.0)

<!-- Release notes generated using configuration in .github/release.yml at v3.6.0 -->

Reactor-Core 3.6.0 is part of 2023.0.0 Release Train.

This is the first GA release of 2023.0.0 🎉

This note focuses on 3.6.0 proper, curating changes from across all milestones and also includes changes already released as part of 3.4.x line up to 3.4.34 as well as 3.5.x line up to 3.5.12.

While there are plenty of improvements and bug fixes, it's worth to highlight the bigger themes first:

-   The `Schedulers.boundedElastic()` may return a specific implementation tailored for [Project Loom](https://openjdk.org/projects/loom/) and running on virtual threads if application runs in Java 21+ runtime and have set the `reactor.schedulers.defaultBoundedElasticOnVirtualThreads` system property to `true`. Please consult the [javadocs](https://projectreactor.io/docs/core/snapshot/api/reactor/core/scheduler/Schedulers.html#boundedElastic--) and [the reference documentation](https://projectreactor.io/docs/core/snapshot/reference/#schedulers) for more information.
-   Support for [Multi-Release Jar](https://openjdk.org/jeps/238). Since this release project has java version specific sources that are enabled if runs in specific Java runtime. This allows to avoid unnecessary reflection checks as well as embrace some new neat java features without changing the baseline for the whole code base.
-   Hardening of the context-propagation. This release introduces better support for external `Publisher`s detection with their corresponding decoration if detected. This enables more stable context-propagation when it comes to external libraries integration.

See dedicated pre-release [blogpost](https://spring.io/blog/2023/10/31/what-new-is-coming-in-reactor-core-3-6-0#virtual-threads-support) for more information.

#### What's Changed

##### ⚠️ Update considerations and deprecations

-   ensures `addCap` always returns value with flag by [`@&#8203;OlegDokuka](https://togithub.com/OlegDokuka)` in [reactor/reactor-core#3610
-   makes `throwable` assignment happens-before `done` assignment in `onError` for FluxPublish by [`@&#8203;OlegDokuka](https://togithub.com/OlegDokuka)` in [reactor/reactor-core#3638

##### ✨ New features and improvements

-   Hardening automatic context propagation by [`@&#8203;chemicL](https://togithub.com/chemicL)` in [reactor/reactor-core#3549
-   InternalOperator automatic context propagation by [`@&#8203;chemicL](https://togithub.com/chemicL)` in [reactor/reactor-core#3625
-   adds support for gradle 8.1.1 by [`@&#8203;OlegDokuka](https://togithub.com/OlegDokuka)` in [reactor/reactor-core#3521
-   adds support for multi-release-jar | rework `Traces` by [`@&#8203;OlegDokuka](https://togithub.com/OlegDokuka)` in [reactor/reactor-core#3523
-   introduces automatic loom support by [`@&#8203;OlegDokuka](https://togithub.com/OlegDokuka)` in [reactor/reactor-core#3524
-   provides minimal troubleshooting for mrj by [`@&#8203;OlegDokuka](https://togithub.com/OlegDokuka)` in [reactor/reactor-core#3532
-   fix [#&#8203;3539](https://togithub.com/reactor/reactor-core/issues/3539) takeUntil Predicate test before emit by [`@&#8203;AramMessdaghi9001](https://togithub.com/AramMessdaghi9001)` in [reactor/reactor-core#3544
-   Reworks FluxPublish internals to relay on predictable state machine by [`@&#8203;OlegDokuka](https://togithub.com/OlegDokuka)` in [reactor/reactor-core#3538
-   dedicated loom oriented boundeElasticScheduler implementation by [`@&#8203;OlegDokuka](https://togithub.com/OlegDokuka)` in [reactor/reactor-core#3566
-   Handling 1.0.0 of context-propagation by [`@&#8203;chemicL](https://togithub.com/chemicL)` in [reactor/reactor-core#3609
-   provides extra check for contextualName presence by [`@&#8203;OlegDokuka](https://togithub.com/OlegDokuka)` in [reactor/reactor-core#3611
-   JCStress: Await Scheduler dispose and increase timeouts by [`@&#8203;chemicL](https://togithub.com/chemicL)` in [reactor/reactor-core#3630

##### 🐞 Bug fixes

-   fixes `MonoDelayElement` to properly handle race between delay `run` and `onNext` signal by [`@&#8203;OlegDokuka](https://togithub.com/OlegDokuka)` in [reactor/reactor-core#3546
-   ensures `GroupedFlux` delivers subscription for the second subscriber  by [`@&#8203;OlegDokuka](https://togithub.com/OlegDokuka)` in [reactor/reactor-core#3555
-   ensures late `onRequest` consumer observes demand by [`@&#8203;OlegDokuka](https://togithub.com/OlegDokuka)` in [reactor/reactor-core#3557
-   ensures that proper index is used during onNext check by [`@&#8203;OlegDokuka](https://togithub.com/OlegDokuka)` in [reactor/reactor-core#3614
-   ensures SchedulerTask uses isShutdown instead of isDisposed by [`@&#8203;OlegDokuka](https://togithub.com/OlegDokuka)` in [reactor/reactor-core#3623

##### 📖 Documentation, Tests and Build

-   Fix return type for Mono.tap in javadoc by [`@&#8203;ajax-surovskyi-y](https://togithub.com/ajax-surovskyi-y)` in [reactor/reactor-core#3564
-   fixes CI.yml by [`@&#8203;OlegDokuka](https://togithub.com/OlegDokuka)` in [reactor/reactor-core#3575
-   adds CI nightly builds by [`@&#8203;OlegDokuka](https://togithub.com/OlegDokuka)` in [reactor/reactor-core#3581
-   disables temporarily java 21 tests by [`@&#8203;OlegDokuka](https://togithub.com/OlegDokuka)` in [reactor/reactor-core#3590
-   Bump actions/setup-java from 3.12.0 to 3.13.0 in /.github/workflows by [`@&#8203;dependabot](https://togithub.com/dependabot)` in [reactor/reactor-core#3585
-   Bump actions/checkout from 3.1.0 to 4.1.0 in /.github/workflows by [`@&#8203;dependabot](https://togithub.com/dependabot)` in [reactor/reactor-core#3586
-   Bump gradle/gradle-build-action from 2.7.0 to 2.9.0 in /.github/workflows by [`@&#8203;dependabot](https://togithub.com/dependabot)` in [reactor/reactor-core#3594
-   improves build speed by [`@&#8203;OlegDokuka](https://togithub.com/OlegDokuka)` in [reactor/reactor-core#3597
-   Revised documentation about context propagation by [`@&#8203;chemicL](https://togithub.com/chemicL)` in [reactor/reactor-core#3617
-   updates to java 21 GA temurin by [`@&#8203;OlegDokuka](https://togithub.com/OlegDokuka)` in [reactor/reactor-core#3631
-   Gradle 8.4 upgrade by [`@&#8203;chemicL](https://togithub.com/chemicL)` in [reactor/reactor-core#3632

##### 🆙 Dependency Upgrades

-   Bump gradle/wrapper-validation-action from 1.0.5 to 1.1.0 in /.github/workflows by [`@&#8203;dependabot](https://togithub.com/dependabot)` in [reactor/reactor-core#3542
-   Bump com.gradle.enterprise from 3.12.4 to 3.14.1 by [`@&#8203;dependabot](https://togithub.com/dependabot)` in [reactor/reactor-core#3548
-   Bump actions/setup-java from 3.6.0 to 3.12.0 in /.github/workflows by [`@&#8203;dependabot](https://togithub.com/dependabot)` in [reactor/reactor-core#3550
-   Bump gradle/gradle-build-action from 2.3.3 to 2.7.0 in /.github/workflows by [`@&#8203;dependabot](https://togithub.com/dependabot)` in [reactor/reactor-core#3551
-   Update `Micrometer` version to `1.10.10` by [`@&#8203;violetagg](https://togithub.com/violetagg)` in [reactor/reactor-core#3560
-   upgrades to latest micrometer versions by [`@&#8203;OlegDokuka](https://togithub.com/OlegDokuka)` in [reactor/reactor-core#3561
-   Bump io.spring.nohttp from 0.0.10 to 0.0.11 by [`@&#8203;dependabot](https://togithub.com/dependabot)` in [reactor/reactor-core#3497
-   Bump org.junit:junit-bom from 5.9.2 to 5.10.0 by [`@&#8203;dependabot](https://togithub.com/dependabot)` in [reactor/reactor-core#3556
-   Bump me.champeau.gradle.japicmp from 0.4.1 to 0.4.2 by [`@&#8203;dependabot](https://togithub.com/dependabot)` in [reactor/reactor-core#3595
-   Bump jmhVersion from 1.36 to 1.37 by [`@&#8203;dependabot](https://togithub.com/dependabot)` in [reactor/reactor-core#3596
-   Bump byteBuddyVersion from 1.14.5 to 1.14.8 by [`@&#8203;dependabot](https://togithub.com/dependabot)` in [reactor/reactor-core#3601
-   Bump com.gradle.enterprise from 3.14.1 to 3.15 by [`@&#8203;dependabot](https://togithub.com/dependabot)` in [reactor/reactor-core#3602
-   Bump ch.qos.logback:logback-classic from 1.2.11 to 1.2.12 by [`@&#8203;dependabot](https://togithub.com/dependabot)` in [reactor/reactor-core#3476
-   Bump de.undercouch.download from 5.4.0 to 5.5.0 by [`@&#8203;dependabot](https://togithub.com/dependabot)` in [reactor/reactor-core#3608
-   Bump com.gradle.enterprise from 3.15 to 3.15.1 by [`@&#8203;dependabot](https://togithub.com/dependabot)` in [reactor/reactor-core#3613
-   Update micrometer and micrometerTracing by [`@&#8203;pderop](https://togithub.com/pderop)` in [reactor/reactor-core#3636
-   Update micrometer, micrometerTracing, contextPropagation by [`@&#8203;pderop](https://togithub.com/pderop)` in [reactor/reactor-core#3637

#### New Contributors

-   [`@&#8203;AramMessdaghi9001](https://togithub.com/AramMessdaghi9001)` made their first contribution in [reactor/reactor-core#3544
-   [`@&#8203;ajax-surovskyi-y](https://togithub.com/ajax-surovskyi-y)` made their first contribution in [reactor/reactor-core#3564

**Full Changelog**: reactor/reactor-core@v3.5.8...v3.6.0

### [`v3.5.12`](https://togithub.com/reactor/reactor-core/releases/tag/v3.5.12)

<!-- Release notes generated using configuration in .github/release.yml at v3.5.12 -->

`Reactor Core` `3.5.12` is part of **`2022.0.13` Release Train**.

#### What's Changed

##### ⚠️ Update considerations and deprecations

-   Make `throwable` assignment happens-before `done` assignment in `onError` for `FluxPublish` by [`@&#8203;OlegDokuka](https://togithub.com/OlegDokuka)` in [#&#8203;3638](https://togithub.com/reactor/reactor-core/issues/3638)

##### ✨ New features and improvements

-   `JCStress`: Await `Scheduler` dispose and increase timeouts by [`@&#8203;chemicL](https://togithub.com/chemicL)` in [#&#8203;3630](https://togithub.com/reactor/reactor-core/issues/3630)

##### 🆙 Dependency Upgrades

-   Update `Micrometer` and `Micrometer Tracing` by [`@&#8203;pderop](https://togithub.com/pderop)` in [#&#8203;3636](https://togithub.com/reactor/reactor-core/issues/3636)

**Full Changelog**: reactor/reactor-core@v3.5.11...v3.5.12

</details>

---

### Configuration

📅 **Schedule**: Branch creation - "every weekday" (UTC), Automerge - At any time (no schedule defined).

🚦 **Automerge**: Disabled by config. Please merge this manually once you are satisfied.

♻ **Rebasing**: Whenever PR becomes conflicted, or you tick the rebase/retry checkbox.

🔕 **Ignore**: Close this PR and you won't be reminded about this update again.

---

 - [ ] <!-- rebase-check -->If you want to rebase/retry this PR, check this box

---

This PR has been generated by [Mend Renovate](https://www.mend.io/free-developer-tools/renovate/). View repository job log [here](https://developer.mend.io/github/camunda/zeebe).
<!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiIzNy40Ni4wIiwidXBkYXRlZEluVmVyIjoiMzcuNDYuMCIsInRhcmdldEJyYW5jaCI6Im1haW4ifQ==-->


15212: deps(maven): Update dependency org.jetbrains:annotations to v24.1.0 (main) r=npepinpe a=renovate[bot]

[![Mend Renovate logo banner](https://app.renovatebot.com/images/banner.svg)](https://renovatebot.com)

This PR contains the following updates:

| Package | Change | Age | Adoption | Passing | Confidence |
|---|---|---|---|---|---|
| [org.jetbrains:annotations](https://togithub.com/JetBrains/java-annotations) | `24.0.1` -> `24.1.0` | [![age](https://developer.mend.io/api/mc/badges/age/maven/org.jetbrains:annotations/24.1.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/maven/org.jetbrains:annotations/24.1.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/maven/org.jetbrains:annotations/24.0.1/24.1.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/maven/org.jetbrains:annotations/24.0.1/24.1.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) |

---

> [!WARNING]
> Some dependencies could not be looked up. Check the Dependency Dashboard for more information.

---

### Release Notes

<details>
<summary>JetBrains/java-annotations (org.jetbrains:annotations)</summary>

### [`v24.1.0`](https://togithub.com/JetBrains/java-annotations/blob/HEAD/CHANGELOG.md#Version-2410)

[Compare Source](https://togithub.com/JetBrains/java-annotations/compare/24.0.1...24.1.0)

-   ``@CheckReturnValue`` is not experimental anymore.

</details>

---

### Configuration

📅 **Schedule**: Branch creation - "every weekday" (UTC), Automerge - At any time (no schedule defined).

🚦 **Automerge**: Disabled by config. Please merge this manually once you are satisfied.

♻ **Rebasing**: Whenever PR becomes conflicted, or you tick the rebase/retry checkbox.

🔕 **Ignore**: Close this PR and you won't be reminded about this update again.

---

 - [ ] <!-- rebase-check -->If you want to rebase/retry this PR, check this box

---

This PR has been generated by [Mend Renovate](https://www.mend.io/free-developer-tools/renovate/). View repository job log [here](https://developer.mend.io/github/camunda/zeebe).
<!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiIzNy40Ni4wIiwidXBkYXRlZEluVmVyIjoiMzcuNDYuMCIsInRhcmdldEJyYW5jaCI6Im1haW4ifQ==-->


Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
@chemicL chemicL deleted the non-core-flux-and-mono branch November 30, 2023 16:01
chemicL added a commit that referenced this pull request Dec 20, 2023
Recent improvements in the automatic context propagation (#3549)
resulted in a regression – some sites where the "last operator" hook
was previously applied no longer saw that behaviour. This change
restores it.

Implementation wise, it's worth noting that the "last operator"
functionality relies on executing the subscribe(Subscriber) method from
the base reactive-streams Publisher instead of the overloads that come
from CorePublisher. The implementations of the reactive-streams base
method in reactor-core apply this hook and that is when something is
considered a "last operator". The wrapping of the Publisher when a
non-internal producer is encountered to restore ThreadLocal values has
changed the compiler's inference of the signature to use the
CoreSubscriber argument variant, breaking the behaviour.

This commit does not bring any tests as the functionality was not
extensively tested before. The issue was discovered in spring-security
in spring-projects/spring-security#14207 and
the change has been validated against the actual use case.
chemicL added a commit that referenced this pull request Jan 2, 2024
Recent improvements in the automatic context propagation (#3549)
resulted in a regression – some sites where the "last operator" hook was
previously applied no longer saw that behaviour. This change restores
it.

Implementation wise, it's worth noting that the "last operator"
functionality relies on executing the subscribe(Subscriber) method from
the base reactive-streams Publisher instead of the overloads that come
from CorePublisher. The implementations of the reactive-streams base
method in reactor-core apply this hook and that is when something is
considered a "last operator". The wrapping of the Publisher when a
non-internal producer is encountered to restore ThreadLocal values has
changed the compiler's inference of the signature to use the
CoreSubscriber argument variant, breaking the behaviour.

This commit does not bring any tests as the functionality was not
extensively tested before. The issue was discovered in spring-security
in spring-projects/spring-security#14207 and
the change has been validated against the actual use case.
dariuszkuc pushed a commit to apollographql/federation-jvm that referenced this pull request Jan 21, 2024
[![Mend
Renovate](https://app.renovatebot.com/images/banner.svg)](https://renovatebot.com)

This PR contains the following updates:

| Package | Type | Update | Change | Age | Adoption | Passing |
Confidence |
|---|---|---|---|---|---|---|---|
| openjdk | final | patch | `17` -> `17.0.2` |
[![age](https://developer.mend.io/api/mc/badges/age/docker/openjdk/17.0.2?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![adoption](https://developer.mend.io/api/mc/badges/adoption/docker/openjdk/17.0.2?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![passing](https://developer.mend.io/api/mc/badges/compatibility/docker/openjdk/17/17.0.2?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![confidence](https://developer.mend.io/api/mc/badges/confidence/docker/openjdk/17/17.0.2?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
|
[secops](https://circleci.com/developer/orbs/orb/apollo/circleci-secops-orb)
| orb | patch | `2.0.6` -> `2.0.7` |
[![age](https://developer.mend.io/api/mc/badges/age/orb/secops/2.0.7?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![adoption](https://developer.mend.io/api/mc/badges/adoption/orb/secops/2.0.7?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![passing](https://developer.mend.io/api/mc/badges/compatibility/orb/secops/2.0.6/2.0.7?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![confidence](https://developer.mend.io/api/mc/badges/confidence/orb/secops/2.0.6/2.0.7?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
|
[com.diffplug.spotless:spotless-plugin-gradle](https://togithub.com/diffplug/spotless)
| devDependencies | minor | `6.21.0` -> `6.24.0` |
[![age](https://developer.mend.io/api/mc/badges/age/maven/com.diffplug.spotless:spotless-plugin-gradle/6.24.0?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![adoption](https://developer.mend.io/api/mc/badges/adoption/maven/com.diffplug.spotless:spotless-plugin-gradle/6.24.0?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![passing](https://developer.mend.io/api/mc/badges/compatibility/maven/com.diffplug.spotless:spotless-plugin-gradle/6.21.0/6.24.0?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![confidence](https://developer.mend.io/api/mc/badges/confidence/maven/com.diffplug.spotless:spotless-plugin-gradle/6.21.0/6.24.0?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
| [org.junit.jupiter:junit-jupiter](https://junit.org/junit5/)
([source](https://togithub.com/junit-team/junit5)) | dependencies |
patch | `5.10.0` -> `5.10.1` |
[![age](https://developer.mend.io/api/mc/badges/age/maven/org.junit.jupiter:junit-jupiter/5.10.1?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![adoption](https://developer.mend.io/api/mc/badges/adoption/maven/org.junit.jupiter:junit-jupiter/5.10.1?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![passing](https://developer.mend.io/api/mc/badges/compatibility/maven/org.junit.jupiter:junit-jupiter/5.10.0/5.10.1?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![confidence](https://developer.mend.io/api/mc/badges/confidence/maven/org.junit.jupiter:junit-jupiter/5.10.0/5.10.1?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
|
[io.projectreactor:reactor-test](https://togithub.com/reactor/reactor-core)
| dependencies | minor | `3.5.9` -> `3.6.2` |
[![age](https://developer.mend.io/api/mc/badges/age/maven/io.projectreactor:reactor-test/3.6.2?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![adoption](https://developer.mend.io/api/mc/badges/adoption/maven/io.projectreactor:reactor-test/3.6.2?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![passing](https://developer.mend.io/api/mc/badges/compatibility/maven/io.projectreactor:reactor-test/3.5.9/3.6.2?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![confidence](https://developer.mend.io/api/mc/badges/confidence/maven/io.projectreactor:reactor-test/3.5.9/3.6.2?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
|
[org.springframework.graphql:spring-graphql-test](https://togithub.com/spring-projects/spring-graphql)
| dependencies | patch | `1.2.3` -> `1.2.4` |
[![age](https://developer.mend.io/api/mc/badges/age/maven/org.springframework.graphql:spring-graphql-test/1.2.4?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![adoption](https://developer.mend.io/api/mc/badges/adoption/maven/org.springframework.graphql:spring-graphql-test/1.2.4?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![passing](https://developer.mend.io/api/mc/badges/compatibility/maven/org.springframework.graphql:spring-graphql-test/1.2.3/1.2.4?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![confidence](https://developer.mend.io/api/mc/badges/confidence/maven/org.springframework.graphql:spring-graphql-test/1.2.3/1.2.4?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
|
[org.springframework.boot:spring-boot-starter-websocket](https://spring.io/projects/spring-boot)
([source](https://togithub.com/spring-projects/spring-boot)) |
dependencies | minor | `3.1.4` -> `3.2.2` |
[![age](https://developer.mend.io/api/mc/badges/age/maven/org.springframework.boot:spring-boot-starter-websocket/3.2.2?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![adoption](https://developer.mend.io/api/mc/badges/adoption/maven/org.springframework.boot:spring-boot-starter-websocket/3.2.2?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![passing](https://developer.mend.io/api/mc/badges/compatibility/maven/org.springframework.boot:spring-boot-starter-websocket/3.1.4/3.2.2?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![confidence](https://developer.mend.io/api/mc/badges/confidence/maven/org.springframework.boot:spring-boot-starter-websocket/3.1.4/3.2.2?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
|
[org.springframework.boot:spring-boot-starter-test](https://spring.io/projects/spring-boot)
([source](https://togithub.com/spring-projects/spring-boot)) |
dependencies | minor | `3.1.4` -> `3.2.2` |
[![age](https://developer.mend.io/api/mc/badges/age/maven/org.springframework.boot:spring-boot-starter-test/3.2.2?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![adoption](https://developer.mend.io/api/mc/badges/adoption/maven/org.springframework.boot:spring-boot-starter-test/3.2.2?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![passing](https://developer.mend.io/api/mc/badges/compatibility/maven/org.springframework.boot:spring-boot-starter-test/3.1.4/3.2.2?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![confidence](https://developer.mend.io/api/mc/badges/confidence/maven/org.springframework.boot:spring-boot-starter-test/3.1.4/3.2.2?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
|
[org.springframework.boot:spring-boot-starter-webflux](https://spring.io/projects/spring-boot)
([source](https://togithub.com/spring-projects/spring-boot)) |
dependencies | minor | `3.1.4` -> `3.2.2` |
[![age](https://developer.mend.io/api/mc/badges/age/maven/org.springframework.boot:spring-boot-starter-webflux/3.2.2?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![adoption](https://developer.mend.io/api/mc/badges/adoption/maven/org.springframework.boot:spring-boot-starter-webflux/3.2.2?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![passing](https://developer.mend.io/api/mc/badges/compatibility/maven/org.springframework.boot:spring-boot-starter-webflux/3.1.4/3.2.2?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![confidence](https://developer.mend.io/api/mc/badges/confidence/maven/org.springframework.boot:spring-boot-starter-webflux/3.1.4/3.2.2?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
|
[org.springframework.boot:spring-boot-starter-web](https://spring.io/projects/spring-boot)
([source](https://togithub.com/spring-projects/spring-boot)) |
dependencies | minor | `3.1.4` -> `3.2.2` |
[![age](https://developer.mend.io/api/mc/badges/age/maven/org.springframework.boot:spring-boot-starter-web/3.2.2?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![adoption](https://developer.mend.io/api/mc/badges/adoption/maven/org.springframework.boot:spring-boot-starter-web/3.2.2?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![passing](https://developer.mend.io/api/mc/badges/compatibility/maven/org.springframework.boot:spring-boot-starter-web/3.1.4/3.2.2?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![confidence](https://developer.mend.io/api/mc/badges/confidence/maven/org.springframework.boot:spring-boot-starter-web/3.1.4/3.2.2?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
|
[org.springframework.boot:spring-boot-starter-graphql](https://spring.io/projects/spring-boot)
([source](https://togithub.com/spring-projects/spring-boot)) |
dependencies | minor | `3.1.4` -> `3.2.2` |
[![age](https://developer.mend.io/api/mc/badges/age/maven/org.springframework.boot:spring-boot-starter-graphql/3.2.2?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![adoption](https://developer.mend.io/api/mc/badges/adoption/maven/org.springframework.boot:spring-boot-starter-graphql/3.2.2?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![passing](https://developer.mend.io/api/mc/badges/compatibility/maven/org.springframework.boot:spring-boot-starter-graphql/3.1.4/3.2.2?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![confidence](https://developer.mend.io/api/mc/badges/confidence/maven/org.springframework.boot:spring-boot-starter-graphql/3.1.4/3.2.2?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
| [org.slf4j:slf4j-api](http://www.slf4j.org)
([source](https://togithub.com/qos-ch/slf4j)) | dependencies | patch |
`2.0.9` -> `2.0.11` |
[![age](https://developer.mend.io/api/mc/badges/age/maven/org.slf4j:slf4j-api/2.0.11?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![adoption](https://developer.mend.io/api/mc/badges/adoption/maven/org.slf4j:slf4j-api/2.0.11?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![passing](https://developer.mend.io/api/mc/badges/compatibility/maven/org.slf4j:slf4j-api/2.0.9/2.0.11?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![confidence](https://developer.mend.io/api/mc/badges/confidence/maven/org.slf4j:slf4j-api/2.0.9/2.0.11?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
| [com.squareup.okhttp3:mockwebserver](https://square.github.io/okhttp/)
([source](https://togithub.com/square/okhttp)) | dependencies | minor |
`4.11.0` -> `4.12.0` |
[![age](https://developer.mend.io/api/mc/badges/age/maven/com.squareup.okhttp3:mockwebserver/4.12.0?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![adoption](https://developer.mend.io/api/mc/badges/adoption/maven/com.squareup.okhttp3:mockwebserver/4.12.0?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![passing](https://developer.mend.io/api/mc/badges/compatibility/maven/com.squareup.okhttp3:mockwebserver/4.11.0/4.12.0?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![confidence](https://developer.mend.io/api/mc/badges/confidence/maven/com.squareup.okhttp3:mockwebserver/4.11.0/4.12.0?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
| io.spring.dependency-management | plugin | patch | `1.1.3` -> `1.1.4`
|
[![age](https://developer.mend.io/api/mc/badges/age/maven/io.spring.dependency-management/1.1.4?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![adoption](https://developer.mend.io/api/mc/badges/adoption/maven/io.spring.dependency-management/1.1.4?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![passing](https://developer.mend.io/api/mc/badges/compatibility/maven/io.spring.dependency-management/1.1.3/1.1.4?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![confidence](https://developer.mend.io/api/mc/badges/confidence/maven/io.spring.dependency-management/1.1.3/1.1.4?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
|
[org.jetbrains:annotations](https://togithub.com/JetBrains/java-annotations)
| dependencies | minor | `24.0.1` -> `24.1.0` |
[![age](https://developer.mend.io/api/mc/badges/age/maven/org.jetbrains:annotations/24.1.0?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![adoption](https://developer.mend.io/api/mc/badges/adoption/maven/org.jetbrains:annotations/24.1.0?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![passing](https://developer.mend.io/api/mc/badges/compatibility/maven/org.jetbrains:annotations/24.0.1/24.1.0?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![confidence](https://developer.mend.io/api/mc/badges/confidence/maven/org.jetbrains:annotations/24.0.1/24.1.0?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
| org.springframework.boot | plugin | minor | `3.1.3` -> `3.2.2` |
[![age](https://developer.mend.io/api/mc/badges/age/maven/org.springframework.boot/3.2.2?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![adoption](https://developer.mend.io/api/mc/badges/adoption/maven/org.springframework.boot/3.2.2?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![passing](https://developer.mend.io/api/mc/badges/compatibility/maven/org.springframework.boot/3.1.3/3.2.2?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![confidence](https://developer.mend.io/api/mc/badges/confidence/maven/org.springframework.boot/3.1.3/3.2.2?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|

---

### Release Notes

<details>
<summary>reactor/reactor-core (io.projectreactor:reactor-test)</summary>

###
[`v3.6.2`](https://togithub.com/reactor/reactor-core/releases/tag/v3.6.2)

[Compare
Source](https://togithub.com/reactor/reactor-core/compare/v3.6.1...v3.6.2)

<!-- Release notes generated using configuration in .github/release.yml
at v3.6.2 -->

#### What's Changed

##### :warning: Update considerations and deprecations

- Restore where onLastOperatorHook is applied by
[@&#8203;chemicL](https://togithub.com/chemicL) in
[https://github.com/reactor/reactor-core/pull/3673](https://togithub.com/reactor/reactor-core/pull/3673)

##### :lady_beetle: Bug fixes

- ensure error is not propagated on cancellation and onNext race by
[@&#8203;OlegDokuka](https://togithub.com/OlegDokuka) in
[https://github.com/reactor/reactor-core/pull/3665](https://togithub.com/reactor/reactor-core/pull/3665)
- Fix pendingTask count not tracking task rejection by
[@&#8203;Nicolas125841](https://togithub.com/Nicolas125841) in
[https://github.com/reactor/reactor-core/pull/3660](https://togithub.com/reactor/reactor-core/pull/3660)

##### :book: Documentation, Tests and Build

- Fix sample code typos in Mono javadocs by
[@&#8203;valery1707](https://togithub.com/valery1707) in
[https://github.com/reactor/reactor-core/pull/3657](https://togithub.com/reactor/reactor-core/pull/3657)
- Remove unused com.gradle.enterprise plugin by
[@&#8203;chemicL](https://togithub.com/chemicL) in
[https://github.com/reactor/reactor-core/pull/3668](https://togithub.com/reactor/reactor-core/pull/3668)
- Fix flaky test for pending tasks count validation by
[@&#8203;chemicL](https://togithub.com/chemicL) in
[https://github.com/reactor/reactor-core/pull/3669](https://togithub.com/reactor/reactor-core/pull/3669)
- Fix flaky test for BoundedElasticThreadPerTaskScheduler by
[@&#8203;chemicL](https://togithub.com/chemicL) in
[https://github.com/reactor/reactor-core/pull/3679](https://togithub.com/reactor/reactor-core/pull/3679)
- Improve RaceTestUtils to yield when CPUs don't suffice by
[@&#8203;chemicL](https://togithub.com/chemicL) in
[https://github.com/reactor/reactor-core/pull/3678](https://togithub.com/reactor/reactor-core/pull/3678)
- Remove overridden methods from GenericBoundedElasticThreadPerTask… by
[@&#8203;chemicL](https://togithub.com/chemicL) in
[https://github.com/reactor/reactor-core/pull/3685](https://togithub.com/reactor/reactor-core/pull/3685)
- Exclude loom boundedElastic from restart validation by
[@&#8203;chemicL](https://togithub.com/chemicL) in
[https://github.com/reactor/reactor-core/pull/3686](https://togithub.com/reactor/reactor-core/pull/3686)

##### :up: Dependency Upgrades

- Bump byteBuddyVersion from 1.14.9 to 1.14.10 by
[@&#8203;dependabot](https://togithub.com/dependabot) in
[https://github.com/reactor/reactor-core/pull/3659](https://togithub.com/reactor/reactor-core/pull/3659)
- Bump org.junit:junit-bom from 5.10.0 to 5.10.1 by
[@&#8203;dependabot](https://togithub.com/dependabot) in
[https://github.com/reactor/reactor-core/pull/3680](https://togithub.com/reactor/reactor-core/pull/3680)
- Bump org.assertj:assertj-core from 3.24.2 to 3.25.1 by
[@&#8203;dependabot](https://togithub.com/dependabot) in
[https://github.com/reactor/reactor-core/pull/3681](https://togithub.com/reactor/reactor-core/pull/3681)
- Bump ch.qos.logback:logback-classic from 1.2.12 to 1.2.13 by
[@&#8203;dependabot](https://togithub.com/dependabot) in
[https://github.com/reactor/reactor-core/pull/3684](https://togithub.com/reactor/reactor-core/pull/3684)
- Bump byteBuddyVersion from 1.14.10 to 1.14.11 by
[@&#8203;dependabot](https://togithub.com/dependabot) in
[https://github.com/reactor/reactor-core/pull/3683](https://togithub.com/reactor/reactor-core/pull/3683)

#### New Contributors

- [@&#8203;Nicolas125841](https://togithub.com/Nicolas125841) made their
first contribution in
[https://github.com/reactor/reactor-core/pull/3660](https://togithub.com/reactor/reactor-core/pull/3660)
- [@&#8203;valery1707](https://togithub.com/valery1707) made their first
contribution in
[https://github.com/reactor/reactor-core/pull/3657](https://togithub.com/reactor/reactor-core/pull/3657)

**Full Changelog**:
https://github.com/reactor/reactor-core/compare/v3.6.1...v3.6.2

###
[`v3.6.1`](https://togithub.com/reactor/reactor-core/releases/tag/v3.6.1)

<!-- Release notes generated using configuration in .github/release.yml
at v3.6.1 -->

`Reactor Core` `3.6.1` is part of **`2023.0.1` Release Train**.

#### What's Changed

##### :lady_beetle: Bug fixes

- `SinkManyUnicast` discard support during subscription cancel by
[@&#8203;chemicL](https://togithub.com/chemicL) in
[#&#8203;3641](https://togithub.com/reactor/reactor-core/issues/3641),
[`1bee07c`](https://togithub.com/reactor/reactor-core/commit/1bee07c56b955e2102a884fb2d3b82f2deee64e1)
- Ensure scheduler is initialised by
[@&#8203;OlegDokuka](https://togithub.com/OlegDokuka) in
[`06bf103`](https://togithub.com/reactor/reactor-core/commit/06bf103de8db24d3e3f118f3cdfb257e8304b8a0)

##### :book: Documentation, Tests and Build

- `MemoryUtils.Tracked` used in tests releases collections by
[@&#8203;chemicL](https://togithub.com/chemicL) in
[#&#8203;3328](https://togithub.com/reactor/reactor-core/issues/3328)
- Final method declaration in final class by
[@&#8203;subbarao](https://togithub.com/subbarao) in
[#&#8203;3461](https://togithub.com/reactor/reactor-core/issues/3461)
- Update `reactiveProgramming.adoc` by
[@&#8203;Navaneethsen](https://togithub.com/Navaneethsen) in
[#&#8203;3592](https://togithub.com/reactor/reactor-core/issues/3592)
- Add `@Override` annotations in sample java code by
[@&#8203;ByoungJoonIm](https://togithub.com/ByoungJoonIm) in
[#&#8203;3605](https://togithub.com/reactor/reactor-core/issues/3605)
- Improve documentation for `VirtualThread`s `boundedElastic` behaviour
by [@&#8203;OlegDokuka](https://togithub.com/OlegDokuka) in
[#&#8203;3635](https://togithub.com/reactor/reactor-core/issues/3635)
- `StressSubscriber` `discardedValues` should not have downstream type
by [@&#8203;chemicL](https://togithub.com/chemicL) in
[#&#8203;3643](https://togithub.com/reactor/reactor-core/issues/3643)
- Add `Pull Request` template by
[@&#8203;chemicL](https://togithub.com/chemicL) in
[#&#8203;3650](https://togithub.com/reactor/reactor-core/issues/3650)

##### :up: Dependency Upgrades

- Bump `byteBuddyVersion` from `1.14.8` to `1.14.9` by
[@&#8203;dependabot](https://togithub.com/dependabot) in
[#&#8203;3619](https://togithub.com/reactor/reactor-core/issues/3619)
- Bump `Micrometer` libs versions by
[@&#8203;OlegDokuka](https://togithub.com/OlegDokuka) in
[#&#8203;3662](https://togithub.com/reactor/reactor-core/issues/3662)

#### New Contributors

- [@&#8203;Navaneethsen](https://togithub.com/Navaneethsen) made their
first contribution in
[#&#8203;3592](https://togithub.com/reactor/reactor-core/issues/3592)
- [@&#8203;ByoungJoonIm](https://togithub.com/ByoungJoonIm) made their
first contribution in
[#&#8203;3605](https://togithub.com/reactor/reactor-core/issues/3605)
- [@&#8203;subbarao](https://togithub.com/subbarao) made their first
contribution in
[#&#8203;3461](https://togithub.com/reactor/reactor-core/issues/3461)

**Full Changelog**:
https://github.com/reactor/reactor-core/compare/v3.6.0...v3.6.1

###
[`v3.6.0`](https://togithub.com/reactor/reactor-core/releases/tag/v3.6.0)

<!-- Release notes generated using configuration in .github/release.yml
at v3.6.0 -->

Reactor-Core 3.6.0 is part of 2023.0.0 Release Train.

This is the first GA release of 2023.0.0 🎉

This note focuses on 3.6.0 proper, curating changes from across all
milestones and also includes changes already released as part of 3.4.x
line up to 3.4.34 as well as 3.5.x line up to 3.5.12.

While there are plenty of improvements and bug fixes, it's worth to
highlight the bigger themes first:

- The `Schedulers.boundedElastic()` may return a specific implementation
tailored for [Project Loom](https://openjdk.org/projects/loom/) and
running on virtual threads if application runs in Java 21+ runtime and
have set the `reactor.schedulers.defaultBoundedElasticOnVirtualThreads`
system property to `true`. Please consult the
[javadocs](https://projectreactor.io/docs/core/snapshot/api/reactor/core/scheduler/Schedulers.html#boundedElastic--)
and [the reference
documentation](https://projectreactor.io/docs/core/snapshot/reference/#schedulers)
for more information.
- Support for [Multi-Release Jar](https://openjdk.org/jeps/238). Since
this release project has java version specific sources that are enabled
if runs in specific Java runtime. This allows to avoid unnecessary
reflection checks as well as embrace some new neat java features without
changing the baseline for the whole code base.
- Hardening of the context-propagation. This release introduces better
support for external `Publisher`s detection with their corresponding
decoration if detected. This enables more stable context-propagation
when it comes to external libraries integration.

See dedicated pre-release
[blogpost](https://spring.io/blog/2023/10/31/what-new-is-coming-in-reactor-core-3-6-0#virtual-threads-support)
for more information.

#### What's Changed

##### :warning: Update considerations and deprecations

- ensures `addCap` always returns value with flag by
[@&#8203;OlegDokuka](https://togithub.com/OlegDokuka) in
[https://github.com/reactor/reactor-core/pull/3610](https://togithub.com/reactor/reactor-core/pull/3610)
- makes `throwable` assignment happens-before `done` assignment in
`onError` for FluxPublish by
[@&#8203;OlegDokuka](https://togithub.com/OlegDokuka) in
[https://github.com/reactor/reactor-core/pull/3638](https://togithub.com/reactor/reactor-core/pull/3638)

##### :sparkles: New features and improvements

- Hardening automatic context propagation by
[@&#8203;chemicL](https://togithub.com/chemicL) in
[https://github.com/reactor/reactor-core/pull/3549](https://togithub.com/reactor/reactor-core/pull/3549)
- InternalOperator automatic context propagation by
[@&#8203;chemicL](https://togithub.com/chemicL) in
[https://github.com/reactor/reactor-core/pull/3625](https://togithub.com/reactor/reactor-core/pull/3625)
- adds support for gradle 8.1.1 by
[@&#8203;OlegDokuka](https://togithub.com/OlegDokuka) in
[https://github.com/reactor/reactor-core/pull/3521](https://togithub.com/reactor/reactor-core/pull/3521)
- adds support for multi-release-jar | rework `Traces` by
[@&#8203;OlegDokuka](https://togithub.com/OlegDokuka) in
[https://github.com/reactor/reactor-core/pull/3523](https://togithub.com/reactor/reactor-core/pull/3523)
- introduces automatic loom support by
[@&#8203;OlegDokuka](https://togithub.com/OlegDokuka) in
[https://github.com/reactor/reactor-core/pull/3524](https://togithub.com/reactor/reactor-core/pull/3524)
- provides minimal troubleshooting for mrj by
[@&#8203;OlegDokuka](https://togithub.com/OlegDokuka) in
[https://github.com/reactor/reactor-core/pull/3532](https://togithub.com/reactor/reactor-core/pull/3532)
- fix
[#&#8203;3539](https://togithub.com/reactor/reactor-core/issues/3539)
takeUntil Predicate test before emit by
[@&#8203;AramMessdaghi9001](https://togithub.com/AramMessdaghi9001) in
[https://github.com/reactor/reactor-core/pull/3544](https://togithub.com/reactor/reactor-core/pull/3544)
- Reworks FluxPublish internals to relay on predictable state machine by
[@&#8203;OlegDokuka](https://togithub.com/OlegDokuka) in
[https://github.com/reactor/reactor-core/pull/3538](https://togithub.com/reactor/reactor-core/pull/3538)
- dedicated loom oriented boundeElasticScheduler implementation by
[@&#8203;OlegDokuka](https://togithub.com/OlegDokuka) in
[https://github.com/reactor/reactor-core/pull/3566](https://togithub.com/reactor/reactor-core/pull/3566)
- Handling 1.0.0 of context-propagation by
[@&#8203;chemicL](https://togithub.com/chemicL) in
[https://github.com/reactor/reactor-core/pull/3609](https://togithub.com/reactor/reactor-core/pull/3609)
- provides extra check for contextualName presence by
[@&#8203;OlegDokuka](https://togithub.com/OlegDokuka) in
[https://github.com/reactor/reactor-core/pull/3611](https://togithub.com/reactor/reactor-core/pull/3611)
- JCStress: Await Scheduler dispose and increase timeouts by
[@&#8203;chemicL](https://togithub.com/chemicL) in
[https://github.com/reactor/reactor-core/pull/3630](https://togithub.com/reactor/reactor-core/pull/3630)

##### :lady_beetle: Bug fixes

- fixes `MonoDelayElement` to properly handle race between delay `run`
and `onNext` signal by
[@&#8203;OlegDokuka](https://togithub.com/OlegDokuka) in
[https://github.com/reactor/reactor-core/pull/3546](https://togithub.com/reactor/reactor-core/pull/3546)
- ensures `GroupedFlux` delivers subscription for the second subscriber
by [@&#8203;OlegDokuka](https://togithub.com/OlegDokuka) in
[https://github.com/reactor/reactor-core/pull/3555](https://togithub.com/reactor/reactor-core/pull/3555)
- ensures late `onRequest` consumer observes demand by
[@&#8203;OlegDokuka](https://togithub.com/OlegDokuka) in
[https://github.com/reactor/reactor-core/pull/3557](https://togithub.com/reactor/reactor-core/pull/3557)
- ensures that proper index is used during onNext check by
[@&#8203;OlegDokuka](https://togithub.com/OlegDokuka) in
[https://github.com/reactor/reactor-core/pull/3614](https://togithub.com/reactor/reactor-core/pull/3614)
- ensures SchedulerTask uses isShutdown instead of isDisposed by
[@&#8203;OlegDokuka](https://togithub.com/OlegDokuka) in
[https://github.com/reactor/reactor-core/pull/3623](https://togithub.com/reactor/reactor-core/pull/3623)

##### :book: Documentation, Tests and Build

- Fix return type for Mono.tap in javadoc by
[@&#8203;ajax-surovskyi-y](https://togithub.com/ajax-surovskyi-y) in
[https://github.com/reactor/reactor-core/pull/3564](https://togithub.com/reactor/reactor-core/pull/3564)
- fixes CI.yml by [@&#8203;OlegDokuka](https://togithub.com/OlegDokuka)
in
[https://github.com/reactor/reactor-core/pull/3575](https://togithub.com/reactor/reactor-core/pull/3575)
- adds CI nightly builds by
[@&#8203;OlegDokuka](https://togithub.com/OlegDokuka) in
[https://github.com/reactor/reactor-core/pull/3581](https://togithub.com/reactor/reactor-core/pull/3581)
- disables temporarily java 21 tests by
[@&#8203;OlegDokuka](https://togithub.com/OlegDokuka) in
[https://github.com/reactor/reactor-core/pull/3590](https://togithub.com/reactor/reactor-core/pull/3590)
- Bump actions/setup-java from 3.12.0 to 3.13.0 in /.github/workflows by
[@&#8203;dependabot](https://togithub.com/dependabot) in
[https://github.com/reactor/reactor-core/pull/3585](https://togithub.com/reactor/reactor-core/pull/3585)
- Bump actions/checkout from 3.1.0 to 4.1.0 in /.github/workflows by
[@&#8203;dependabot](https://togithub.com/dependabot) in
[https://github.com/reactor/reactor-core/pull/3586](https://togithub.com/reactor/reactor-core/pull/3586)
- Bump gradle/gradle-build-action from 2.7.0 to 2.9.0 in
/.github/workflows by
[@&#8203;dependabot](https://togithub.com/dependabot) in
[https://github.com/reactor/reactor-core/pull/3594](https://togithub.com/reactor/reactor-core/pull/3594)
- improves build speed by
[@&#8203;OlegDokuka](https://togithub.com/OlegDokuka) in
[https://github.com/reactor/reactor-core/pull/3597](https://togithub.com/reactor/reactor-core/pull/3597)
- Revised documentation about context propagation by
[@&#8203;chemicL](https://togithub.com/chemicL) in
[https://github.com/reactor/reactor-core/pull/3617](https://togithub.com/reactor/reactor-core/pull/3617)
- updates to java 21 GA temurin by
[@&#8203;OlegDokuka](https://togithub.com/OlegDokuka) in
[https://github.com/reactor/reactor-core/pull/3631](https://togithub.com/reactor/reactor-core/pull/3631)
- Gradle 8.4 upgrade by [@&#8203;chemicL](https://togithub.com/chemicL)
in
[https://github.com/reactor/reactor-core/pull/3632](https://togithub.com/reactor/reactor-core/pull/3632)

##### :up: Dependency Upgrades

- Bump gradle/wrapper-validation-action from 1.0.5 to 1.1.0 in
/.github/workflows by
[@&#8203;dependabot](https://togithub.com/dependabot) in
[https://github.com/reactor/reactor-core/pull/3542](https://togithub.com/reactor/reactor-core/pull/3542)
- Bump com.gradle.enterprise from 3.12.4 to 3.14.1 by
[@&#8203;dependabot](https://togithub.com/dependabot) in
[https://github.com/reactor/reactor-core/pull/3548](https://togithub.com/reactor/reactor-core/pull/3548)
- Bump actions/setup-java from 3.6.0 to 3.12.0 in /.github/workflows by
[@&#8203;dependabot](https://togithub.com/dependabot) in
[https://github.com/reactor/reactor-core/pull/3550](https://togithub.com/reactor/reactor-core/pull/3550)
- Bump gradle/gradle-build-action from 2.3.3 to 2.7.0 in
/.github/workflows by
[@&#8203;dependabot](https://togithub.com/dependabot) in
[https://github.com/reactor/reactor-core/pull/3551](https://togithub.com/reactor/reactor-core/pull/3551)
- Update `Micrometer` version to `1.10.10` by
[@&#8203;violetagg](https://togithub.com/violetagg) in
[https://github.com/reactor/reactor-core/pull/3560](https://togithub.com/reactor/reactor-core/pull/3560)
- upgrades to latest micrometer versions by
[@&#8203;OlegDokuka](https://togithub.com/OlegDokuka) in
[https://github.com/reactor/reactor-core/pull/3561](https://togithub.com/reactor/reactor-core/pull/3561)
- Bump io.spring.nohttp from 0.0.10 to 0.0.11 by
[@&#8203;dependabot](https://togithub.com/dependabot) in
[https://github.com/reactor/reactor-core/pull/3497](https://togithub.com/reactor/reactor-core/pull/3497)
- Bump org.junit:junit-bom from 5.9.2 to 5.10.0 by
[@&#8203;dependabot](https://togithub.com/dependabot) in
[https://github.com/reactor/reactor-core/pull/3556](https://togithub.com/reactor/reactor-core/pull/3556)
- Bump me.champeau.gradle.japicmp from 0.4.1 to 0.4.2 by
[@&#8203;dependabot](https://togithub.com/dependabot) in
[https://github.com/reactor/reactor-core/pull/3595](https://togithub.com/reactor/reactor-core/pull/3595)
- Bump jmhVersion from 1.36 to 1.37 by
[@&#8203;dependabot](https://togithub.com/dependabot) in
[https://github.com/reactor/reactor-core/pull/3596](https://togithub.com/reactor/reactor-core/pull/3596)
- Bump byteBuddyVersion from 1.14.5 to 1.14.8 by
[@&#8203;dependabot](https://togithub.com/dependabot) in
[https://github.com/reactor/reactor-core/pull/3601](https://togithub.com/reactor/reactor-core/pull/3601)
- Bump com.gradle.enterprise from 3.14.1 to 3.15 by
[@&#8203;dependabot](https://togithub.com/dependabot) in
[https://github.com/reactor/reactor-core/pull/3602](https://togithub.com/reactor/reactor-core/pull/3602)
- Bump ch.qos.logback:logback-classic from 1.2.11 to 1.2.12 by
[@&#8203;dependabot](https://togithub.com/dependabot) in
[https://github.com/reactor/reactor-core/pull/3476](https://togithub.com/reactor/reactor-core/pull/3476)
- Bump de.undercouch.download from 5.4.0 to 5.5.0 by
[@&#8203;dependabot](https://togithub.com/dependabot) in
[https://github.com/reactor/reactor-core/pull/3608](https://togithub.com/reactor/reactor-core/pull/3608)
- Bump com.gradle.enterprise from 3.15 to 3.15.1 by
[@&#8203;dependabot](https://togithub.com/dependabot) in
[https://github.com/reactor/reactor-core/pull/3613](https://togithub.com/reactor/reactor-core/pull/3613)
- Update micrometer and micrometerTracing by
[@&#8203;pderop](https://togithub.com/pderop) in
[https://github.com/reactor/reactor-core/pull/3636](https://togithub.com/reactor/reactor-core/pull/3636)
- Update micrometer, micrometerTracing, contextPropagation by
[@&#8203;pderop](https://togithub.com/pderop) in
[https://github.com/reactor/reactor-core/pull/3637](https://togithub.com/reactor/reactor-core/pull/3637)

#### New Contributors

- [@&#8203;AramMessdaghi9001](https://togithub.com/AramMessdaghi9001)
made their first contribution in
[https://github.com/reactor/reactor-core/pull/3544](https://togithub.com/reactor/reactor-core/pull/3544)
- [@&#8203;ajax-surovskyi-y](https://togithub.com/ajax-surovskyi-y) made
their first contribution in
[https://github.com/reactor/reactor-core/pull/3564](https://togithub.com/reactor/reactor-core/pull/3564)

**Full Changelog**:
https://github.com/reactor/reactor-core/compare/v3.5.8...v3.6.0

###
[`v3.5.14`](https://togithub.com/reactor/reactor-core/compare/v3.5.13...v3.5.14)

###
[`v3.5.13`](https://togithub.com/reactor/reactor-core/releases/tag/v3.5.13)

<!-- Release notes generated using configuration in .github/release.yml
at v3.5.13 -->

`Reactor Core` `3.5.13` is part of **`2022.0.14` Release Train**.

#### What's Changed

##### :lady_beetle: Bug fixes

- `SinkManyUnicast` discard support during subscription cancel by
[@&#8203;chemicL](https://togithub.com/chemicL) in
[#&#8203;3641](https://togithub.com/reactor/reactor-core/issues/3641)

##### :book: Documentation, Tests and Build

- `MemoryUtils.Tracked` used in tests releases collections by
[@&#8203;chemicL](https://togithub.com/chemicL) in
[#&#8203;3328](https://togithub.com/reactor/reactor-core/issues/3328)
- `StressSubscriber` `discardedValues` should not have downstream type
by [@&#8203;chemicL](https://togithub.com/chemicL) in
[#&#8203;3643](https://togithub.com/reactor/reactor-core/issues/3643)

##### :up: Dependency Upgrades

- Bump `byteBuddyVersion` from `1.14.8` to `1.14.9` by
[@&#8203;dependabot](https://togithub.com/dependabot) in
[#&#8203;3619](https://togithub.com/reactor/reactor-core/issues/3619)

**Full Changelog**:
https://github.com/reactor/reactor-core/compare/v3.5.12...v3.5.13

###
[`v3.5.12`](https://togithub.com/reactor/reactor-core/releases/tag/v3.5.12)

<!-- Release notes generated using configuration in .github/release.yml
at v3.5.12 -->

`Reactor Core` `3.5.12` is part of **`2022.0.13` Release Train**.

#### What's Changed

##### :warning: Update considerations and deprecations

- Make `throwable` assignment happens-before `done` assignment in
`onError` for `FluxPublish` by
[@&#8203;OlegDokuka](https://togithub.com/OlegDokuka) in
[#&#8203;3638](https://togithub.com/reactor/reactor-core/issues/3638)

##### :sparkles: New features and improvements

- `JCStress`: Await `Scheduler` dispose and increase timeouts by
[@&#8203;chemicL](https://togithub.com/chemicL) in
[#&#8203;3630](https://togithub.com/reactor/reactor-core/issues/3630)

##### :up: Dependency Upgrades

- Update `Micrometer` and `Micrometer Tracing` by
[@&#8203;pderop](https://togithub.com/pderop) in
[#&#8203;3636](https://togithub.com/reactor/reactor-core/issues/3636)

**Full Changelog**:
https://github.com/reactor/reactor-core/compare/v3.5.11...v3.5.12

###
[`v3.5.11`](https://togithub.com/reactor/reactor-core/releases/tag/v3.5.11)

[Compare
Source](https://togithub.com/reactor/reactor-core/compare/v3.5.10...v3.5.11)

<!-- Release notes generated using configuration in .github/release.yml
at v3.5.11 -->

#### What's Changed

##### :warning: Update considerations and deprecations

- ensures `addCap` always returns value with flag by
[@&#8203;OlegDokuka](https://togithub.com/OlegDokuka) in
[https://github.com/reactor/reactor-core/pull/3610](https://togithub.com/reactor/reactor-core/pull/3610)

##### :sparkles: New features and improvements

- provides extra check for `contextualName` presence by
[@&#8203;OlegDokuka](https://togithub.com/OlegDokuka) in
[https://github.com/reactor/reactor-core/pull/3611](https://togithub.com/reactor/reactor-core/pull/3611)
- Handling 1.0.0 of context-propagation by
[@&#8203;chemicL](https://togithub.com/chemicL) in
[https://github.com/reactor/reactor-core/pull/3609](https://togithub.com/reactor/reactor-core/pull/3609)

##### :lady_beetle: Bug fixes

- ensures that `FluxBufferTime` uses proper `index` value during
`onNext` check by [@&#8203;OlegDokuka](https://togithub.com/OlegDokuka)
in
[https://github.com/reactor/reactor-core/pull/3614](https://togithub.com/reactor/reactor-core/pull/3614)

##### :book: Documentation, Tests and Build

- adds CI nightly builds by
[@&#8203;OlegDokuka](https://togithub.com/OlegDokuka) in
[https://github.com/reactor/reactor-core/pull/3581](https://togithub.com/reactor/reactor-core/pull/3581)
- Bump actions/setup-java from 3.12.0 to 3.13.0 in /.github/workflows by
[@&#8203;dependabot](https://togithub.com/dependabot) in
[https://github.com/reactor/reactor-core/pull/3585](https://togithub.com/reactor/reactor-core/pull/3585)
- Bump actions/checkout from 3.1.0 to 4.1.0 in /.github/workflows by
[@&#8203;dependabot](https://togithub.com/dependabot) in
[https://github.com/reactor/reactor-core/pull/3586](https://togithub.com/reactor/reactor-core/pull/3586)
- Bump gradle/gradle-build-action from 2.7.0 to 2.9.0 in
/.github/workflows by
[@&#8203;dependabot](https://togithub.com/dependabot) in
[https://github.com/reactor/reactor-core/pull/3594](https://togithub.com/reactor/reactor-core/pull/3594)

##### :up: Dependency Upgrades

- Bump io.spring.nohttp from 0.0.10 to 0.0.11 by
[@&#8203;dependabot](https://togithub.com/dependabot) in
[https://github.com/reactor/reactor-core/pull/3497](https://togithub.com/reactor/reactor-core/pull/3497)
- Bump org.junit:junit-bom from 5.9.2 to 5.10.0 by
[@&#8203;dependabot](https://togithub.com/dependabot) in
[https://github.com/reactor/reactor-core/pull/3556](https://togithub.com/reactor/reactor-core/pull/3556)
- Bump me.champeau.gradle.japicmp from 0.4.1 to 0.4.2 by
[@&#8203;dependabot](https://togithub.com/dependabot) in
[https://github.com/reactor/reactor-core/pull/3595](https://togithub.com/reactor/reactor-core/pull/3595)
- Bump jmhVersion from 1.36 to 1.37 by
[@&#8203;dependabot](https://togithub.com/dependabot) in
[https://github.com/reactor/reactor-core/pull/3596](https://togithub.com/reactor/reactor-core/pull/3596)
- Bump byteBuddyVersion from 1.14.5 to 1.14.8 by
[@&#8203;dependabot](https://togithub.com/dependabot) in
[https://github.com/reactor/reactor-core/pull/3601](https://togithub.com/reactor/reactor-core/pull/3601)
- Bump com.gradle.enterprise from 3.14.1 to 3.15 by
[@&#8203;dependabot](https://togithub.com/dependabot) in
[https://github.com/reactor/reactor-core/pull/3602](https://togithub.com/reactor/reactor-core/pull/3602)
- Bump ch.qos.logback:logback-classic from 1.2.11 to 1.2.12 by
[@&#8203;dependabot](https://togithub.com/dependabot) in
[https://github.com/reactor/reactor-core/pull/3476](https://togithub.com/reactor/reactor-core/pull/3476)
- Bump de.undercouch.download from 5.4.0 to 5.5.0 by
[@&#8203;dependabot](https://togithub.com/dependabot) in
[https://github.com/reactor/reactor-core/pull/3608](https://togithub.com/reactor/reactor-core/pull/3608)
- Bump com.gradle.enterprise from 3.15 to 3.15.1 by
[@&#8203;dependabot](https://togithub.com/dependabot) in
[https://github.com/reactor/reactor-core/pull/3613](https://togithub.com/reactor/reactor-core/pull/3613)

**Full Changelog**:
https://github.com/reactor/reactor-core/compare/v3.5.10...v3.5.11

###
[`v3.5.10`](https://togithub.com/reactor/reactor-core/releases/tag/v3.5.10)

[Compare
Source](https://togithub.com/reactor/reactor-core/compare/v3.5.9...v3.5.10)

<!-- Release notes generated using configuration in .github/release.yml
at v3.5.10 -->

`Reactor Core` `3.5.10` is part of **`2022.0.11` Release Train**.

#### What's Changed

##### :book: Documentation, Tests and Build

- Fix return type for `Mono.tap` in javadoc by
[@&#8203;ajax-surovskyi-y](https://togithub.com/ajax-surovskyi-y) in
[#&#8203;3564](https://togithub.com/reactor/reactor-core/issues/3564)

##### :up: Dependency Upgrades

- Update `Micrometer` version to `1.10.11` by
[@&#8203;chemicL](https://togithub.com/chemicL) in
[`7f9c77e`](https://togithub.com/reactor/reactor-core/commit/7f9c77ec28dc0bdfc1eafe04062cb1195fd9b552)

#### New Contributors

- [@&#8203;ajax-surovskyi-y](https://togithub.com/ajax-surovskyi-y) made
their first contribution in
[#&#8203;3564](https://togithub.com/reactor/reactor-core/issues/3564)

**Full Changelog**:
https://github.com/reactor/reactor-core/compare/v3.5.9...v3.5.10

</details>

<details>
<summary>spring-projects/spring-graphql
(org.springframework.graphql:spring-graphql-test)</summary>

###
[`v1.2.4`](https://togithub.com/spring-projects/spring-graphql/releases/tag/v1.2.4)

#### :star: New Features

- Lenient parsing of SourceLocation's line and column in
ResponseMapGraphQlResponse
[#&#8203;849](https://togithub.com/spring-projects/spring-graphql/pull/849)
- Use isOmitted rather than isPresent in ValueExtractor to allow
validation of null arguments
[#&#8203;842](https://togithub.com/spring-projects/spring-graphql/pull/842)
- Allow use of custom DataLoaderRegistry instance
[#&#8203;836](https://togithub.com/spring-projects/spring-graphql/issues/836)
- ConnectionDataFetcher should handle data wrapped with
DataFetcherResult
[#&#8203;835](https://togithub.com/spring-projects/spring-graphql/issues/835)

#### :beetle: Bug Fixes

- Fix logic for hasPrevious/hasNext with keyset scrolling
[#&#8203;843](https://togithub.com/spring-projects/spring-graphql/issues/843)
- Offset pagination with "last N before X" should not include the item
at offset X
[#&#8203;840](https://togithub.com/spring-projects/spring-graphql/issues/840)
- ControllerAdvice order is not preserved in
AnnotatedControllerExceptionResolver
[#&#8203;830](https://togithub.com/spring-projects/spring-graphql/issues/830)
- WebSocketGraphQlClient unable to reconnect after the first reconnect
failure
[#&#8203;826](https://togithub.com/spring-projects/spring-graphql/issues/826)
- AOT: No JSON Encoder error using GraphlQL client
[#&#8203;825](https://togithub.com/spring-projects/spring-graphql/issues/825)

#### :notebook_with_decorative_cover: Documentation

- Add section on code generation to the documentation
[#&#8203;847](https://togithub.com/spring-projects/spring-graphql/issues/847)
- Use ScrollPosition.offset() to get initial scroll position
[#&#8203;839](https://togithub.com/spring-projects/spring-graphql/pull/839)
- Add Search in All Spring Docs
[#&#8203;824](https://togithub.com/spring-projects/spring-graphql/pull/824)

#### :hammer: Dependency Upgrades

- Upgrade to Context Propagation 1.0.6
[#&#8203;857](https://togithub.com/spring-projects/spring-graphql/issues/857)
- Upgrade to GraphQL Java 20.7
[#&#8203;852](https://togithub.com/spring-projects/spring-graphql/issues/852)
- Upgrade to Micrometer 1.11.6
[#&#8203;853](https://togithub.com/spring-projects/spring-graphql/issues/853)
- Upgrade to Micrometer Tracing 1.1.7
[#&#8203;854](https://togithub.com/spring-projects/spring-graphql/issues/854)
- Upgrade to Reactor 2022.0.13
[#&#8203;858](https://togithub.com/spring-projects/spring-graphql/issues/858)
- Upgrade to Spring Data 2023.0.6
[#&#8203;855](https://togithub.com/spring-projects/spring-graphql/issues/855)
- Upgrade to Spring Framework 6.0.14
[#&#8203;851](https://togithub.com/spring-projects/spring-graphql/issues/851)
- Upgrade to Spring Security 6.1.5
[#&#8203;856](https://togithub.com/spring-projects/spring-graphql/issues/856)

#### :heart: Contributors

Thank you to all the contributors who worked on this release:

[@&#8203;Stmated](https://togithub.com/Stmated),
[@&#8203;koenpunt](https://togithub.com/koenpunt),
[@&#8203;nilshartmann](https://togithub.com/nilshartmann), and
[@&#8203;rwinch](https://togithub.com/rwinch)

</details>

<details>
<summary>spring-projects/spring-boot
(org.springframework.boot:spring-boot-starter-websocket)</summary>

###
[`v3.2.2`](https://togithub.com/spring-projects/spring-boot/releases/tag/v3.2.2)

#### :lady_beetle: Bug Fixes

- SslBundle implementations do not provide useful toString() results
[#&#8203;39167](https://togithub.com/spring-projects/spring-boot/issues/39167)
- JarEntry.getComment() returns incorrect result from NestedJarFile
instances
[#&#8203;39166](https://togithub.com/spring-projects/spring-boot/issues/39166)
- Mixing PEM and JKS certificate material in server.ssl properties does
not work
[#&#8203;39158](https://togithub.com/spring-projects/spring-boot/issues/39158)
- Having AspectJ and Micrometer on the classpath is not a strong enough
signal to enable support for Micrometer observation annotations
[#&#8203;39128](https://togithub.com/spring-projects/spring-boot/issues/39128)
- Actuator endpoints with no operations that use selectors are not
accessible when mapped to /
[#&#8203;39122](https://togithub.com/spring-projects/spring-boot/issues/39122)
- Spring Boot 3.2 app that uses WebFlux, Security, and Actuator may fail
to start due to a missing authentication manager
[#&#8203;39096](https://togithub.com/spring-projects/spring-boot/issues/39096)
- management.observations.http.server.requests.name no longer has any
effect
[#&#8203;39083](https://togithub.com/spring-projects/spring-boot/issues/39083)
- spring.rabbitmq.listener.stream.auto-startup property has no effect
[#&#8203;39078](https://togithub.com/spring-projects/spring-boot/issues/39078)
- Error mark in the log message for PatternParseException is in the
wrong place
[#&#8203;39075](https://togithub.com/spring-projects/spring-boot/issues/39075)
- Configuring server.jetty.max-connections has no effect
[#&#8203;39052](https://togithub.com/spring-projects/spring-boot/pull/39052)
- `@ConfigurationPropertiesBinding` converters that rely on initial
CharSequence to String conversion no longer work
[#&#8203;39051](https://togithub.com/spring-projects/spring-boot/issues/39051)
- Manifest attributes cannot be resolved with the new loader
implementation
[#&#8203;38996](https://togithub.com/spring-projects/spring-boot/issues/38996)
- Throwable from logging system initialization may result in the
application silently failing to start
[#&#8203;38963](https://togithub.com/spring-projects/spring-boot/issues/38963)
- When using Jetty, idle timeout for IO operations and delayed dispatch
cannot be set to less than 30000ms
[#&#8203;38960](https://togithub.com/spring-projects/spring-boot/issues/38960)
- spring-boot-maven-plugin repackage uber jar execution fails when jar
is put on WSL network drive
[#&#8203;38956](https://togithub.com/spring-projects/spring-boot/issues/38956)
- Oracle OJDBC BOM version is flagged not for production use
[#&#8203;38943](https://togithub.com/spring-projects/spring-boot/issues/38943)
- Connection leak when using jOOQ and spring.jooq.sql-dialect has not
been set
[#&#8203;38924](https://togithub.com/spring-projects/spring-boot/pull/38924)
- AutoConfigurationSorter does not always respect
`@AutoConfigureOrder`(Ordered.LOWEST_PRECEDENCE)
[#&#8203;38916](https://togithub.com/spring-projects/spring-boot/issues/38916)
- Containers are not started when using `@ImportTestcontainers`
[#&#8203;38913](https://togithub.com/spring-projects/spring-boot/issues/38913)
- Even when spring.security.user.name or spring.security.user.password
has been configured, user details auto-configuration still backs off
when resource server is on the classpath
[#&#8203;38864](https://togithub.com/spring-projects/spring-boot/issues/38864)
- MockRestServiceServerAutoConfiguration with RestTemplate and
RestClient together throws incorrect exception
[#&#8203;38820](https://togithub.com/spring-projects/spring-boot/issues/38820)

#### :notebook_with_decorative_cover: Documentation

- Improve "Sanitize Sensitive Values" section in reference documentation
[#&#8203;39199](https://togithub.com/spring-projects/spring-boot/issues/39199)
- Fix link to Log4j2's JDK logging adapter documentation
[#&#8203;39171](https://togithub.com/spring-projects/spring-boot/issues/39171)
- Update CRaC support status link
[#&#8203;39170](https://togithub.com/spring-projects/spring-boot/pull/39170)
- Remove entry for OCI starter as it is no longer maintained
[#&#8203;39165](https://togithub.com/spring-projects/spring-boot/issues/39165)
- Update links to Micrometer docs in metrics section of reference docs
[#&#8203;39149](https://togithub.com/spring-projects/spring-boot/issues/39149)
- Use the term "tags" in documentation consistently
[#&#8203;39125](https://togithub.com/spring-projects/spring-boot/pull/39125)
- Correct the documentation on injecting dependencies into
FailureAnalyzer implementations
[#&#8203;39100](https://togithub.com/spring-projects/spring-boot/issues/39100)
- Polish reference documentation
[#&#8203;38942](https://togithub.com/spring-projects/spring-boot/pull/38942)
- Document virtual threads limitations
[#&#8203;38883](https://togithub.com/spring-projects/spring-boot/issues/38883)

#### :hammer: Dependency Upgrades

- Upgrade to MySQL 8.3.0
[#&#8203;39081](https://togithub.com/spring-projects/spring-boot/issues/39081)
- Upgrade to Byte Buddy 1.14.11
[#&#8203;39184](https://togithub.com/spring-projects/spring-boot/issues/39184)
- Upgrade to Groovy 4.0.17
[#&#8203;39185](https://togithub.com/spring-projects/spring-boot/issues/39185)
- Upgrade to jOOQ 3.18.9
[#&#8203;39186](https://togithub.com/spring-projects/spring-boot/issues/39186)
- Upgrade to Kotlin 1.9.22
[#&#8203;39187](https://togithub.com/spring-projects/spring-boot/issues/39187)
- Upgrade to Lettuce 6.3.1.RELEASE
[#&#8203;39188](https://togithub.com/spring-projects/spring-boot/issues/39188)
- Upgrade to MariaDB 3.3.2
[#&#8203;38901](https://togithub.com/spring-projects/spring-boot/issues/38901)
- Upgrade to Micrometer 1.12.2
[#&#8203;38978](https://togithub.com/spring-projects/spring-boot/issues/38978)
- Upgrade to Micrometer Tracing 1.2.2
[#&#8203;38979](https://togithub.com/spring-projects/spring-boot/issues/38979)
- Upgrade to Neo4j Java Driver 5.15.0
[#&#8203;39136](https://togithub.com/spring-projects/spring-boot/issues/39136)
- Upgrade to Netty 4.1.105.Final
[#&#8203;39189](https://togithub.com/spring-projects/spring-boot/issues/39189)
- Upgrade to Pulsar 3.1.2
[#&#8203;39190](https://togithub.com/spring-projects/spring-boot/issues/39190)
- Upgrade to Pulsar Reactive 0.5.2
[#&#8203;39191](https://togithub.com/spring-projects/spring-boot/issues/39191)
- Upgrade to R2DBC MySQL 1.0.6
[#&#8203;39192](https://togithub.com/spring-projects/spring-boot/issues/39192)
- Upgrade to R2DBC Postgresql 1.0.4.RELEASE
[#&#8203;39193](https://togithub.com/spring-projects/spring-boot/issues/39193)
- Upgrade to R2DBC Proxy 1.1.4.RELEASE
[#&#8203;39194](https://togithub.com/spring-projects/spring-boot/issues/39194)
- Upgrade to Reactor Bom 2023.0.2
[#&#8203;38980](https://togithub.com/spring-projects/spring-boot/issues/38980)
- Upgrade to SLF4J 2.0.11
[#&#8203;39195](https://togithub.com/spring-projects/spring-boot/issues/39195)
- Upgrade to Spring Data Bom 2023.1.2
[#&#8203;38981](https://togithub.com/spring-projects/spring-boot/issues/38981)
- Upgrade to Spring Framework 6.1.3
[#&#8203;38982](https://togithub.com/spring-projects/spring-boot/issues/38982)
- Upgrade to Spring Pulsar 1.0.2
[#&#8203;38994](https://togithub.com/spring-projects/spring-boot/issues/38994)
- Upgrade to Spring WS 4.0.10
[#&#8203;39130](https://togithub.com/spring-projects/spring-boot/issues/39130)
- Upgrade to Tomcat 10.1.18
[#&#8203;39196](https://togithub.com/spring-projects/spring-boot/issues/39196)

#### :heart: Contributors

Thank you to all the contributors who worked on this release:

[@&#8203;724thomas](https://togithub.com/724thomas),
[@&#8203;BenchmarkingBuffalo](https://togithub.com/BenchmarkingBuffalo),
[@&#8203;FBibonne](https://togithub.com/FBibonne),
[@&#8203;Wzy19930507](https://togithub.com/Wzy19930507),
[@&#8203;amparab](https://togithub.com/amparab),
[@&#8203;dependabot](https://togithub.com/dependabot)\[bot],
[@&#8203;dreis2211](https://togithub.com/dreis2211),
[@&#8203;okohub](https://togithub.com/okohub),
[@&#8203;onobc](https://togithub.com/onobc),
[@&#8203;sdeleuze](https://togithub.com/sdeleuze),
[@&#8203;skcskitano](https://togithub.com/skcskitano), and
[@&#8203;tobias-lippert](https://togithub.com/tobias-lippert)

###
[`v3.2.1`](https://togithub.com/spring-projects/spring-boot/releases/tag/v3.2.1)

#### :star: New Features

- Cleanup java sources
[#&#8203;38877](https://togithub.com/spring-projects/spring-boot/issues/38877)

#### :lady_beetle: Bug Fixes

- HibernateJpaAutoConfiguration should be applied before
DataSourceTransactionManagerAutoConfiguration
[#&#8203;38880](https://togithub.com/spring-projects/spring-boot/issues/38880)
- META-INF entries are duplicated under BOOT-INF/classes causing
"Conflicting persistence unit definitions" error
[#&#8203;38862](https://togithub.com/spring-projects/spring-boot/issues/38862)
- logging.include-application-name has no effect when using log4j2
[#&#8203;38847](https://togithub.com/spring-projects/spring-boot/pull/38847)
- Pulsar authentication param properties cause IllegalStateException
with Pulsar Client 3.1.0
[#&#8203;38839](https://togithub.com/spring-projects/spring-boot/pull/38839)
- Child context created with SpringApplicationBuilder runs parents
runners
[#&#8203;38837](https://togithub.com/spring-projects/spring-boot/issues/38837)
- getSigners() info is lost for signed jars when using the new loader
implementation with requiresUnpack
[#&#8203;38833](https://togithub.com/spring-projects/spring-boot/issues/38833)
- TestContainers parallel initialization doesn't work properly
[#&#8203;38831](https://togithub.com/spring-projects/spring-boot/issues/38831)
- Zip file closed exceptions can be thrown due to StaticResourceJars
closing jars from cached connections
[#&#8203;38770](https://togithub.com/spring-projects/spring-boot/issues/38770)
- Multi-byte filenames in zip files can cause an endless loop in
ZipString.hash
[#&#8203;38751](https://togithub.com/spring-projects/spring-boot/issues/38751)
- Gradle task "bootJar" fails with "Failed to get permissions" when
using Gradle 8.6-milestone-1
[#&#8203;38741](https://togithub.com/spring-projects/spring-boot/issues/38741)
- Custom binding converters are ignored when working with collection
types
[#&#8203;38734](https://togithub.com/spring-projects/spring-boot/issues/38734)
- WebFlux and resource server auto-configuration may fail due to null
authentication manager
[#&#8203;38713](https://togithub.com/spring-projects/spring-boot/issues/38713)
- It is unclear that Docker Compose services have not been started as
one or more is already running
[#&#8203;38661](https://togithub.com/spring-projects/spring-boot/issues/38661)
- Spring Boot jar launcher does not work in folders containing certain
chars
[#&#8203;38660](https://togithub.com/spring-projects/spring-boot/issues/38660)
- FileNotFoundException is thrown eagerly from unused SSL bundles
[#&#8203;38659](https://togithub.com/spring-projects/spring-boot/issues/38659)
- NoUniqueBeanDefinitionFailureAnalyzer does not account for the fact
that missing '-parameters' may be the cause
[#&#8203;38652](https://togithub.com/spring-projects/spring-boot/issues/38652)
- Traces are propagated if tracing is disabled
[#&#8203;38641](https://togithub.com/spring-projects/spring-boot/issues/38641)
- Missing registry auto-configuration for JMS listener observation
support
[#&#8203;38613](https://togithub.com/spring-projects/spring-boot/issues/38613)
- Class loading fails on an interrupted thread causing
com.mongodb.event.ServerClosedEvent to fail to load when Mongo detects a
cluster change
[#&#8203;38611](https://togithub.com/spring-projects/spring-boot/issues/38611)
- Failures due to code not being compiled with '-parameters' are hard to
identify
[#&#8203;38603](https://togithub.com/spring-projects/spring-boot/issues/38603)
- System SSL certificates are not used by the Apache HTTP Client in a
RestTemplate built with RestTemplateBuilder
[#&#8203;38600](https://togithub.com/spring-projects/spring-boot/issues/38600)
- ZipFileSystem throws "java.util.zip.ZipException: read CEN tables
failed" with certain nested jars
[#&#8203;38595](https://togithub.com/spring-projects/spring-boot/issues/38595)
- Nested jar URLs cannot be split and reassembled resulting in errors
with projects that use this technique (such as JobRunr)
[#&#8203;38592](https://togithub.com/spring-projects/spring-boot/issues/38592)
- NoSuchMethodError can be thrown from Session.getCookie() due to binary
incompatibilty
[#&#8203;38589](https://togithub.com/spring-projects/spring-boot/issues/38589)
- management.metrics.tags has been deprecated without a replacement
working for all metrics
[#&#8203;38583](https://togithub.com/spring-projects/spring-boot/issues/38583)
- NegativeArraySizeException can be thrown from
org.springframework.boot.loader.zip.ZipContent$Loader
[#&#8203;38572](https://togithub.com/spring-projects/spring-boot/issues/38572)
- Migration form 3.1.5 to 3.2.0 : "Default" Tracer is not provided in
test anymore
[#&#8203;38568](https://togithub.com/spring-projects/spring-boot/issues/38568)
- TomcatWebServer stop doesn't close sockets for additional connectors
[#&#8203;38564](https://togithub.com/spring-projects/spring-boot/issues/38564)
- Port is already in use when using `@SpringBootTest` with a separate
management port and a mock web environment
[#&#8203;38554](https://togithub.com/spring-projects/spring-boot/issues/38554)
-   Keep-alive property causes processAot step to never finish [#&#82

</details>

---

### Configuration

📅 **Schedule**: Branch creation - At any time (no schedule defined),
Automerge - At any time (no schedule defined).

🚦 **Automerge**: Disabled by config. Please merge this manually once you
are satisfied.

♻ **Rebasing**: Whenever PR becomes conflicted, or you tick the
rebase/retry checkbox.

👻 **Immortal**: This PR will be recreated if closed unmerged. Get
[config help](https://togithub.com/renovatebot/renovate/discussions) if
that's undesired.

---

- [ ] <!-- rebase-check -->If you want to rebase/retry this PR, check
this box

---

This PR has been generated by [Mend
Renovate](https://www.mend.io/free-developer-tools/renovate/). View
repository job log
[here](https://developer.mend.io/github/apollographql/federation-jvm).

<!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiIzNi44My4wIiwidXBkYXRlZEluVmVyIjoiMzcuMTM1LjAiLCJ0YXJnZXRCcmFuY2giOiJtYWluIn0=-->

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Projects
None yet
Development

Successfully merging this pull request may close these issues.

None yet

2 participants