Yes, no visible impact.<br><div class="gmail_extra"><br><br><div class="gmail_quote">On Wed, Dec 5, 2012 at 5:46 PM, Sanne Grinovero <span dir="ltr">&lt;<a href="mailto:sanne@infinispan.org" target="_blank">sanne@infinispan.org</a>&gt;</span> wrote:<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">So to make sure I understood that, this has no visible impact on the<br>
functionality of API methods, correct? Like any get operation would<br>
successfully retrieve a remote entry if one exists somewhere?<br>
<div class="HOEnZb"><div class="h5"><br>
On 5 December 2012 15:42, Dan Berindei &lt;<a href="mailto:dan.berindei@gmail.com">dan.berindei@gmail.com</a>&gt; wrote:<br>
&gt;<br>
&gt; On Wed, Dec 5, 2012 at 4:20 PM, Sanne Grinovero &lt;<a href="mailto:sanne@infinispan.org">sanne@infinispan.org</a>&gt;<br>
&gt; wrote:<br>
&gt;&gt;<br>
&gt;&gt; On 5 December 2012 14:01, Bela Ban &lt;<a href="mailto:bban@redhat.com">bban@redhat.com</a>&gt; wrote:<br>
&gt;&gt; &gt;<br>
&gt;&gt; &gt; On 12/5/12 1:23 PM, Sanne Grinovero wrote:<br>
&gt;&gt; &gt;&gt; On 5 December 2012 11:02, Galder Zamarreņo &lt;<a href="mailto:galder@redhat.com">galder@redhat.com</a>&gt; wrote:<br>
&gt;&gt; &gt;&gt;&gt; On Dec 4, 2012, at 10:22 AM, Sanne Grinovero &lt;<a href="mailto:sanne@infinispan.org">sanne@infinispan.org</a>&gt;<br>
&gt;&gt; &gt;&gt;&gt; wrote:<br>
&gt;&gt; &gt;&gt;&gt;<br>
&gt;&gt; &gt;&gt;&gt;&gt; On 4 December 2012 09:14, Galder Zamarreņo &lt;<a href="mailto:galder@redhat.com">galder@redhat.com</a>&gt; wrote:<br>
&gt;&gt; &gt;&gt;&gt;&gt;&gt; Hey Dan/Adrian,<br>
&gt;&gt; &gt;&gt;&gt;&gt;&gt;<br>
&gt;&gt; &gt;&gt;&gt;&gt;&gt; Re: <a href="https://issues.jboss.org/browse/ISPN-2541" target="_blank">https://issues.jboss.org/browse/ISPN-2541</a><br>
&gt;&gt; &gt;&gt;&gt;&gt;&gt;<br>
&gt;&gt; &gt;&gt;&gt;&gt;&gt; I&#39;m looking at this intermittent failure, and it seems to be caused<br>
&gt;&gt; &gt;&gt;&gt;&gt;&gt; by the fact that the test does not wait for the cluster to be formed when<br>
&gt;&gt; &gt;&gt;&gt;&gt;&gt; the new node is started, which can lead a replication timeout failure from<br>
&gt;&gt; &gt;&gt;&gt;&gt;&gt; the new joining node.<br>
&gt;&gt; &gt;&gt;&gt;&gt;&gt;<br>
&gt;&gt; &gt;&gt;&gt;&gt;&gt; The test can easily be fixed by waiting for cluster to form, and<br>
&gt;&gt; &gt;&gt;&gt;&gt;&gt; then do the call.<br>
&gt;&gt; &gt;&gt;&gt;&gt;&gt;<br>
&gt;&gt; &gt;&gt;&gt;&gt; [...]<br>
&gt;&gt; &gt;&gt;&gt;&gt;<br>
&gt;&gt; &gt;&gt;&gt;&gt; I don&#39;t think the cache should ever be in an illegal state to be used<br>
&gt;&gt; &gt;&gt;&gt;&gt; after being started. So Infinispan should not require tests to wait<br>
&gt;&gt; &gt;&gt;&gt;&gt; for a &quot;cluster to be formed&quot;, I&#39;d rather guarantee that after a cache<br>
&gt;&gt; &gt;&gt;&gt;&gt; is started it&#39;s usable.<br>
&gt;&gt; &gt;&gt;&gt; Precisely, which is why I raised the flag instead of going down the<br>
&gt;&gt; &gt;&gt;&gt; easy path.<br>
&gt;&gt; &gt;&gt;&gt;<br>
&gt;&gt; &gt;&gt;&gt;&gt; If this is not possible, then any application would also need to wait<br>
&gt;&gt; &gt;&gt;&gt;&gt; for that &quot;cluster formed&quot; event, and we should expose an API for<br>
&gt;&gt; &gt;&gt;&gt;&gt; that.<br>
&gt;&gt; &gt;&gt;&gt; The problem is considering when a cluster is formed. How many nodes<br>
&gt;&gt; &gt;&gt;&gt; should you wait for?<br>
&gt;&gt; &gt;&gt;&gt;<br>
&gt;&gt; &gt;&gt; Why can&#39;t we rely on JGroups Discovery to know that, as a user I<br>
&gt;&gt; &gt;&gt; already specified the expected initial group size with<br>
&gt;&gt; &gt;&gt; num_initial_members<br>
&gt;&gt; &gt;&gt; Don&#39;t want to repeat that configuration ;-)<br>
&gt;&gt; &gt;<br>
&gt;&gt; &gt;<br>
&gt;&gt; &gt; I don&#39;t understand this discussion: when a new node join, it&#39;ll return<br>
&gt;&gt; &gt; from JChannel.connect() when it received a JOIN response from the<br>
&gt;&gt; &gt; coordinator, with the current view... or are you guys talking about<br>
&gt;&gt; &gt; Infinispan&#39;s &#39;service views&#39; ?<br>
&gt;&gt;<br>
&gt;&gt; +1<br>
&gt;&gt;<br>
&gt;&gt; That&#39;s why I&#39;m confused too, and not understanding how it is possible<br>
&gt;&gt; that a Cache is returned to the application - which doesn&#39;t have a<br>
&gt;&gt; clue about number of expected nodes - in a state for which the<br>
&gt;&gt; &quot;cluster is not formed yet&quot;. That should never happen!?<br>
&gt;&gt;<br>
&gt;<br>
&gt; It&#39;s simple: getCache() returns once the joiner has received ownership of<br>
&gt; some segments (in distributed mode) and once it received all the data it<br>
&gt; owner (dist and repl). This does not guarantee that the other nodes see the<br>
&gt; joiner as a full member at the time getCache() has returned.<br>
&gt;<br>
&gt; This doesn&#39;t mean that the cache is not functional, on the contrary we could<br>
&gt; return even before the joiner had received the data and the cache would<br>
&gt; still work. But because some nodes think state transfer is still in<br>
&gt; progress, the tests do run into state transfer corner cases that aren&#39;t<br>
&gt; handled properly (they&#39;re getting rarer, but we still have them).<br>
&gt;<br>
&gt;<br>
&gt;&gt;<br>
&gt;&gt; I never understood why the test framework in Infinispan requires this<br>
&gt;&gt; to happen in all tests - even in the cases listed by Mircea that the<br>
&gt;&gt; testsuite is looking for something very specific, I would expect the<br>
&gt;&gt; wait to be unnecessary. (or more precisely, to have been blocked<br>
&gt;&gt; already for long enough)<br>
&gt;&gt;<br>
&gt;<br>
&gt; getCache() only waits enough for the cache to &quot;work&quot;, it doesn&#39;t wait (and I<br>
&gt; don&#39;t think it should wait) for all the other nodes to acknowledge the<br>
&gt; joiner as a full member (i.e. in the &quot;read&quot; consistent hash). Because of<br>
&gt; this, assertions made on nodes other than the joiner can fail (in addition<br>
&gt; to the aforementioned corner cases in state transfer).<br>
&gt;<br>
&gt; It&#39;s also possible (and it was quite likely with older JGroups versions)<br>
&gt; that a joiner would actually form a new cluster by itself instead of joining<br>
&gt; the existing nodes in a single cluster. When that happens, getCache()<br>
&gt; definitely returns without the cluster being formed, and we have to wait for<br>
&gt; the separate clusters to find each other and merge before running our test.<br>
&gt;<br>
&gt; Cheers<br>
&gt; Dan<br>
&gt;<br>
&gt;<br>
</div></div><div class="HOEnZb"><div class="h5">&gt; _______________________________________________<br>
&gt; infinispan-dev mailing list<br>
&gt; <a href="mailto:infinispan-dev@lists.jboss.org">infinispan-dev@lists.jboss.org</a><br>
&gt; <a href="https://lists.jboss.org/mailman/listinfo/infinispan-dev" target="_blank">https://lists.jboss.org/mailman/listinfo/infinispan-dev</a><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></div></div></blockquote></div><br></div>