<div dir="ltr"><br><div class="gmail_extra"><br><div class="gmail_quote">On Thu, Sep 18, 2014 at 3:09 PM, Bela Ban <span dir="ltr"><<a href="mailto:bban@redhat.com" target="_blank">bban@redhat.com</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div class="HOEnZb"><div class="h5"><br>
<br>
On 18/09/14 13:03, Dan Berindei wrote:<br>
> Thanks Pedro, this looks great.<br>
><br>
> However, I don't think it's ok to treat CommitCommands/Pessimistic<br>
> PrepareCommands as RemoteLockCommands just because they may send L1<br>
> invalidation commands. It's true that those commands will block, but<br>
> there's no need to wait for any other command before doing the L1<br>
> invalidation. In fact, the non-tx writes on backup owners, which you<br>
> consider to be non-blocking, can also send L1 invalidation commands (see<br>
> L1NonTxInterceptor.invalidateL1).<br>
><br>
> On the other hand, one of the good things that the remote executor did<br>
> was to allow queueing lots of commands with a higher topology id, when<br>
> one of the nodes receives the new topology much later than the others.<br>
> We still have to consider each TopologyAffectedCommand as potentially<br>
> blocking and put it through the remote executor.<br>
><br>
> And InvalidateL1Commands are also TopologyAffectedCommands, so there's<br>
> still a potential for deadlock when L1 is enabled and we have maxThreads<br>
> write commands blocked sending L1 invalidations and those L1<br>
> invalidation commands are stuck in the remote executor's queue on<br>
> another node. And with (very) unlucky timing the remote executor might<br>
> not even get to create maxThreads threads before the deadlock appears. I<br>
> wonder if we could write a custom executor that checks what the first<br>
> task in the queue is every second or so, and creates a bunch of new<br>
> threads if the first task in the queue hasn't changed.<br>
><br>
> You're right about the remote executor getting full as well, we're<br>
> lacking any feedback mechanism to tell the sender to slow down, except<br>
> for blocking the OOB thread.<br>
<br>
</div></div>JGroups sends credits back to the sender *after* the message has been<br>
delivered into the application. If the application is slow in processing<br>
the messages, or blocks for some time, then the sender will not receive<br>
enough credits and thus also slow down, or even block.<br></blockquote><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><span class=""><br>
> I wonder if we could tell JGroups somehow<br>
> to discard the message from inside MessageDispatcher.handle (e.g. throw<br>
> a DiscardMessageException), so the sender has to retransmit it<br>
<br>
</span>At this point, JGroups considers the message *delivered* (as it has<br>
passed the UNICAST or NAKACK protocols), and it won't get resent. You<br>
cannot discard it either, as this will be a message loss. However, if<br>
you can tolerate loss, all is fine. E.g. if you discard a topo message<br>
with a lower ID, I don't think any harm is done in Infinispan. (?). To<br>
discard or not, is Infinispan's decision.<br>
The other thing is to block, but this can have an impact back into the<br>
JGroups thread pools.<br></blockquote><div><br></div><div>Right, I was hoping the message would be marked as delivered only after Infinispan finished processing the message (i.e. when up() returns in UNICAST/NAKACK).</div><div><br></div><div>Perhaps we could delay sending the credits instead? When process a message on our internal thread pool, it would be nice if we could tell JGroups to send credits back only when we really finished processing the message.</div><div><br></div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
<span class=""><br>
> and we<br>
> don't block the OOB thread. That should allow us to set a size limit on<br>
> the BlockingTaskAwareExecutor's blockedTasks collection as well. Bela, WDYT?<br>
><br>
> Cheers<br>
> Dan<br>
><br>
><br>
> On Wed, Sep 17, 2014 at 7:17 PM, Pedro Ruivo <<a href="mailto:pedro@infinispan.org">pedro@infinispan.org</a><br>
</span><span class="">> <mailto:<a href="mailto:pedro@infinispan.org">pedro@infinispan.org</a>>> wrote:<br>
><br>
> new link:<br>
> <a href="https://github.com/infinispan/infinispan/wiki/Remote-Command-Handler" target="_blank">https://github.com/infinispan/infinispan/wiki/Remote-Command-Handler</a><br>
><br>
> On 09/17/2014 05:08 PM, Pedro Ruivo wrote:<br>
> > Hi,<br>
> ><br>
> > I've just wrote on the wiki a new algorithm to better handle the<br>
> remote<br>
> > commands. You can find it in [1].<br>
> ><br>
> > If you have questions, suggestion or just want to discuss some<br>
> aspect,<br>
> > please do in thread. I'll update the wiki page based on this<br>
> discussion<br>
> ><br>
> > Thanks.<br>
> ><br>
> > Cheers,<br>
> > Pedro<br>
> ><br>
> ><br>
> [1]<a href="https://github.com/infinispan/infinispan/wiki/Remote-Command-Handler-(Work-In-Progress.." target="_blank">https://github.com/infinispan/infinispan/wiki/Remote-Command-Handler-(Work-In-Progress..</a>.)<br>
> ><br>
> _______________________________________________<br>
> infinispan-dev mailing list<br>
</span>> <a href="mailto:infinispan-dev@lists.jboss.org">infinispan-dev@lists.jboss.org</a> <mailto:<a href="mailto:infinispan-dev@lists.jboss.org">infinispan-dev@lists.jboss.org</a>><br>
> <a href="https://lists.jboss.org/mailman/listinfo/infinispan-dev" target="_blank">https://lists.jboss.org/mailman/listinfo/infinispan-dev</a><br>
<span class="im HOEnZb">><br>
><br>
><br>
><br>
> _______________________________________________<br>
> infinispan-dev mailing list<br>
> <a href="mailto:infinispan-dev@lists.jboss.org">infinispan-dev@lists.jboss.org</a><br>
> <a href="https://lists.jboss.org/mailman/listinfo/infinispan-dev" target="_blank">https://lists.jboss.org/mailman/listinfo/infinispan-dev</a><br>
><br>
<br>
</span><span class="HOEnZb"><font color="#888888">--<br>
Bela Ban, JGroups lead (<a href="http://www.jgroups.org" target="_blank">http://www.jgroups.org</a>)<br>
</font></span><div class="HOEnZb"><div class="h5">_______________________________________________<br>
infinispan-dev mailing list<br>
<a href="mailto:infinispan-dev@lists.jboss.org">infinispan-dev@lists.jboss.org</a><br>
<a href="https://lists.jboss.org/mailman/listinfo/infinispan-dev" target="_blank">https://lists.jboss.org/mailman/listinfo/infinispan-dev</a><br>
</div></div></blockquote></div><br></div></div>