[jboss-jira] [JBoss JIRA] Commented: (JGRP-1329) Partial state transfer: add back (revert changes made in 3.0)

Bela Ban (JIRA) jira-events at lists.jboss.org
Wed Jun 15 11:40:30 EDT 2011


    [ https://issues.jboss.org/browse/JGRP-1329?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=12608900#comment-12608900 ] 

Bela Ban commented on JGRP-1329:
--------------------------------

Maybe we won't add partial state transfer back after all:
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

> Partial state transfer: add back (revert changes made in 3.0)
> -------------------------------------------------------------
>
>                 Key: JGRP-1329
>                 URL: https://issues.jboss.org/browse/JGRP-1329
>             Project: JGroups
>          Issue Type: Task
>            Reporter: Bela Ban
>            Assignee: Bela Ban
>             Fix For: 3.0
>
>
> Turns out both Infinispan and JBossAS still do use partial state transfer, so we'll need to revert the removal of partial state transfer in 3.0.

--
This message is automatically generated by JIRA.
For more information on JIRA, see: http://www.atlassian.com/software/jira

        


More information about the jboss-jira mailing list