Doug,
The changes you note below seems quite reasonable and correct.
If there are no objections, I will update the scenarios doc to
reflect the changes below.
On why PS1 is used: During the last F2F one of the members
mentioned that there be at least 2 participants in this scenario.
Thank you.
From: Doug Davis
[mailto:dug@us.ibm.com]
Sent: Tuesday, June 27, 2006 2:05 PM
To: ws-tx@lists.oasis-open.org
Subject: [ws-tx] Interop scenario doc - scenario 5.1
For scenario
5.1 ReplayCommit it current shows this flow:
Initialization
IA sends an
application message tns:ReplayCommit request to PA containing
CoordinationContext.
PA registers
PS1 and PS2 with CS for a Durable2PC protocol.
PA responds
with an application reply tns:Response.
Message
Exchange
(IA initiates Commit)
- CS
sends Durable2PC::Prepare to PS1
- PS1
sends Durable2PC::Prepared to CS
- CS
sends Durable2PC::Prepare to PS2
- PS2
sends Durable2PC::Prepared to CS
- CS
sends Durable2PC:Commit to PS1
- PS1
sends Durable2PC::Committed to CS
- CS
sends Durable2PC::Commit to PS2
(CS commits the transaction. PS2 suffers from internal failure)
- Upon
recovery, PS2 sends 2PC::Prepared to CS
- CS
re-sends Durable2PC::Commit to PS2
- PS2
sends Durable2PC::Committed to CS
I believe this
is wrong.
1 - The
"(CS commits the transaction)" should come after step 10 - meaning
the Coordinator should not exit the "Committing" stage until it
receives Committed from all of the participants
2 - Something
should block resent "Commit" messages from the Coordinator (if any)
until PS2 has a chance to resend its "Prepared" message - since the
point of the test is how the Coordinator deals with extra Prepared messages
while in the Committing stage.
Not sure who
has the pen but i think we should update the doc to correct this - something
like:
- CS
sends Durable2PC::Prepare to PS1
- PS1
sends Durable2PC::Prepared to CS
- CS
sends Durable2PC::Prepare to PS2
- PS2
sends Durable2PC::Prepared to CS
- CS
sends Durable2PC:Commit to PS1
- PS1
sends Durable2PC::Committed to CS
- CS
sends Durable2PC::Commit to PS2
(PS2 suffers from internal failure)
(PA prevents any resent Commit from reaching PS2 - simulating failure)
- Upon
recovery, PS2 sends 2PC::Prepared to CS
- CS
re-sends Durable2PC::Commit to PS2
- PS2
sends Durable2PC::Committed to CS
(CS commits the transaction)
Not sure what
the purpose of PS1 is (and would prefer to remove it) but oh well :-)
thanks
-Doug