<div dir="ltr">I think we reached the point where we mention the same arguments over and over again...<div><br></div><div>So let me try to sum it up and possibly iron an action plan out:</div><div><ul><li>The main reason we cache the &quot;isTraceEnabled&quot; value is speed. It&#39;s more than 3 times faster then checking it before each trace invocation.</li><li>This decreases maintainability since we can&#39;t change the logging level in runtime. Dennis filed a JIRA for it: <a href="https://issues.jboss.org/browse/JBCACHE-1625" rel="noreferrer" target="_blank" style="font-size:12.8px">https://issues.jboss.org/<wbr>browse/JBCACHE-1625</a></li><li>It doesn&#39;t matter which logging backend we use (JDK, JBoss etc).</li><li>The main problem is the &quot;translate&quot; method in logger, which translates JBoss Logging levels into backend&#39;s native levels. The &quot;translate&quot; method is used for all logging levels (since &quot;doLogf&quot; method checks &quot;isEnabled&quot; method result, which in turn calls &quot;translate&quot;).</li><li>As shown on benchmarks with JIT activity, there are two reasons why &quot;translate&quot; method is not inlined - it&#39;s too big and it contains a switch statement.</li></ul><div>If you agree with the above, I would like to propose the following action plan:</div></div><div><ul><li>@Dennis - please move the JBCACHE-1625 to Infinispan project and assign it to me.</li><li>@James - I would like to ask you to experiment with optimizing these methods. It would be great if both &quot;translate&quot; and &quot;isEnabled&quot; methods could be inlined. I would be more than happy to verify if it works in both my private benchmarks and if that goes well, with Infinispan stress tests.</li></ul><div>Thanks</div></div><div>Sebastian</div></div><div class="gmail_extra"><br><div class="gmail_quote">On Mon, Oct 3, 2016 at 7:31 PM, Dennis Reed <span dir="ltr">&lt;<a href="mailto:dereed@redhat.com" target="_blank">dereed@redhat.com</a>&gt;</span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><span class="">On 10/03/2016 08:43 AM, Radim Vansa wrote:<br>
&gt; Aren&#39;t we investing a bit too much time to this? The trace level was<br>
&gt; cached for ages, has anyone ever complained?<br>
<br>
</span>I have.  <a href="https://issues.jboss.org/browse/JBCACHE-1625" rel="noreferrer" target="_blank">https://issues.jboss.org/<wbr>browse/JBCACHE-1625</a><br>
<br>
Looks like I just never copied it over to the ISPN JIRA.  :)<br>
<span class=""><br>
&gt; Turning on trace level is completely impractical in production,<br>
<br>
</span>We do it all the time when there&#39;s no better option to debug an issue.<br>
(generally for as short a period as possible if it&#39;s production)<br>
<span class="HOEnZb"><font color="#888888"><br>
-Dennis<br>
</font></span><div class="HOEnZb"><div class="h5"><br>
&gt; but that info (or, I&#39;d say 80% of<br>
&gt; that) is very useful when debugging race conditions etc., so it makes<br>
&gt; sense to keep it there and reduce the cost to minimum.<br>
&gt;<br>
&gt; My 2c<br>
&gt;<br>
&gt; Radim<br>
&gt;<br>
&gt; On 10/03/2016 03:25 PM, Dan Berindei wrote:<br>
&gt;&gt; On Mon, Oct 3, 2016 at 3:58 PM, Sanne Grinovero &lt;<a href="mailto:sanne@infinispan.org">sanne@infinispan.org</a>&gt; wrote:<br>
&gt;&gt;&gt; I&#39;ve not looked at any such details but I always  assumed that since the<br>
&gt;&gt;&gt; logger frameworks (any of them) need to be able to change the logging level,<br>
&gt;&gt;&gt; there must be some way of switching state - at least a volatile read?<br>
&gt;&gt;&gt;<br>
&gt;&gt;&gt; And while that could be very cheap, I doubt it would be as easily optimised<br>
&gt;&gt;&gt; as a constant.<br>
&gt;&gt;&gt;<br>
&gt;&gt; True, at some point you need a volatile read -- you can only avoid<br>
&gt;&gt; that by caching isTraceEnabled(), like we do in Infinispan.<br>
&gt;&gt;<br>
&gt;&gt; My point was related to this assembly instruction, which reads the<br>
&gt;&gt; ordinal of Level.TRACE:<br>
&gt;&gt;<br>
&gt;&gt; 0x00007f93951e9fdf: mov rdi,0x76d4e6d48  ;   {oop(a<br>
&gt;&gt; &#39;org/jboss/logging/Logger$<wbr>Level&#39;)}<br>
&gt;&gt; 0x00007f93951e9fe9: mov ebp  &lt;&lt; missing an operand here &gt;&gt;; -<br>
&gt;&gt; java.lang.Enum::ordinal@1 (line 103)<br>
&gt;&gt;                               ; -<br>
&gt;&gt; org.jboss.logging.<wbr>JBossLogManagerLogger::<wbr>translate@8 (line 58)<br>
&gt;&gt;                               ; -<br>
&gt;&gt; org.jboss.logging.<wbr>JBossLogManagerLogger::<wbr>isEnabled@5 (line 35)<br>
&gt;&gt;                               ; - org.jboss.logging.Logger::<wbr>tracef@4 (line 287)<br>
&gt;&gt;                               ; - org.infinispan.MyBenchmark::<wbr>tracef@7 (line 26)<br>
&gt;&gt;                               ; -<br>
&gt;&gt; org.infinispan.generated.<wbr>MyBenchmark_tracef_jmhTest::<wbr>tracef_thrpt_jmhStub@15<br>
&gt;&gt; (line 113)<br>
&gt;&gt;<br>
&gt;&gt; In an ideal world, the JIT would replace translate(Level.TRACE) with a<br>
&gt;&gt; constant. But here, even though `0x76d4e6d48` is clearly a constant,<br>
&gt;&gt; the ordinal is still loaded and checked every time.<br>
&gt;&gt;<br>
&gt;&gt;&gt; Since we might not be interested only in the logger method to be inlined, we<br>
&gt;&gt;&gt; also want most of the client methods to be considered for inlining.. some of<br>
&gt;&gt;&gt; these can be extremely sensitive so such a decision requires a full<br>
&gt;&gt;&gt; Infinispan performance test rather than a microbenchmark. (which is useful<br>
&gt;&gt;&gt; too but more for the sake of optimising JBoss Logging, not to proof if it&#39;s<br>
&gt;&gt;&gt; OK to switch all of Infinispan &#39;s internal conventions)<br>
&gt;&gt;&gt;<br>
&gt;&gt; Based on the testing both myself and Radim did WRT inlining, it<br>
&gt;&gt; doesn&#39;t make a huge difference. But I agree 100% that before removing<br>
&gt;&gt; the isTraceEnabled() caching we&#39;d have to benchmark the whole of<br>
&gt;&gt; Infinispan, and not just JBoss Logging in isolation.<br>
&gt;&gt;<br>
&gt;&gt; Cheers<br>
&gt;&gt; Dan<br>
&gt;&gt;<br>
&gt;&gt;&gt; On Mon, 3 Oct 2016, 13:45 Sebastian Laskawiec, &lt;<a href="mailto:slaskawi@redhat.com">slaskawi@redhat.com</a>&gt; wrote:<br>
&gt;&gt;&gt;&gt; Awesome Dan! May I ask for a Pull Request:<br>
&gt;&gt;&gt;&gt; <a href="https://github.com/slaskawi/jboss-logging-perf-test" rel="noreferrer" target="_blank">https://github.com/slaskawi/<wbr>jboss-logging-perf-test</a>?<br>
&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt; On Mon, Oct 3, 2016 at 2:40 PM, Dan Berindei &lt;<a href="mailto:dan.berindei@gmail.com">dan.berindei@gmail.com</a>&gt;<br>
&gt;&gt;&gt;&gt; wrote:<br>
&gt;&gt;&gt;&gt;&gt; Hi Sebastian<br>
&gt;&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt;&gt; I modified your benchmark so that the logger and the trace field are<br>
&gt;&gt;&gt;&gt;&gt; static final and looked at the generated assembly with JITWatch [1].<br>
&gt;&gt;&gt;&gt;&gt; Based on the attached assembly listings, caching isTraceEnabled() in a<br>
&gt;&gt;&gt;&gt;&gt; constant field is &quot;infinitely faster&quot;, because there are no assembly<br>
&gt;&gt;&gt;&gt;&gt; instructions that can be traced back to the test method.<br>
&gt;&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt;&gt; JBossLogManagerLogger::<wbr>translate() is inlined in this listing, but it<br>
&gt;&gt;&gt;&gt;&gt; still goes through the switch machinery, I&#39;m guessing because the<br>
&gt;&gt;&gt;&gt;&gt; ordinal of an Enum is not considered a constant.<br>
&gt;&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt;&gt; Cheers<br>
&gt;&gt;&gt;&gt;&gt; Dan<br>
&gt;&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt;&gt; [1]: <a href="https://github.com/AdoptOpenJDK/jitwatch" rel="noreferrer" target="_blank">https://github.com/<wbr>AdoptOpenJDK/jitwatch</a><br>
&gt;&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt;&gt; On Mon, Oct 3, 2016 at 11:28 AM, Sebastian Laskawiec<br>
&gt;&gt;&gt;&gt;&gt; &lt;<a href="mailto:slaskawi@redhat.com">slaskawi@redhat.com</a>&gt; wrote:<br>
&gt;&gt;&gt;&gt;&gt;&gt; Hey!<br>
&gt;&gt;&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt;&gt;&gt; Please have a look at the latest perf test results [1][2]:<br>
&gt;&gt;&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt;&gt;&gt; Benchmark                             Mode  Cnt           Score<br>
&gt;&gt;&gt;&gt;&gt;&gt; Error  Units<br>
&gt;&gt;&gt;&gt;&gt;&gt; MyBenchmark.noVariable               thrpt   20   681131269.875 ±<br>
&gt;&gt;&gt;&gt;&gt;&gt; 3961932.923  ops/s<br>
&gt;&gt;&gt;&gt;&gt;&gt; MyBenchmark.<wbr>withIsTraceEnabledCheck  thrpt   20   676307984.921 ±<br>
&gt;&gt;&gt;&gt;&gt;&gt; 14305970.393  ops/s<br>
&gt;&gt;&gt;&gt;&gt;&gt; MyBenchmark.withVariable             thrpt   20  2411000894.582 ±<br>
&gt;&gt;&gt;&gt;&gt;&gt; 17382438.635  ops/s<br>
&gt;&gt;&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt;&gt;&gt; I think there is no surprise here.. using a field, which stores the<br>
&gt;&gt;&gt;&gt;&gt;&gt; result<br>
&gt;&gt;&gt;&gt;&gt;&gt; of `logger.isTraceEnabled()` evaluation is 3 times faster than other<br>
&gt;&gt;&gt;&gt;&gt;&gt; options.<br>
&gt;&gt;&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt;&gt;&gt; If anyone is interested in printing out JIT stuff, I also ran it with<br>
&gt;&gt;&gt;&gt;&gt;&gt; &quot;-XX:+PrintCompilation&quot;, &quot;-XX:+PrintCompilation2&quot; and<br>
&gt;&gt;&gt;&gt;&gt;&gt; &quot;-XX:+PrintInlining&quot;<br>
&gt;&gt;&gt;&gt;&gt;&gt; here [3].<br>
&gt;&gt;&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt;&gt;&gt; I&#39;m not a performance expert but it seems that JIT could not inline the<br>
&gt;&gt;&gt;&gt;&gt;&gt; &quot;translate&quot; method because of its size (see line 1861). However it<br>
&gt;&gt;&gt;&gt;&gt;&gt; tried<br>
&gt;&gt;&gt;&gt;&gt;&gt; several times with different optimizations (and some of them were<br>
&gt;&gt;&gt;&gt;&gt;&gt; thrown<br>
&gt;&gt;&gt;&gt;&gt;&gt; away - &quot;made not entrant&quot; messages [4]).<br>
&gt;&gt;&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt;&gt;&gt; Let&#39;s wait for James&#39; opinion on this, but I think we should address<br>
&gt;&gt;&gt;&gt;&gt;&gt; this<br>
&gt;&gt;&gt;&gt;&gt;&gt; issue on JBoss Logging/LogManager side (so I agree with David here) and<br>
&gt;&gt;&gt;&gt;&gt;&gt; make<br>
&gt;&gt;&gt;&gt;&gt;&gt; those parts inlinable (wow, does this word even exist? :D). Once this<br>
&gt;&gt;&gt;&gt;&gt;&gt; is<br>
&gt;&gt;&gt;&gt;&gt;&gt; done, we could experiment further in Infinispan codebase and see how<br>
&gt;&gt;&gt;&gt;&gt;&gt; this<br>
&gt;&gt;&gt;&gt;&gt;&gt; relates to some real world benchmarks...<br>
&gt;&gt;&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt;&gt;&gt; Thanks<br>
&gt;&gt;&gt;&gt;&gt;&gt; Sebastian<br>
&gt;&gt;&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt;&gt;&gt; [1] <a href="https://gist.github.com/slaskawi/6766b6e17c7a28ac8d8962293c48a53c" rel="noreferrer" target="_blank">https://gist.github.com/<wbr>slaskawi/<wbr>6766b6e17c7a28ac8d8962293c48a5<wbr>3c</a><br>
&gt;&gt;&gt;&gt;&gt;&gt; [2] Test repository:<br>
&gt;&gt;&gt;&gt;&gt;&gt; <a href="https://github.com/slaskawi/jboss-logging-perf-test" rel="noreferrer" target="_blank">https://github.com/slaskawi/<wbr>jboss-logging-perf-test</a><br>
&gt;&gt;&gt;&gt;&gt;&gt; [3] <a href="https://gist.github.com/slaskawi/6f317bb05539611434bc91d66924bae0" rel="noreferrer" target="_blank">https://gist.github.com/<wbr>slaskawi/<wbr>6f317bb05539611434bc91d66924ba<wbr>e0</a><br>
&gt;&gt;&gt;&gt;&gt;&gt; [4]<br>
&gt;&gt;&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt;&gt;&gt; <a href="https://www.safaribooksonline.com/library/view/java-performance-the/9781449363512/ch04.html" rel="noreferrer" target="_blank">https://www.safaribooksonline.<wbr>com/library/view/java-<wbr>performance-the/9781449363512/<wbr>ch04.html</a><br>
&gt;&gt;&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt;&gt;&gt; On Mon, Oct 3, 2016 at 7:32 AM, Sebastian Laskawiec<br>
&gt;&gt;&gt;&gt;&gt;&gt; &lt;<a href="mailto:slaskawi@redhat.com">slaskawi@redhat.com</a>&gt;<br>
&gt;&gt;&gt;&gt;&gt;&gt; wrote:<br>
&gt;&gt;&gt;&gt;&gt;&gt;&gt; Hey!<br>
&gt;&gt;&gt;&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt;&gt;&gt;&gt; Adding James to this thread.<br>
&gt;&gt;&gt;&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt;&gt;&gt;&gt; @Dennis - I think Dan has a point here. The trick with checking a<br>
&gt;&gt;&gt;&gt;&gt;&gt;&gt; field in<br>
&gt;&gt;&gt;&gt;&gt;&gt;&gt; a class is 3 times faster. Most of the checks are done in core so they<br>
&gt;&gt;&gt;&gt;&gt;&gt;&gt; are<br>
&gt;&gt;&gt;&gt;&gt;&gt;&gt; executed multiple times per operation. Changing all those places is<br>
&gt;&gt;&gt;&gt;&gt;&gt;&gt; probably<br>
&gt;&gt;&gt;&gt;&gt;&gt;&gt; not an option.<br>
&gt;&gt;&gt;&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt;&gt;&gt;&gt; @David - Let me run a test with JBoss Log Manager and get back to you<br>
&gt;&gt;&gt;&gt;&gt;&gt;&gt; with<br>
&gt;&gt;&gt;&gt;&gt;&gt;&gt; some results. But if Dan is right, and the problem is with enum<br>
&gt;&gt;&gt;&gt;&gt;&gt;&gt; mapping, I<br>
&gt;&gt;&gt;&gt;&gt;&gt;&gt; will get similar results.<br>
&gt;&gt;&gt;&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt;&gt;&gt;&gt; Thanks<br>
&gt;&gt;&gt;&gt;&gt;&gt;&gt; Sebastian<br>
&gt;&gt;&gt;&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt;&gt;&gt;&gt; On Sat, Oct 1, 2016 at 11:53 AM, Dan Berindei &lt;<a href="mailto:dan.berindei@gmail.com">dan.berindei@gmail.com</a>&gt;<br>
&gt;&gt;&gt;&gt;&gt;&gt;&gt; wrote:<br>
&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt; On Fri, Sep 30, 2016 at 10:15 PM, David M. Lloyd<br>
&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt; &lt;<a href="mailto:david.lloyd@redhat.com">david.lloyd@redhat.com</a>&gt;<br>
&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt; wrote:<br>
&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt; The performance problem that this trick is meant to resolve is<br>
&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt; really a<br>
&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt; problem in the logging backend.  It *should* be faster inside of<br>
&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt; WildFly, where JBoss LogManager is used, because that project just<br>
&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt; checks a single volatile field for the level check... and the path<br>
&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt; to<br>
&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt; that code *should* be inline-friendly.<br>
&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt; Indeed, we started using this trick because of log4j 1.2, which needs<br>
&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt; to walk the logger hierarchy in order to check the level, and it made<br>
&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt; a significant difference there.<br>
&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt; Nowadays I think it&#39;s pretty close to optimal in all logging<br>
&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt; frameworks. The only nitpick is that they all use enums for the<br>
&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt; levels, and the JIT can&#39;t inline Level.TRACE.value as it would with a<br>
&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt; Level.TRACE_VALUE int constant. If JDK9 fixes that, then it&#39;s going<br>
&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt; to<br>
&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt; be more or less equivalent to using a volatile &quot;trace&quot; field in each<br>
&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt; class, so it should be suitable even for local read operations that<br>
&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt; take &lt; 200ns.<br>
&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt; We&#39;d probably still need to weed out some of the trace messages, as<br>
&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt; we<br>
&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt; probably have more than 10 of them during such a read operation. I<br>
&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt; confess that I added way too many trace logs myself, precisely<br>
&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt; because<br>
&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt; I knew we are using a static final field and the JIT compiler doesn&#39;t<br>
&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt; even generate code for that branch.<br>
&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt; Cheers<br>
&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt; Dan<br>
&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt; ______________________________<wbr>_________________<br>
&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt; infinispan-dev mailing list<br>
&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt; <a href="mailto:infinispan-dev@lists.jboss.org">infinispan-dev@lists.jboss.org</a><br>
&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt; <a href="https://lists.jboss.org/mailman/listinfo/infinispan-dev" rel="noreferrer" target="_blank">https://lists.jboss.org/<wbr>mailman/listinfo/infinispan-<wbr>dev</a><br>
&gt;&gt;&gt;&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt;&gt;&gt; ______________________________<wbr>_________________<br>
&gt;&gt;&gt;&gt;&gt;&gt; infinispan-dev mailing list<br>
&gt;&gt;&gt;&gt;&gt;&gt; <a href="mailto:infinispan-dev@lists.jboss.org">infinispan-dev@lists.jboss.org</a><br>
&gt;&gt;&gt;&gt;&gt;&gt; <a href="https://lists.jboss.org/mailman/listinfo/infinispan-dev" rel="noreferrer" target="_blank">https://lists.jboss.org/<wbr>mailman/listinfo/infinispan-<wbr>dev</a><br>
&gt;&gt;&gt;&gt;&gt; ______________________________<wbr>_________________<br>
&gt;&gt;&gt;&gt;&gt; infinispan-dev mailing list<br>
&gt;&gt;&gt;&gt;&gt; <a href="mailto:infinispan-dev@lists.jboss.org">infinispan-dev@lists.jboss.org</a><br>
&gt;&gt;&gt;&gt;&gt; <a href="https://lists.jboss.org/mailman/listinfo/infinispan-dev" rel="noreferrer" target="_blank">https://lists.jboss.org/<wbr>mailman/listinfo/infinispan-<wbr>dev</a><br>
&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt; ______________________________<wbr>_________________<br>
&gt;&gt;&gt;&gt; infinispan-dev mailing list<br>
&gt;&gt;&gt;&gt; <a href="mailto:infinispan-dev@lists.jboss.org">infinispan-dev@lists.jboss.org</a><br>
&gt;&gt;&gt;&gt; <a href="https://lists.jboss.org/mailman/listinfo/infinispan-dev" rel="noreferrer" target="_blank">https://lists.jboss.org/<wbr>mailman/listinfo/infinispan-<wbr>dev</a><br>
&gt;&gt;&gt;<br>
&gt;&gt;&gt; ______________________________<wbr>_________________<br>
&gt;&gt;&gt; infinispan-dev mailing list<br>
&gt;&gt;&gt; <a href="mailto:infinispan-dev@lists.jboss.org">infinispan-dev@lists.jboss.org</a><br>
&gt;&gt;&gt; <a href="https://lists.jboss.org/mailman/listinfo/infinispan-dev" rel="noreferrer" target="_blank">https://lists.jboss.org/<wbr>mailman/listinfo/infinispan-<wbr>dev</a><br>
&gt;&gt; ______________________________<wbr>_________________<br>
&gt;&gt; infinispan-dev mailing list<br>
&gt;&gt; <a href="mailto:infinispan-dev@lists.jboss.org">infinispan-dev@lists.jboss.org</a><br>
&gt;&gt; <a href="https://lists.jboss.org/mailman/listinfo/infinispan-dev" rel="noreferrer" target="_blank">https://lists.jboss.org/<wbr>mailman/listinfo/infinispan-<wbr>dev</a><br>
&gt;<br>
&gt;<br>
<br>
______________________________<wbr>_________________<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" rel="noreferrer" target="_blank">https://lists.jboss.org/<wbr>mailman/listinfo/infinispan-<wbr>dev</a></div></div></blockquote></div><br></div>