[infinispan-dev] Partial state transfer

Manik Surtani manik at jboss.org
Mon Jun 20 16:02:44 EDT 2011


5.1 is possible, 5.0 would be very tough.

What are the implications for our current implementation on 5.0 though?  State going missing?

On 16 Jun 2011, at 17:56, Bela Ban wrote:

> Correct. Time frame would ideally be 5.0, but realistically it will 
> probably be 5.1. Is that feasible from a roadmap point of view ?
> 
> On 6/16/11 6:47 PM, Vladimir Blagojevic wrote:
>> In another words the essential problem is that digest and channel state
>> are per channel abstractions and they do not fit nicely with higher
>> level abstractions like substates? We use partial state transfer in
>> Infinispan and we need to address this.
>> 
>> What is the time frame here? 5.0 final release?
>> 
>> Vladimir
>> 
>> On 11-06-15 11:39 AM, Bela Ban wrote:
>>> I looked into adding partial state transfer back into JGroups, but found
>>> out that partial state transfer is fundamentally flawed, something I've
>>> always suspected ! (Regular state transfer is correct, and has always
>>> been correct).
>>> 
>>> - Say we have node A and B. B requests the state from A
>>> - There are partial states X and Y
>>> - Message M1 modifies X, M2 modifies Y
>>> 
>>> Here's what happens:
>>> 
>>> T1: A multicasts M1
>>> T2: A delivers M1, and changes X
>>> T3: B sends a GET_STATE("Y") request to A // partial state request
>>> for state Y
>>> T4: A multicasts M2
>>> T5: A delivers M2, changing Y
>>> T6: A receives the GET_STATE request, sends a SET_STATE response back
>>> including Y and the digest (including M1 and M2's seqnos)
>>> T7: B receives the SET_STATE response, sets its digest (includes now M1
>>> and M2) and state Y *BUT NOT* state X !
>>> T8: *** B receives M1, discards it because it is already in its digest
>>> ***
>>> T9: B receives M2, and also discards it
>>> 
>>> 
>>> At time T8, M1 (which would have changed state X) is discarded, because
>>> it is already in the digest sent with the SET_STATE response. Therefore
>>> state X is now incorrect, as M1 was never applied !
>>> 
>>> As a summary, if we get a number of updates to partial states, and don't
>>> receive all of them before requesting the partial state, the last update
>>> includes in the digest wins...
>>> 
>>> I'm a real idiot, as I've written this down before, in 2006: see [1] for
>>> details.
>>> 
>>> In a nutshell, [1] shows that partial state transfer doesn't work,
>>> unless virtual synchrony (FLUSH) is used.
>>> 
>>> So I propose Infinispan and JBoss AS look into how they can replace
>>> their use of partial state transfer. I suggest Infinispan uses the same
>>> approach already used for state transfer with mode=distribution.
>>> 
>>> Opinions ?
>>> 
>>> [1]
>>> https://github.com/belaban/JGroups/blob/master/doc/design/PartialStateTransfer.txt
>>> 
>>> 
>> 
> 
> -- 
> Bela Ban
> Lead JGroups / Clustering Team
> JBoss
> _______________________________________________
> infinispan-dev mailing list
> infinispan-dev at lists.jboss.org
> https://lists.jboss.org/mailman/listinfo/infinispan-dev

--
Manik Surtani
manik at jboss.org
twitter.com/maniksurtani

Lead, Infinispan
http://www.infinispan.org






More information about the infinispan-dev mailing list