Forgot to send to the list :)<br><br><br>---------- Forwarded message ----------<br>From: Dan Berindei &lt;<a href="mailto:dan.berindei@gmail.com">dan.berindei@gmail.com</a>&gt;<br>Date: Tue, May 15, 2012 at 7:41 PM<br>Subject: Re: Backward compatibility and rolling upgrades<br>
To: Manik Surtani &lt;<a href="mailto:manik@jboss.org">manik@jboss.org</a>&gt;<br><br><br>On Tue, May 15, 2012 at 4:31 PM, Manik Surtani &lt;<a href="mailto:manik@jboss.org">manik@jboss.org</a>&gt; wrote:<br>&gt;<br>&gt; On 15 May 2012, at 10:53, Sanne Grinovero wrote:<br>
&gt;<br>&gt;&gt; Since I&#39;ve been long advocating this (thanks Tristan to point it out<br>&gt;&gt; first) I appreciate the strong push from the project lead.<br>&gt;&gt; Still as you say in the first half of the mail this wasn&#39;t supposed to<br>
&gt;&gt; work in previous releases, so why are your 3 points in the end of the<br>&gt;&gt; mail asking specific details to migrate from 4.2 ?<br>&gt;<br>&gt; Because we (Red Hat services) would need to provide a ramp-up to getting people already using 4.2 onto JDG (based on 5.1) without any downtime.  Granted, Red Hat services will charge for this, we still need to be able to help them out with building such a tool.<br>
&gt;<br>&gt;&gt; It&#39;s too late to bridge for existing versions, you can&#39;t even patch<br>&gt;&gt; them as people running them are already running them.. unless you<br>&gt;&gt; intend to make intermediate releases, such as a &quot;4.2/5.1&quot; specific<br>
&gt;&gt; release.<br>&gt;<br>&gt; I was thinking perhaps a 5.1.Compat release which can parse and participate in a 4.2-style state transfer, etc.  It would be a case of then upgrading half the cluster to 5.1.Compat, then the other half to full 5.1, and then the first half again to full 5.1.<br>
&gt;<br><br>Manik, I doubt that stock JGroups 3.0.x is binary compatible with<br>JGroups 2.12.x, but we could perhaps copy the protocols from 2.12 to<br>create a 3.0.compat version. When the entire cluster is running<br>5.1.compat, we could close the compat-mode channels all at once and<br>
start new JGroups 3.0 channels. We&#39;d need some kind of &quot;disable state<br>transfer&quot; switch, but it sounds doable.<br><br>OTOH, 4.2 state transfer requires partial state transfer support from<br>JGroups (at least in replicated mode). I&#39;m not sure if Bela can hack<br>
partial state transfer back into 3.0 to support state transfer from<br>4.2 -&gt; 5.1 in replicated mode. For distributed caches I think it may<br>be easier, the 4.2 rehashing code should still work with JGroups 3.0.<br><br>
Even if we do get state transfer working, the nodes then have to<br>interact: 5.1 nodes have to respond to 4.2 commands, and 4.2 nodes<br>have to respond to 5.1 commands. I&#39;m pretty sure we have some<br>incompatibilities, with all the optimization rounds that we had going<br>
on...<br><br>&gt;&gt; Did you see the issues we opened back in Lisbon on JIRA? they are<br>&gt;&gt; supposed to make it possible to perform a rolling upgrade, but need to<br>&gt;&gt; be included in the project *before* as I had already pointed out, to<br>
&gt;&gt; make it possible to migrate to future versions.<br>&gt;&gt;<br>&gt;&gt; All issues are still open, apparently not considered important enough<br>&gt;&gt; :-( see <a href="https://issues.jboss.org/browse/ISPN-1410">https://issues.jboss.org/browse/ISPN-1410</a> and all it&#39;s<br>
&gt;&gt; dependencies.<br>&gt;<br>&gt; I saw this, but I think there are a few bits missing.  From your umbrella JIRA:<br>&gt;<br>&gt; ISPN-1409: why is this necessary?  CacheLoaders use VersionAwareMarshallers which create versioned streams as it is.  So from a serialisation perspective, we should be protected.<br>
&gt;<br><br>Looking at the code of VersionAwareMarshaller, it reads the version id<br>in startObjectInput but it doesn&#39;t do anything with it...<br>Also, how do you register an Externalizer to handle a particular version?<br>
<br>&gt; ISPN-1406: Not sure I understand the purpose of this.  If we&#39;re writing through to a cache store then this happens anyway.<br>&gt;<br><br>Assuming VersionAwareMarshaller does pick the right Externalizer based<br>
on the version id...<br><br>&gt;&gt; As I see it, even JDG customers won&#39;t be able to migrate to newer<br>&gt;&gt; versions since this wasn&#39;t tested and for sure there will be more<br>&gt;&gt; changes needed: I certainly won&#39;t presume our theoretical draft will<br>
&gt;&gt; work flawlessly in practice.<br>&gt;<br>&gt; Yes, this definitely needs work, and more than that, as you say, some real-world migration tests.<br>&gt;<br>&gt;&gt; Also the thread we opened on Flags is relevant (active even today)<br>
&gt;<br>&gt; +1.<br>&gt;<br>&gt; But I&#39;m still very curious about the 3 points I raised in my original email.  :)<br>&gt;<br>