<div dir="ltr"><br><br><div class="gmail_quote"><div dir="ltr">On Wed, May 30, 2018 at 5:00 PM Radim Vansa &lt;<a href="mailto:rvansa@redhat.com">rvansa@redhat.com</a>&gt; wrote:<br></div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">On 05/30/2018 02:53 PM, Sanne Grinovero wrote:<br>
&gt; On 30 May 2018 at 13:26, Adrian Nistor &lt;<a href="mailto:anistor@redhat.com" target="_blank">anistor@redhat.com</a>&gt; wrote:<br>
&gt;&gt; Yest, the client needs that hash but that does not necessarily mean it<br>
&gt;&gt; has to compute it itself.<br>
&gt;&gt; The hash should be applied to the storage format which might be<br>
&gt;&gt; different from the format the client sees. So hash computation could be<br>
&gt;&gt; done on the server, just a thought.<br>
&gt; Unless we want to explore some form of hybrid gRPC which benefits from<br>
&gt; Hot Rod intelligence level 3?<br>
<br>
Since Tristan said that gRPC is viable only if the performance is <br>
comparable - I concluded that this involves the smart routing. I was <br>
hoping that gRPC networking layer would provide some hook to specify the <br>
destination. </blockquote><div><br></div><div>It does, via SubchannelPicker implementations. It requires key to be sent as HTTP header down the stack so that the SubchannelPicker can extract it.</div><div><br></div><div>SubchannelPicker impl can then apply hash on it and decide based on available channels.</div><div> </div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">An alternative would be a proxy hosted on the same node <br>
that would do the routing. </blockquote><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
<br>
If we&#39;re to replace Hot Rod I was expecting the (generated) gRPC client <br>
to be extensible enough to allow us add client-side features (like near <br>
cache, maybe listeners would need client-side code too) but saving us <br>
most of the hassle with networking and parsing, while providing basic <br>
client in languages we don&#39;t embrace without additional cost.<br>
<br>
R.<br>
<br>
&gt;<br>
&gt; In which case the client will need to compute the hash before it can<br>
&gt; hint the network layer were to connect to.<br>
&gt;<br>
&gt; Thanks,<br>
&gt; Sanne<br>
&gt;<br>
&gt;&gt; On 05/30/2018 02:47 PM, Radim Vansa wrote:<br>
&gt;&gt;&gt; On 05/30/2018 12:46 PM, Adrian Nistor wrote:<br>
&gt;&gt;&gt;&gt; Thanks for clarifying this Galder.<br>
&gt;&gt;&gt;&gt; Yes, the network layer is indeed the culprit and the purpose of this<br>
&gt;&gt;&gt;&gt; experiment.<br>
&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt; What is the approach you envision regarding the IDL? Should we strive<br>
&gt;&gt;&gt;&gt; for a pure IDL definition of the service? That could be an interesting<br>
&gt;&gt;&gt;&gt; approach that would make it possible for a third party to generate<br>
&gt;&gt;&gt;&gt; their own infinispan grpc client in any new language that we do not<br>
&gt;&gt;&gt;&gt; already offer support, just based on the IDL. And maybe using a<br>
&gt;&gt;&gt;&gt; different grpc implementation if they do not find suitable the one<br>
&gt;&gt;&gt;&gt; from google.<br>
&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt; I was not suggesting we should do type transformation or anything on<br>
&gt;&gt;&gt;&gt; the client side that would require an extra layer of code on top of<br>
&gt;&gt;&gt;&gt; what grpc generates for the client, so maybe a pure IDL based service<br>
&gt;&gt;&gt;&gt; definition would indeed be possible, without extra helpers. No type<br>
&gt;&gt;&gt;&gt; transformation, just type information. Exposing the type info that<br>
&gt;&gt;&gt;&gt; comes from the server would be enough, a lot better than dumbing<br>
&gt;&gt;&gt;&gt; everything down to a byte[].<br>
&gt;&gt;&gt; I may be wrong but key transformation on client is necessary for correct<br>
&gt;&gt;&gt; hash-aware routing, isn&#39;t it? We need to get byte array for each key and<br>
&gt;&gt;&gt; apply murmur hash there (IIUC even when we use protobuf as the storage<br>
&gt;&gt;&gt; format, segment is based on the raw protobuf bytes, right?).<br>
&gt;&gt;&gt;<br>
&gt;&gt;&gt; Radim<br>
&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt; Adrian<br>
&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt; On 05/30/2018 12:16 PM, Galder Zamarreno wrote:<br>
&gt;&gt;&gt;&gt;&gt; On Tue, May 29, 2018 at 8:57 PM Adrian Nistor &lt;<a href="mailto:anistor@redhat.com" target="_blank">anistor@redhat.com</a><br>
&gt;&gt;&gt;&gt;&gt; &lt;mailto:<a href="mailto:anistor@redhat.com" target="_blank">anistor@redhat.com</a>&gt;&gt; wrote:<br>
&gt;&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt;&gt;       Vittorio, a few remarks regarding your statement &quot;...The<br>
&gt;&gt;&gt;&gt;&gt;       alternative to this is to develop a protostream equivalent for<br>
&gt;&gt;&gt;&gt;&gt;       each supported language and it doesn&#39;t seem really feasible to me.&quot;<br>
&gt;&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt;&gt;       No way! That&#39;s a big misunderstanding. We do not need to<br>
&gt;&gt;&gt;&gt;&gt;       re-implement the protostream library in C/C++/C# or any new<br>
&gt;&gt;&gt;&gt;&gt;       supported language.<br>
&gt;&gt;&gt;&gt;&gt;       Protostream is just for Java and it is compatible with Google&#39;s<br>
&gt;&gt;&gt;&gt;&gt;       protobuf lib we already use in the other clients. We can continue<br>
&gt;&gt;&gt;&gt;&gt;       using Google&#39;s protobuf lib for these clients, with or without gRPC.<br>
&gt;&gt;&gt;&gt;&gt;       Protostream does not handle protobuf services as gRPC does, but<br>
&gt;&gt;&gt;&gt;&gt;       we can add support for that with little effort.<br>
&gt;&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt;&gt;       The real problem here is if we want to replace our hot rod<br>
&gt;&gt;&gt;&gt;&gt;       invocation protocol with gRPC to save on the effort of<br>
&gt;&gt;&gt;&gt;&gt;       implementing and maintaining hot rod in all those clients. I<br>
&gt;&gt;&gt;&gt;&gt;       wonder why the obvious question is being avoided in this thread.<br>
&gt;&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt;&gt; ^ It is not being avoided. I stated it quite clearly when I replied<br>
&gt;&gt;&gt;&gt;&gt; but maybe not with enough detail. So, I said:<br>
&gt;&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt;&gt;&gt;    The biggest problem I see in our client/server architecture is the<br>
&gt;&gt;&gt;&gt;&gt; ability to quickly deliver features/APIs across multiple language<br>
&gt;&gt;&gt;&gt;&gt; clients. Both Vittorio and I have seen how long it takes to implement<br>
&gt;&gt;&gt;&gt;&gt; all the different features available in Java client and port them to<br>
&gt;&gt;&gt;&gt;&gt; Node.js, C/C++/C#...etc. This effort lead by Vittorio is trying to<br>
&gt;&gt;&gt;&gt;&gt; improve on that by having some of that work done for us. Granted, not<br>
&gt;&gt;&gt;&gt;&gt; all of it will be done, but it should give us some good foundations<br>
&gt;&gt;&gt;&gt;&gt; on which to build.<br>
&gt;&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt;&gt; To expand on it a bit further: the reason it takes us longer to get<br>
&gt;&gt;&gt;&gt;&gt; different features in is because each client implements its own<br>
&gt;&gt;&gt;&gt;&gt; network layer, parses the protocol and does type transformations<br>
&gt;&gt;&gt;&gt;&gt; (between byte[] and whatever the client expects).<br>
&gt;&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt;&gt; IMO, the most costly things there are getting the network layer right<br>
&gt;&gt;&gt;&gt;&gt; (from experience with Node.js, it has taken a while to do so) and<br>
&gt;&gt;&gt;&gt;&gt; parsing work (not only parsing itself, but doing it in a efficient<br>
&gt;&gt;&gt;&gt;&gt; way). Network layer also includes load balancing, failover, cluster<br>
&gt;&gt;&gt;&gt;&gt; failover...etc.<br>
&gt;&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt;&gt;   From past experience, transforming from byte[] to what the client<br>
&gt;&gt;&gt;&gt;&gt; expects has never really been very problematic for me. What&#39;s been<br>
&gt;&gt;&gt;&gt;&gt; difficult here is coming up with encoding architecture that Gustavo<br>
&gt;&gt;&gt;&gt;&gt; lead, whose aim was to improve on the initial compatibility mode.<br>
&gt;&gt;&gt;&gt;&gt; But, with that now clear, understood and proven to solve our issues,<br>
&gt;&gt;&gt;&gt;&gt; the rest in this area should be fairly straightforward IMO.<br>
&gt;&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt;&gt; Type transformation, once done, is a constant. As we add more Hot Rod<br>
&gt;&gt;&gt;&gt;&gt; operations, it&#39;s mostly the parsing that starts to become more work.<br>
&gt;&gt;&gt;&gt;&gt; Network can also become more work if instead of RPC commands you<br>
&gt;&gt;&gt;&gt;&gt; start supporting streams based commands.<br>
&gt;&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt;&gt; gRPC solves the network (FYI: with key as HTTP header and<br>
&gt;&gt;&gt;&gt;&gt; SubchannelPicker you can do hash-aware routing) and parsing for us. I<br>
&gt;&gt;&gt;&gt;&gt; don&#39;t see the need for it to solve our type transformations for us.<br>
&gt;&gt;&gt;&gt;&gt; If it does it, great, but does it support our compatibility<br>
&gt;&gt;&gt;&gt;&gt; requirements? (I had already told Vittorio to check Gustavo on this).<br>
&gt;&gt;&gt;&gt;&gt; Type transformation is a lower prio for me, network and parsing are<br>
&gt;&gt;&gt;&gt;&gt; more important.<br>
&gt;&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt;&gt; Hope this clarifies better my POV.<br>
&gt;&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt;&gt; Cheers<br>
&gt;&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt;&gt;       Adrian<br>
&gt;&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt;&gt;       On 05/29/2018 03:45 PM, Vittorio Rigamonti wrote:<br>
&gt;&gt;&gt;&gt;&gt;&gt;       Thanks Adrian,<br>
&gt;&gt;&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt;&gt;&gt;       of course there&#39;s a marshalling work under the cover and that is<br>
&gt;&gt;&gt;&gt;&gt;&gt;       reflected into the generated code (specially the accessor<br>
&gt;&gt;&gt;&gt;&gt;&gt;       methods generated from the oneof clause).<br>
&gt;&gt;&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt;&gt;&gt;       My opinion is that on the client side this could be accepted, as<br>
&gt;&gt;&gt;&gt;&gt;&gt;       long as the API are well defined and documented: application<br>
&gt;&gt;&gt;&gt;&gt;&gt;       developer can build an adhoc decorator on the top if needed. The<br>
&gt;&gt;&gt;&gt;&gt;&gt;       alternative to this is to develop a protostream equivalent for<br>
&gt;&gt;&gt;&gt;&gt;&gt;       each supported language and it doesn&#39;t seem really feasible to me.<br>
&gt;&gt;&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt;&gt;&gt;       On the server side (java only) the situation is different:<br>
&gt;&gt;&gt;&gt;&gt;&gt;       protobuf is optimized for streaming not for storing so probably<br>
&gt;&gt;&gt;&gt;&gt;&gt;       a Protostream layer is needed.<br>
&gt;&gt;&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt;&gt;&gt;       On Mon, May 28, 2018 at 4:47 PM, Adrian Nistor<br>
&gt;&gt;&gt;&gt;&gt;&gt;       &lt;<a href="mailto:anistor@redhat.com" target="_blank">anistor@redhat.com</a> &lt;mailto:<a href="mailto:anistor@redhat.com" target="_blank">anistor@redhat.com</a>&gt;&gt; wrote:<br>
&gt;&gt;&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt;&gt;&gt;           Hi Vittorio,<br>
&gt;&gt;&gt;&gt;&gt;&gt;           thanks for exploring gRPC. It seems like a very elegant<br>
&gt;&gt;&gt;&gt;&gt;&gt;           solution for exposing services. I&#39;ll have a look at your PoC<br>
&gt;&gt;&gt;&gt;&gt;&gt;           soon.<br>
&gt;&gt;&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt;&gt;&gt;           I feel there are some remarks that need to be made regarding<br>
&gt;&gt;&gt;&gt;&gt;&gt;           gRPC. gRPC is just some nice cheesy topping on top of<br>
&gt;&gt;&gt;&gt;&gt;&gt;           protobuf. Google&#39;s implementation of protobuf, to be more<br>
&gt;&gt;&gt;&gt;&gt;&gt;           precise.<br>
&gt;&gt;&gt;&gt;&gt;&gt;           It does not need handwritten marshallers, but the &#39;No need<br>
&gt;&gt;&gt;&gt;&gt;&gt;           for marshaller&#39; does not accurately describe it. Marshallers<br>
&gt;&gt;&gt;&gt;&gt;&gt;           are needed and are generated under the cover by the library<br>
&gt;&gt;&gt;&gt;&gt;&gt;           and so are the data objects and you are unfortunately forced<br>
&gt;&gt;&gt;&gt;&gt;&gt;           to use them. That&#39;s both the good news and the bad news:)<br>
&gt;&gt;&gt;&gt;&gt;&gt;           The whole thing looks very promising and friendly for many<br>
&gt;&gt;&gt;&gt;&gt;&gt;           uses cases, especially for demos and PoCs :))). Nobody wants<br>
&gt;&gt;&gt;&gt;&gt;&gt;           to write those marshallers. But it starts to become a<br>
&gt;&gt;&gt;&gt;&gt;&gt;           nuisance if you want to use your own data objects.<br>
&gt;&gt;&gt;&gt;&gt;&gt;           There is also the ugliness and excessive memory footprint of<br>
&gt;&gt;&gt;&gt;&gt;&gt;           the generated code, which is the reason Infinispan did not<br>
&gt;&gt;&gt;&gt;&gt;&gt;           adopt the protobuf-java library although it did adopt<br>
&gt;&gt;&gt;&gt;&gt;&gt;           protobuf as an encoding format.<br>
&gt;&gt;&gt;&gt;&gt;&gt;           The Protostream library was created as an alternative<br>
&gt;&gt;&gt;&gt;&gt;&gt;           implementation to solve the aforementioned problems with the<br>
&gt;&gt;&gt;&gt;&gt;&gt;           generated code. It solves this by letting the user provide<br>
&gt;&gt;&gt;&gt;&gt;&gt;           their own data objects. And for the marshallers it gives you<br>
&gt;&gt;&gt;&gt;&gt;&gt;           two options: a) write the marshaller yourself (hated), b)<br>
&gt;&gt;&gt;&gt;&gt;&gt;           annotated your data objects and the marshaller gets<br>
&gt;&gt;&gt;&gt;&gt;&gt;           generated (loved). Protostream does not currently support<br>
&gt;&gt;&gt;&gt;&gt;&gt;           service definitions right now but this is something I<br>
&gt;&gt;&gt;&gt;&gt;&gt;           started to investigate recently after Galder asked me if I<br>
&gt;&gt;&gt;&gt;&gt;&gt;           think it&#39;s doable. I think I&#39;ll only find out after I do it:)<br>
&gt;&gt;&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt;&gt;&gt;           Adrian<br>
&gt;&gt;&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt;&gt;&gt;           On 05/28/2018 04:15 PM, Vittorio Rigamonti wrote:<br>
&gt;&gt;&gt;&gt;&gt;&gt;&gt;           Hi Infinispan developers,<br>
&gt;&gt;&gt;&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt;&gt;&gt;&gt;           I&#39;m working on a solution for developers who need to access<br>
&gt;&gt;&gt;&gt;&gt;&gt;&gt;           Infinispan services  through different programming languages.<br>
&gt;&gt;&gt;&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt;&gt;&gt;&gt;           The focus is not on developing a full featured client, but<br>
&gt;&gt;&gt;&gt;&gt;&gt;&gt;           rather discover the value and the limits of this approach.<br>
&gt;&gt;&gt;&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt;&gt;&gt;&gt;           - is it possible to automatically generate useful clients<br>
&gt;&gt;&gt;&gt;&gt;&gt;&gt;           in different languages?<br>
&gt;&gt;&gt;&gt;&gt;&gt;&gt;           - can that clients interoperate on the same cache with the<br>
&gt;&gt;&gt;&gt;&gt;&gt;&gt;           same data types?<br>
&gt;&gt;&gt;&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt;&gt;&gt;&gt;           I came out with a small prototype that I would like to<br>
&gt;&gt;&gt;&gt;&gt;&gt;&gt;           submit to you and on which I would like to gather your<br>
&gt;&gt;&gt;&gt;&gt;&gt;&gt;           impressions.<br>
&gt;&gt;&gt;&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt;&gt;&gt;&gt;            You can found the project here [1]: is a gRPC-based<br>
&gt;&gt;&gt;&gt;&gt;&gt;&gt;           client/server architecture for Infinispan based on and<br>
&gt;&gt;&gt;&gt;&gt;&gt;&gt;           EmbeddedCache, with very few features exposed atm.<br>
&gt;&gt;&gt;&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt;&gt;&gt;&gt;           Currently the project is nothing more than a poc with the<br>
&gt;&gt;&gt;&gt;&gt;&gt;&gt;           following interesting features:<br>
&gt;&gt;&gt;&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt;&gt;&gt;&gt;           - client can be generated in all the grpc supported<br>
&gt;&gt;&gt;&gt;&gt;&gt;&gt;           language: java, go, c++ examples are provided;<br>
&gt;&gt;&gt;&gt;&gt;&gt;&gt;           - the interface is full typed. No need for marshaller and<br>
&gt;&gt;&gt;&gt;&gt;&gt;&gt;           clients build in different language can cooperate on the<br>
&gt;&gt;&gt;&gt;&gt;&gt;&gt;           same cache;<br>
&gt;&gt;&gt;&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt;&gt;&gt;&gt;           The second item is my preferred one beacuse it frees the<br>
&gt;&gt;&gt;&gt;&gt;&gt;&gt;           developer from data marshalling.<br>
&gt;&gt;&gt;&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt;&gt;&gt;&gt;           What do you think about?<br>
&gt;&gt;&gt;&gt;&gt;&gt;&gt;           Sounds interesting?<br>
&gt;&gt;&gt;&gt;&gt;&gt;&gt;           Can you see any flaw?<br>
&gt;&gt;&gt;&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt;&gt;&gt;&gt;           There&#39;s also a list of issues for the future [2], basically<br>
&gt;&gt;&gt;&gt;&gt;&gt;&gt;           I would like to investigate these questions:<br>
&gt;&gt;&gt;&gt;&gt;&gt;&gt;           How far this architecture can go?<br>
&gt;&gt;&gt;&gt;&gt;&gt;&gt;           Topology, events, queries... how many of the Infinispan<br>
&gt;&gt;&gt;&gt;&gt;&gt;&gt;           features can be fit in a grpc architecture?<br>
&gt;&gt;&gt;&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt;&gt;&gt;&gt;           Thank you<br>
&gt;&gt;&gt;&gt;&gt;&gt;&gt;           Vittorio<br>
&gt;&gt;&gt;&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt;&gt;&gt;&gt;           [1] <a href="https://github.com/rigazilla/ispn-grpc" rel="noreferrer" target="_blank">https://github.com/rigazilla/ispn-grpc</a><br>
&gt;&gt;&gt;&gt;&gt;&gt;&gt;           [2] <a href="https://github.com/rigazilla/ispn-grpc/issues" rel="noreferrer" target="_blank">https://github.com/rigazilla/ispn-grpc/issues</a><br>
&gt;&gt;&gt;&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt;&gt;&gt;&gt;           --<br>
&gt;&gt;&gt;&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt;&gt;&gt;&gt;           Vittorio Rigamonti<br>
&gt;&gt;&gt;&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt;&gt;&gt;&gt;           Senior Software Engineer<br>
&gt;&gt;&gt;&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt;&gt;&gt;&gt;           Red Hat<br>
&gt;&gt;&gt;&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt;&gt;&gt;&gt;           &lt;<a href="https://www.redhat.com" rel="noreferrer" target="_blank">https://www.redhat.com</a>&gt;<br>
&gt;&gt;&gt;&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt;&gt;&gt;&gt;           Milan, Italy<br>
&gt;&gt;&gt;&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt;&gt;&gt;&gt;           <a href="mailto:vrigamon@redhat.com" target="_blank">vrigamon@redhat.com</a> &lt;mailto:<a href="mailto:vrigamon@redhat.com" target="_blank">vrigamon@redhat.com</a>&gt;<br>
&gt;&gt;&gt;&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt;&gt;&gt;&gt;           irc: rigazilla<br>
&gt;&gt;&gt;&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt;&gt;&gt;&gt;           &lt;<a href="https://red.ht/sig" rel="noreferrer" target="_blank">https://red.ht/sig</a>&gt;<br>
&gt;&gt;&gt;&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt;&gt;&gt;&gt;           _______________________________________________<br>
&gt;&gt;&gt;&gt;&gt;&gt;&gt;           infinispan-dev mailing list<br>
&gt;&gt;&gt;&gt;&gt;&gt;&gt;           <a href="mailto:infinispan-dev@lists.jboss.org" target="_blank">infinispan-dev@lists.jboss.org</a><br>
&gt;&gt;&gt;&gt;&gt;&gt;&gt;           &lt;mailto:<a href="mailto:infinispan-dev@lists.jboss.org" target="_blank">infinispan-dev@lists.jboss.org</a>&gt;<br>
&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/mailman/listinfo/infinispan-dev</a><br>
&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;       --<br>
&gt;&gt;&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt;&gt;&gt;       Vittorio Rigamonti<br>
&gt;&gt;&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt;&gt;&gt;       Senior Software Engineer<br>
&gt;&gt;&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt;&gt;&gt;       Red Hat<br>
&gt;&gt;&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt;&gt;&gt;       &lt;<a href="https://www.redhat.com" rel="noreferrer" target="_blank">https://www.redhat.com</a>&gt;<br>
&gt;&gt;&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt;&gt;&gt;       Milan, Italy<br>
&gt;&gt;&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt;&gt;&gt;       <a href="mailto:vrigamon@redhat.com" target="_blank">vrigamon@redhat.com</a> &lt;mailto:<a href="mailto:vrigamon@redhat.com" target="_blank">vrigamon@redhat.com</a>&gt;<br>
&gt;&gt;&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt;&gt;&gt;       irc: rigazilla<br>
&gt;&gt;&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt;&gt;&gt;       &lt;<a href="https://red.ht/sig" rel="noreferrer" target="_blank">https://red.ht/sig</a>&gt;<br>
&gt;&gt;&gt;&gt;&gt;       _______________________________________________<br>
&gt;&gt;&gt;&gt;&gt;       infinispan-dev mailing list<br>
&gt;&gt;&gt;&gt;&gt;       <a href="mailto:infinispan-dev@lists.jboss.org" target="_blank">infinispan-dev@lists.jboss.org</a><br>
&gt;&gt;&gt;&gt;&gt;       &lt;mailto:<a href="mailto:infinispan-dev@lists.jboss.org" target="_blank">infinispan-dev@lists.jboss.org</a>&gt;<br>
&gt;&gt;&gt;&gt;&gt;       <a href="https://lists.jboss.org/mailman/listinfo/infinispan-dev" rel="noreferrer" target="_blank">https://lists.jboss.org/mailman/listinfo/infinispan-dev</a><br>
&gt;&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt;&gt; _______________________________________________<br>
&gt;&gt;&gt;&gt;&gt; infinispan-dev mailing list<br>
&gt;&gt;&gt;&gt;&gt; <a href="mailto:infinispan-dev@lists.jboss.org" target="_blank">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/mailman/listinfo/infinispan-dev</a><br>
&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt; _______________________________________________<br>
&gt;&gt;&gt;&gt; infinispan-dev mailing list<br>
&gt;&gt;&gt;&gt; <a href="mailto:infinispan-dev@lists.jboss.org" target="_blank">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/mailman/listinfo/infinispan-dev</a><br>
&gt;&gt; _______________________________________________<br>
&gt;&gt; infinispan-dev mailing list<br>
&gt;&gt; <a href="mailto:infinispan-dev@lists.jboss.org" target="_blank">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/mailman/listinfo/infinispan-dev</a><br>
<br>
<br>
-- <br>
Radim Vansa &lt;<a href="mailto:rvansa@redhat.com" target="_blank">rvansa@redhat.com</a>&gt;<br>
JBoss Performance Team<br>
<br>
_______________________________________________<br>
infinispan-dev mailing list<br>
<a href="mailto:infinispan-dev@lists.jboss.org" target="_blank">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/mailman/listinfo/infinispan-dev</a><br>
</blockquote></div></div>