[infinispan-dev] Partial state transfer

Vladimir Blagojevic vblagoje at redhat.com
Thu Jun 16 12:47:01 EDT 2011


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
>



More information about the infinispan-dev mailing list