Comments (4)
Hi, @ferrerogg! Thanks for bringing this up. I found a previous discussion regarding this and some interesting points there.
- The idea that you bring about nesting the
TimeoutException
was suggested by @simonbasle in #2267 (comment) - Afterwards it was dismissed: #2267 (comment)
Apparently, it seems it is of importance to some users, including yourself. So let's reconsider it. Can you please share a little bit what the scenario is that you need this in? I don't want to frame guesses, but I have a feeling in 2024 this might be a more frequent case. However, I'd love to make sure that we are not promoting bad patterns with whatever the end solution ends up looking like.
Regarding a different Exception
type, it would be a breaking change and I'd prefer not to do it.
However, adding a cause or a suppressed exception would be a behaviour change, yet I dare to say not a breaking one.
So I look forward to some usage examples and scenarios and unless there is pushback I'd be up for improving this situation. Obviously it won't be without cost, as adding something without changing the type of the thrown exception requires a bit more of runtime memory to be allocated – but that can be a preferable tradeoff compared to string matching. Therefore, if we decide to change this, I'd target this for 3.6.x line.
from reactor-core.
Hi @chemicL
I'm a newbie in Reactor, so I'm trying to experiment.
My use case is quite simple in pseudo-code
List = Flux.fromIterable(myListOfItemsToSubmitToSpringWebClient) .flatMapSequential(item -> callWebClient(item)) .collectList() .block(maxWorkTimeout);
This fragment calls a Spring WebClient that posts an "item" to a remote web service (not managed by me). Item responses are then collected into a List and then further processed in a old-style blocking code library (not managed by me).
Because remote service SLA is unknown, I would like to try the above processing with a timeout, so that caller could retry later if the remote service is overloaded.
Using block(timeout) seems the the intuitive and easiest way to achieve this requirement.
I also found that I can probably refactor previous code introducing a .timeout()
List = Flux.fromIterable(myListOfItemsToSubmitToSpringWebClient) .flatMapSequential(item -> callWebClient(item)) .collectList() .timeout(maxWorkTimeout); .block();
This code would throw a "wrapped" checked java.util.concurrent.TimeoutException, so I guess I can use this instead of digging into IllegalStateException message.
Nevertheless I think that both approaches (.timeout(Duration) and .block(Duration)) should lead to similar exception handling it they are interchangeable
from reactor-core.
@ferrerogg thanks for providing your use case, it sounds like a typical scenario. I agree it makes sense to provide a better default than having to add an additional operator. Therefore, adding a TimeoutException
with the same message as the IllegalStateException
as a cause is the aim here. I'll mark this issue as a good one for contribution, perhaps someone would like to give it a go.
from reactor-core.
Thank you for the nice issue and discussions!
However, adding a cause or a suppressed exception would be a behaviour change, yet I dare to say not a breaking one.
Therefore, adding a TimeoutException with the same message as the IllegalStateException as a cause is the aim here.
I checked all discussions and agree with this way, so created fix PR #3733 :)
from reactor-core.
Related Issues (20)
- Empty hot source hangs with 2nd late subscriber HOT 4
- Mono.share() allow a stream to be canceled HOT 5
- Flaky test - FluxBlackboxProcessorVerification HOT 6
- Flaky test - DefaultTestSubscriberTest HOT 5
- context lost when using Mono.create with threads HOT 2
- [test] Verify Initialization of Default Labels
- Too difficult to control how much Reactor buffers internally HOT 2
- Enabled Automatic Context Propagation and context propagation with lift causes ClassCastException HOT 10
- [Flaky test] FluxCreateTest.fluxCreateOnRequestMultipleThreadsSlowProducer
- BoundedElasticThreadPerTaskSchedulerTest > ensuresTasksScheduling() FAILED HOT 4
- SinksTest > OptimisticEmitFailureHandlerTest > shouldRetryOptimistically() FAILED
- Add bufferWeightedWithin operator.
- thenMany does not ignore all emissions of a concat due to incorrect optimization HOT 2
- FluxBufferWhenTest > timedOutBuffersDontLeak() FAILED
- Support Considering Individual Element Weight in Determining Buffer Boundary instead of Element Counts
- Javadoc for some versions is missing from the website HOT 3
- Flux.mergeSequential does not subscribe to last Producer in specific circumstances HOT 1
- Failing while building reactor-core version 3.4.18 using ./gradlew build (io.projectreactor:reactor-core:3.4.18) HOT 4
- Fatal exceptions not caught in onErrorDropped Hook HOT 2
- autoConnect(0) seems to be broken - late subscribers receive data
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from reactor-core.