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

3.x: Standardize MissingBackpressureException message, introduce QueueOverflowException #7459

Merged

Conversation

akarnokd
Copy link
Member

@akarnokd akarnokd commented Aug 8, 2022

Extend MissingBackpressureException with a standard message string and a static methods to create the exception with the standard message. This will make sure every case reports the same consistent message.

In addition, the queue overflows now have a separate exception class QueueOverflowException. This exception should not happen during normal operations and is mainly there to detect misuse or bugs in operators. Consequencly, even though many places used to signal MissingBackpressureException for such queue overflows, there was no reason to check for this specific exception class outside developing RxJava itself.

ThrottleLatest needs to be updated after #7457

@akarnokd akarnokd added this to the 3.2 milestone Aug 8, 2022
@codecov
Copy link

codecov bot commented Aug 8, 2022

Codecov Report

Merging #7459 (2f858bd) into 3.x (ef51a90) will decrease coverage by 0.01%.
The diff coverage is 100.00%.

@@             Coverage Diff              @@
##                3.x    #7459      +/-   ##
============================================
- Coverage     99.55%   99.54%   -0.02%     
- Complexity     6781     6786       +5     
============================================
  Files           751      752       +1     
  Lines         47482    47489       +7     
  Branches       6378     6379       +1     
============================================
+ Hits          47271    47272       +1     
- Misses           93       97       +4     
- Partials        118      120       +2     
Impacted Files Coverage Δ
...java3/exceptions/MissingBackpressureException.java 100.00% <100.00%> (ø)
...vex/rxjava3/exceptions/QueueOverflowException.java 100.00% <100.00%> (ø)
...x/rxjava3/internal/jdk8/FlowableFlatMapStream.java 100.00% <100.00%> (ø)
...ernal/operators/completable/CompletableConcat.java 100.00% <100.00%> (ø)
...l/operators/flowable/BlockingFlowableIterable.java 100.00% <100.00%> (ø)
...internal/operators/flowable/FlowableConcatMap.java 100.00% <100.00%> (ø)
...nal/operators/flowable/FlowableConcatMapEager.java 100.00% <100.00%> (ø)
...operators/flowable/FlowableConcatMapScheduler.java 99.60% <100.00%> (ø)
...a3/internal/operators/flowable/FlowableCreate.java 99.02% <100.00%> (ø)
.../internal/operators/flowable/FlowableDebounce.java 100.00% <100.00%> (ø)
... and 42 more

📣 Codecov can now indicate which changes are the most critical in Pull Requests. Learn more

* without synchronization. Rarely, it is an indication of bugs inside RxJava
* @since 3.1.6
*/
public static final String QUEUE_OVERFLOW_MESSAGE = "Queue overflow due to illegal concurrent onNext calls or a bug in RxJava";
Copy link
Collaborator

Choose a reason for hiding this comment

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

These could be private though, right?

Copy link
Member Author

Choose a reason for hiding this comment

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

3rd party implementations should be able to verify they got this exact message:

assertEquals(ex.getMessage(), MissingBackpressureException.QUEUE_OVERFLOW_MESSAGE);

Copy link
Collaborator

Choose a reason for hiding this comment

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

Hmm should not we then just have two different exceptions both having only one public constructor which contains the exact message and then you simply check for its type which is superior than the String message?

Copy link
Member Author

Choose a reason for hiding this comment

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

Alright, let's introduce a separate exception.

Copy link
Member Author

Choose a reason for hiding this comment

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

Done.

