Christopher Cobb wrote:
>
> Take the following scenario: three systems are participating in a
> two-phases commit. All three systems pass phase 1 and agree to commit.
> Then phase two begins. System 1 commits. System 2 commits. But system
> three has crashed and does not commit.
>
> The two-phased commit is broken.
Christopher,
I think you are ignoring the requirement that the participation in the
two phase commit be logged. That is, the decision by each participant
to commit, is logged. Then, as part of the recovery protocol, these logs
must be checked by System 3. System 3 will check its logs (and/or the
TM's logs) and discover that it agreed to commit, and will do so (note
that System 3 also had to log the work needed to commit, which was done
before it voted to commit in the prepare phase).
So, yes, while System 3 is non-operable, you could consider the 2PC
"broken", but as soon as System 3 does recover, it will commit, and
the 2PC is "fixed".
At least, that's how it is supposed to work, and how it does work with
our products. Unfortunately, some of the major JDBC drivers on the
market are a little lacking in the area of recovery, so this may not
all be working at present with some databases. But please note that
the 2PC protocol is not itself broken, just certain implementations
of it.
-jkw
===========================================================================
To unsubscribe, send email to [EMAIL PROTECTED] and include in the body
of the message "signoff EJB-INTEREST". For general help, send email to
[EMAIL PROTECTED] and include in the body of the message "help".