Comments (6)
Be my guest @injae-kim :)
from reactor-core.
Thank you! I'll investigate the cause of failed test and create fix PR soon :)
from reactor-core.
It looks like it's not the test configuration that is broken but some operator along doesn't honour the demand. If the TCK's Subscriber demands 15 items, any configuration that we come up with should not deliver more items. So it seems that at least one operator along the way is broken with that regard. Instead of changing the pipeline to avoid this problematic outcome, perhaps it's best identifying which operator delivers more than was demanded. Some race occurs which doesn't properly synchronise delivery with demand.
from reactor-core.
May I handle this issue?
from reactor-core.
@Override @Test
public void required_spec312_cancelMustMakeThePublisherToEventuallyStopSignaling() throws Throwable {
// the publisher is able to signal more elements than the subscriber will be requesting in total
final int publisherElements = 20;
final int demand1 = 10;
final int demand2 = 5;
final int totalDemand = demand1 + demand2;
activePublisherTest(publisherElements, false, new PublisherTestRun<T>() {
@Override @SuppressWarnings("ThrowableResultOfMethodCallIgnored")
public void run(Publisher<T> pub) throws Throwable {
final ManualSubscriber<T> sub = env.newManualSubscriber(pub);
sub.request(demand1);
sub.request(demand2);
sub.nextElement();
sub.cancel();
...
// if the Publisher tries to emit more elements than was requested (and/or ignores cancellation) this will throw
assertTrue(onNextsSignalled <= totalDemand,
String.format("Publisher signalled [%d] elements, which is more than the signalled demand: %d",
onNextsSignalled, totalDemand));
I checked that required_spec312_cancelMustMakeThePublisherToEventuallyStopSignaling
TCK test requests 15 elements to upstream and then cancel it, finally assertThat(onNextsSignalled <= 15)
(I'm not sure) but on our FluxBlackboxProcessorVerification
with parallel
, I think publisher can produce element that larger than 15 as you can see on above screen shot.
So I think publisher can produce total 16 items
(e.g. 1 -> 3 -> 6 -> .. -> 20 (15th)
-> Complete(16th)
) and TCK test can be failed!
So I suggest to fix our FluxBlackboxProcessorVerification#ftransformFlux
to always produce 15 items properly. WDYT?
from reactor-core.
It's best identifying which operator delivers more than was demanded. Some race occurs which doesn't properly synchronise delivery with demand.
I agree! good point. I think I found some clue on above investigation, so I'll check it more and share the root cause to you soon.
Thank you for your guide!
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 - 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.