<div dir="ltr">Pavel,<div><br></div><div>Yes, there's a causal relationship between the Subscriber demanding more elements, and those items being delivered,</div><div>and that signalling is done in a thread safe manner, so by extension, request-ing happens-before onNext signalling.</div><div>The rules governing <a href="https://github.com/reactive-streams/reactive-streams-jvm#3-subscription-code">Subscription</a> elaborates on the requirements, but most specifically in this case is, I believe, <a href="https://github.com/reactive-streams/reactive-streams-jvm#3.8">3.8</a>.</div><div><br></div><div>Speaking of verification, has the TCK helped you with the interpretations?</div></div><div class="gmail_extra"><br><div class="gmail_quote">On Thu, Nov 2, 2017 at 7:37 PM, Pavel Rappo <span dir="ltr"><<a href="mailto:pavel.rappo@gmail.com" target="_blank">pavel.rappo@gmail.com</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">Viktor,<br>
<br>
Sorry for the misleading title. However, I would appreciate if someone clarifies<br>
this passage. The intent section claims the rule has an implication. In my<br>
opinion an implication is a (even though implicit) first class citizen in the<br>
spec. Because if I cannot verify an implication from a rule, I cannot verify the<br>
rule itself.<br>
<br>
An intent section is more about "why it is so" (commentary if you wish).<br>
<div class="HOEnZb"><div class="h5"><br>
On Thu, Nov 2, 2017 at 8:58 PM, Viktor Klang <<a href="mailto:viktor.klang@gmail.com">viktor.klang@gmail.com</a>> wrote:<br>
> Pavel,<br>
><br>
> On Thu, Nov 2, 2017 at 5:49 PM, Pavel Rappo via Concurrency-interest<br>
> <<a href="mailto:concurrency-interest@cs.oswego.edu">concurrency-interest@cs.<wbr>oswego.edu</a>> wrote:<br>
>><br>
>> I think this question is both about concurrency in Java and Reactive<br>
>> Streams.<br>
>> Thus posting it to a place where it could be seen by all interested<br>
>> parties.<br>
>><br>
>> >    Rule #1.1<br>
>> ><br>
>> >    The total number of onNext's signalled by a Publisher to a Subscriber<br>
>> > MUST<br>
>> >    be less than or equal to the total number of elements requested by<br>
>> > that<br>
>> >    Subscriber's Subscription at all times.<br>
>> ><br>
>> >    The intent of this rule is to make it clear that Publishers cannot<br>
>> > signal<br>
>> >    more elements than Subscribers have requested. There’s an implicit,<br>
>> > but<br>
>> >    important, consequence to this rule: Since demand can only be<br>
>> > fulfilled<br>
>> >    after it has been received, there’s a happens-before relationship<br>
>> > between<br>
>> >    requesting elements and receiving elements.<br>
>><br>
>> It sounds like it is more about causality than happens-before.<br>
>><br>
>> Like if there is<br>
>> an Subscriber.onNext call in the execution, it must be that there was at<br>
>> least a<br>
>> single Subscription.request call in that execution earlier.<br>
>><br>
>><br>
>> If it is really about happens-before, the rule might benefit from the<br>
>> following<br>
>> clarification ("concurrent collections" style):<br>
>><br>
>>     Actions in a thread prior to requesting an item from a Subscription<br>
>>     happen-before actions subsequent to receiving of that item in<br>
>>     Subscriber.onNext in another thread.<br>
>><br>
>> However, since we don't know an element before we receive one in onNext,<br>
>> it can<br>
>> be quite tricky to formulate that clearly.<br>
><br>
><br>
> The Intent-section of the rule is not the specification of the rule. :)<br>
><br>
>><br>
>> ______________________________<wbr>_________________<br>
>> Concurrency-interest mailing list<br>
>> <a href="mailto:Concurrency-interest@cs.oswego.edu">Concurrency-interest@cs.<wbr>oswego.edu</a><br>
>> <a href="http://cs.oswego.edu/mailman/listinfo/concurrency-interest" rel="noreferrer" target="_blank">http://cs.oswego.edu/mailman/<wbr>listinfo/concurrency-interest</a><br>
><br>
><br>
><br>
><br>
> --<br>
> Cheers,<br>
> √<br>
</div></div></blockquote></div><br><br clear="all"><div><br></div>-- <br><div class="gmail_signature" data-smartmail="gmail_signature"><div dir="ltr"><div><span style="border-collapse:separate;color:rgb(0,0,0);font-family:Times;font-variant:normal;letter-spacing:normal;line-height:normal;text-align:-webkit-auto;text-indent:0px;text-transform:none;white-space:normal;word-spacing:0px;font-size:medium"><div style="color:rgb(34,34,34);font-family:arial,sans-serif;font-size:13.333333969116211px">Cheers,</div><div style="color:rgb(34,34,34);font-family:arial,sans-serif;font-size:13.333333969116211px">√</div></span></div></div></div>
</div>