* Constructs a QueueOverflowException with the given message but no cause.
* @param message the error message
*/
public QueueOverflowException(String message) {
Copy link
Collaborator

Choose a reason for hiding this comment

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

Why would we need this?

Copy link
Member Author

Choose a reason for hiding this comment

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

In case 3rd party users would want to have a custom message.

Copy link
Collaborator

Choose a reason for hiding this comment

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

Alright!

@akarnokd akarnokd changed the title 3.x: Standardize MissingBackpressureException messages 3.x: Standardize MissingBackpressureException message, introduce QueueOverflowException Aug 8, 2022
@akarnokd akarnokd merged commit 2edba23 into ReactiveX:3.x Aug 8, 2022
@akarnokd akarnokd deleted the MissingBackpressureExceptionStandardMessage branch August 8, 2022 18:45
Goooler pushed a commit to Goooler/DemoApp that referenced this pull request Jan 18, 2023
[![Mend
Renovate](https://app.renovatebot.com/images/banner.svg)](https://renovatebot.com)

This PR contains the following updates:

| Package | Change | Age | Adoption | Passing | Confidence |
|---|---|---|---|---|---|
| [io.reactivex.rxjava3:rxjava](https://togithub.com/ReactiveX/RxJava) |
`3.1.5` -> `3.1.6` |
[![age](https://badges.renovateapi.com/packages/maven/io.reactivex.rxjava3:rxjava/3.1.6/age-slim)](https://docs.renovatebot.com/merge-confidence/)
|
[![adoption](https://badges.renovateapi.com/packages/maven/io.reactivex.rxjava3:rxjava/3.1.6/adoption-slim)](https://docs.renovatebot.com/merge-confidence/)
|
[![passing](https://badges.renovateapi.com/packages/maven/io.reactivex.rxjava3:rxjava/3.1.6/compatibility-slim/3.1.5)](https://docs.renovatebot.com/merge-confidence/)
|
[![confidence](https://badges.renovateapi.com/packages/maven/io.reactivex.rxjava3:rxjava/3.1.6/confidence-slim/3.1.5)](https://docs.renovatebot.com/merge-confidence/)
|

---

### ⚠ Dependency Lookup Warnings ⚠

Warnings were logged while processing this repo. Please check the
Dependency Dashboard for more information.

---

### Release Notes

<details>
<summary>ReactiveX/RxJava</summary>

###
[`v3.1.6`](https://togithub.com/ReactiveX/RxJava/releases/tag/v3.1.6)


[Maven](http://search.maven.org/#artifactdetails%7Cio.reactivex.rxjava3%7Crxjava%7C3.1.6%7C)
[JavaDocs](http://reactivex.io/RxJava/3.x/javadoc/3.1.6)

##### API changes

- Add an overload to `throttleLatest` operator with an `onDropped`
callback. (<a
href='https://github.com/ReactiveX/RxJava/issues/7457'>[#&#8203;7457](https://togithub.com/ReactiveX/RxJava/issues/7457)</a>)
- Add an overload to `throttleFirst` operator with an `onDropped`
callback. (<a
href='https://github.com/ReactiveX/RxJava/issues/7482'>[#&#8203;7482](https://togithub.com/ReactiveX/RxJava/issues/7482)</a>)
- Add an overload to `throttleLast` operator with an `onDropped`
callback. (<a
href='https://github.com/ReactiveX/RxJava/issues/7488'>[#&#8203;7488](https://togithub.com/ReactiveX/RxJava/issues/7488)</a>)
- Add an overload to `throttleWithTimeout` operator with an `onDropped`
callback. (<a
href='https://github.com/ReactiveX/RxJava/issues/7510'>[#&#8203;7510](https://togithub.com/ReactiveX/RxJava/issues/7510)</a>)

##### Bugfixes

- Fix a race condition in `Single.timeout` that prevented the timeout
signal from happening. (<a
href='https://github.com/ReactiveX/RxJava/issues/7515'>[#&#8203;7515](https://togithub.com/ReactiveX/RxJava/issues/7515)</a>)

##### Documentation

- Fix formatting in `TestObserver/Consumer/Subscriber` javadoc html. (<a
href='https://github.com/ReactiveX/RxJava/issues/7442'>[#&#8203;7442](https://togithub.com/ReactiveX/RxJava/issues/7442)</a>)
- Fix typo in `BehaviorSubject.java`. (<a
href='https://github.com/ReactiveX/RxJava/issues/7452'>[#&#8203;7452](https://togithub.com/ReactiveX/RxJava/issues/7452)</a>)
- Fix grammar about cancellation in `Schedulers` javadoc. (<a
href='https://github.com/ReactiveX/RxJava/issues/7453'>[#&#8203;7453](https://togithub.com/ReactiveX/RxJava/issues/7453)</a>)
- Change `@coded` tag to `@code` tag. (<a
href='https://github.com/ReactiveX/RxJava/issues/7463'>[#&#8203;7463](https://togithub.com/ReactiveX/RxJava/issues/7463)</a>)
- Fix `fromCompletionStage` javadoc. (<a
href='https://github.com/ReactiveX/RxJava/issues/7508'>[#&#8203;7508](https://togithub.com/ReactiveX/RxJava/issues/7508)</a>)

##### Other

- Add missing `@NonNull` annotation to `Maybe` type argument. (<a
href='https://github.com/ReactiveX/RxJava/issues/7436'>[#&#8203;7436](https://togithub.com/ReactiveX/RxJava/issues/7436)</a>)
- Remove redundant interface declarations. (<a
href='https://github.com/ReactiveX/RxJava/issues/7438'>[#&#8203;7438](https://togithub.com/ReactiveX/RxJava/issues/7438)</a>)
- Standardize `MissingBackpressureException` message, introduce
`QueueOverflowException`. (<a
href='https://github.com/ReactiveX/RxJava/issues/7459'>[#&#8203;7459](https://togithub.com/ReactiveX/RxJava/issues/7459)</a>)
- Update `Flowable.throttleLatest` `MissingBackpressureException`
message. (<a
href='https://github.com/ReactiveX/RxJava/issues/7460'>[#&#8203;7460](https://togithub.com/ReactiveX/RxJava/issues/7460)</a>)
- Fix cancellation order in `throttleFirst`. (<a
href='https://github.com/ReactiveX/RxJava/issues/7484'>[#&#8203;7484](https://togithub.com/ReactiveX/RxJava/issues/7484)</a>)

</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.

🔕 **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://app.renovatebot.com/dashboard#github/Goooler/DemoApp).

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

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
ZacSweers pushed a commit to slackhq/circuit that referenced this pull request Jan 19, 2023
This PR contains the following updates:

| Package | Type | Update | Change |
|---|---|---|---|
| [io.reactivex.rxjava3:rxjava](https://togithub.com/ReactiveX/RxJava) |
dependencies | patch | `3.1.5` -> `3.1.6` |

---

### Release Notes

<details>
<summary>ReactiveX/RxJava</summary>

###
[`v3.1.6`](https://togithub.com/ReactiveX/RxJava/releases/tag/v3.1.6)


[Maven](http://search.maven.org/#artifactdetails%7Cio.reactivex.rxjava3%7Crxjava%7C3.1.6%7C)
[JavaDocs](http://reactivex.io/RxJava/3.x/javadoc/3.1.6)

##### API changes

- Add an overload to `throttleLatest` operator with an `onDropped`
callback. (<a
href='https://github.com/ReactiveX/RxJava/issues/7457'>[#&#8203;7457](https://togithub.com/ReactiveX/RxJava/issues/7457)</a>)
- Add an overload to `throttleFirst` operator with an `onDropped`
callback. (<a
href='https://github.com/ReactiveX/RxJava/issues/7482'>[#&#8203;7482](https://togithub.com/ReactiveX/RxJava/issues/7482)</a>)
- Add an overload to `throttleLast` operator with an `onDropped`
callback. (<a
href='https://github.com/ReactiveX/RxJava/issues/7488'>[#&#8203;7488](https://togithub.com/ReactiveX/RxJava/issues/7488)</a>)
- Add an overload to `throttleWithTimeout` operator with an `onDropped`
callback. (<a
href='https://github.com/ReactiveX/RxJava/issues/7510'>[#&#8203;7510](https://togithub.com/ReactiveX/RxJava/issues/7510)</a>)

##### Bugfixes

- Fix a race condition in `Single.timeout` that prevented the timeout
signal from happening. (<a
href='https://github.com/ReactiveX/RxJava/issues/7515'>[#&#8203;7515](https://togithub.com/ReactiveX/RxJava/issues/7515)</a>)

##### Documentation

- Fix formatting in `TestObserver/Consumer/Subscriber` javadoc html. (<a
href='https://github.com/ReactiveX/RxJava/issues/7442'>[#&#8203;7442](https://togithub.com/ReactiveX/RxJava/issues/7442)</a>)
- Fix typo in `BehaviorSubject.java`. (<a
href='https://github.com/ReactiveX/RxJava/issues/7452'>[#&#8203;7452](https://togithub.com/ReactiveX/RxJava/issues/7452)</a>)
- Fix grammar about cancellation in `Schedulers` javadoc. (<a
href='https://github.com/ReactiveX/RxJava/issues/7453'>[#&#8203;7453](https://togithub.com/ReactiveX/RxJava/issues/7453)</a>)
- Change `@coded` tag to `@code` tag. (<a
href='https://github.com/ReactiveX/RxJava/issues/7463'>[#&#8203;7463](https://togithub.com/ReactiveX/RxJava/issues/7463)</a>)
- Fix `fromCompletionStage` javadoc. (<a
href='https://github.com/ReactiveX/RxJava/issues/7508'>[#&#8203;7508](https://togithub.com/ReactiveX/RxJava/issues/7508)</a>)

##### Other

- Add missing `@NonNull` annotation to `Maybe` type argument. (<a
href='https://github.com/ReactiveX/RxJava/issues/7436'>[#&#8203;7436](https://togithub.com/ReactiveX/RxJava/issues/7436)</a>)
- Remove redundant interface declarations. (<a
href='https://github.com/ReactiveX/RxJava/issues/7438'>[#&#8203;7438](https://togithub.com/ReactiveX/RxJava/issues/7438)</a>)
- Standardize `MissingBackpressureException` message, introduce
`QueueOverflowException`. (<a
href='https://github.com/ReactiveX/RxJava/issues/7459'>[#&#8203;7459](https://togithub.com/ReactiveX/RxJava/issues/7459)</a>)
- Update `Flowable.throttleLatest` `MissingBackpressureException`
message. (<a
href='https://github.com/ReactiveX/RxJava/issues/7460'>[#&#8203;7460](https://togithub.com/ReactiveX/RxJava/issues/7460)</a>)
- Fix cancellation order in `throttleFirst`. (<a
href='https://github.com/ReactiveX/RxJava/issues/7484'>[#&#8203;7484](https://togithub.com/ReactiveX/RxJava/issues/7484)</a>)

</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.

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

---

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

---

This PR has been generated by [Renovate
Bot](https://togithub.com/renovatebot/renovate).

<!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiIzMi4xOTAuNiIsInVwZGF0ZWRJblZlciI6IjMyLjE5MC42In0=-->
ZacSweers pushed a commit to slackhq/slack-gradle-plugin that referenced this pull request Jan 19, 2023
This PR contains the following updates:

| Package | Type | Update | Change |
|---|---|---|---|
| [io.reactivex.rxjava3:rxjava](https://togithub.com/ReactiveX/RxJava) |
dependencies | patch | `3.1.5` -> `3.1.6` |

---

### Release Notes

<details>
<summary>ReactiveX/RxJava</summary>

###
[`v3.1.6`](https://togithub.com/ReactiveX/RxJava/releases/tag/v3.1.6)


[Maven](http://search.maven.org/#artifactdetails%7Cio.reactivex.rxjava3%7Crxjava%7C3.1.6%7C)
[JavaDocs](http://reactivex.io/RxJava/3.x/javadoc/3.1.6)

##### API changes

- Add an overload to `throttleLatest` operator with an `onDropped`
callback. (<a
href='https://github.com/ReactiveX/RxJava/issues/7457'>[#&#8203;7457](https://togithub.com/ReactiveX/RxJava/issues/7457)</a>)
- Add an overload to `throttleFirst` operator with an `onDropped`
callback. (<a
href='https://github.com/ReactiveX/RxJava/issues/7482'>[#&#8203;7482](https://togithub.com/ReactiveX/RxJava/issues/7482)</a>)
- Add an overload to `throttleLast` operator with an `onDropped`
callback. (<a
href='https://github.com/ReactiveX/RxJava/issues/7488'>[#&#8203;7488](https://togithub.com/ReactiveX/RxJava/issues/7488)</a>)
- Add an overload to `throttleWithTimeout` operator with an `onDropped`
callback. (<a
href='https://github.com/ReactiveX/RxJava/issues/7510'>[#&#8203;7510](https://togithub.com/ReactiveX/RxJava/issues/7510)</a>)

##### Bugfixes

- Fix a race condition in `Single.timeout` that prevented the timeout
signal from happening. (<a
href='https://github.com/ReactiveX/RxJava/issues/7515'>[#&#8203;7515](https://togithub.com/ReactiveX/RxJava/issues/7515)</a>)

##### Documentation

- Fix formatting in `TestObserver/Consumer/Subscriber` javadoc html. (<a
href='https://github.com/ReactiveX/RxJava/issues/7442'>[#&#8203;7442](https://togithub.com/ReactiveX/RxJava/issues/7442)</a>)
- Fix typo in `BehaviorSubject.java`. (<a
href='https://github.com/ReactiveX/RxJava/issues/7452'>[#&#8203;7452](https://togithub.com/ReactiveX/RxJava/issues/7452)</a>)
- Fix grammar about cancellation in `Schedulers` javadoc. (<a
href='https://github.com/ReactiveX/RxJava/issues/7453'>[#&#8203;7453](https://togithub.com/ReactiveX/RxJava/issues/7453)</a>)
- Change `@coded` tag to `@code` tag. (<a
href='https://github.com/ReactiveX/RxJava/issues/7463'>[#&#8203;7463](https://togithub.com/ReactiveX/RxJava/issues/7463)</a>)
- Fix `fromCompletionStage` javadoc. (<a
href='https://github.com/ReactiveX/RxJava/issues/7508'>[#&#8203;7508](https://togithub.com/ReactiveX/RxJava/issues/7508)</a>)

##### Other

- Add missing `@NonNull` annotation to `Maybe` type argument. (<a
href='https://github.com/ReactiveX/RxJava/issues/7436'>[#&#8203;7436](https://togithub.com/ReactiveX/RxJava/issues/7436)</a>)
- Remove redundant interface declarations. (<a
href='https://github.com/ReactiveX/RxJava/issues/7438'>[#&#8203;7438](https://togithub.com/ReactiveX/RxJava/issues/7438)</a>)
- Standardize `MissingBackpressureException` message, introduce
`QueueOverflowException`. (<a
href='https://github.com/ReactiveX/RxJava/issues/7459'>[#&#8203;7459](https://togithub.com/ReactiveX/RxJava/issues/7459)</a>)
- Update `Flowable.throttleLatest` `MissingBackpressureException`
message. (<a
href='https://github.com/ReactiveX/RxJava/issues/7460'>[#&#8203;7460](https://togithub.com/ReactiveX/RxJava/issues/7460)</a>)
- Fix cancellation order in `throttleFirst`. (<a
href='https://github.com/ReactiveX/RxJava/issues/7484'>[#&#8203;7484](https://togithub.com/ReactiveX/RxJava/issues/7484)</a>)

</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.

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

---

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

---

This PR has been generated by [Renovate
Bot](https://togithub.com/renovatebot/renovate).

<!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiIzMi4xOTAuNiIsInVwZGF0ZWRJblZlciI6IjMyLjE5MC42In0=-->
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

Successfully merging this pull request may close these issues.

None yet

2 participants