CCR provides services
Figure
shows normal use of the services provided by
CCR, labeled with client or server to indicate which side of
the communication connection uses that service. The point of the
tree-shaped sequence of actions is to show that from the time C-BEGIN is
issued until the interaction ends, only a limited number of
results are possible. In particular, either the atomic action is
carried out or no effect of the action occurs. The loop back to sending
C-COMMIT is needed to account for the possibility of a failure at the
server after it issues C-READY. Keep in mind that more than one server
might be involved in the transaction. If the client requires that all
the servers participate in the transaction, then receiving one
C-REFUSE will cause the server to issue C-ROLLBACK to all the servers
that sent C-READY. The server that sent C-REFUSE does not need
C-ROLLBACK, since it has already declined to participate. C-REFUSE is
needed to tell other servers to cancel the transaction.
CCR provides services
Figure
shows normal use of the services provided by
CCR, labeled with client or server to indicate which side of
the communication connection uses that service. The point of the
tree-shaped sequence of actions is to show that from the time C-BEGIN is
issued until the interaction ends, only a limited number of
results are possible. In particular, either the atomic action is
carried out or no effect of the action occurs. The loop back to sending
C-COMMIT is needed to account for the possibility of a failure at the
server after it issues C-READY. Keep in mind that more than one server
might be involved in the transaction. If the client requires that all
the servers participate in the transaction, then receiving one
C-REFUSE will cause the server to issue C-ROLLBACK to all the servers
that sent C-READY. The server that sent C-REFUSE does not need
C-ROLLBACK, since it has already declined to participate. C-REFUSE is
needed to tell other servers to cancel the transaction.
Used by
C-READY Client
|
|
|
V
C-PREPARE Client
/\
/ \
/ \
/ \
C-READY C-REFUSE Server
(from all) (from at least one)
| | \
| _ | \
| | \ | \
V V \ V \
C-COMMIT \ C-ROLLBACK \ Client
/\ \ (to servers that \
/ \ \ sent C-READY) |
/ \ \ | |
/ \ \ | |
C-COMMIT.conf no ^ | |
arrives C-COMMIT.conf | v v
| arrives | transaction not performed
| | |
| |------->>|
V
transaction complete
An example of a transaction involving more than one server process
appears in Figure
. Bank C, the client, initiates a
transfer from an account in Bank A to Bank B. Clearly, either both
banks A and B must complete their portions of the transaction, or
neither must do its part if the accounts are to remain in a consistent
and correct state. The figure shows a successful transfer of funds.
Figure
shows a failure to complete the
transaction, but a final correct balance (excluding the desired
transfer) remaining in both accounts. Since Bank A has no direct
knowledge of Bank B's involvement in the transaction, Bank C must issue
C-ROLLBACK to tell Band A to cancel the transaction.
Figure: Multiple servers participate in a transaction
Figure: Cancelling a failed transaction
An example of a transaction involving more than one server process
appears in Figure
. Bank C, the client, initiates a
transfer from an account in Bank A to Bank B. Clearly, either both
banks A and B must complete their portions of the transaction, or
neither must do its part if the accounts are to remain in a consistent
and correct state. The figure shows a successful transfer of funds.
Figure
shows a failure to complete the
transaction, but a final correct balance (excluding the desired
transfer) remaining in both accounts. Since Bank A has no direct
knowledge of Bank B's involvement in the transaction, Bank C must issue
C-ROLLBACK to tell Band A to cancel the transaction.
Figure: Multiple servers participate in a transaction
Figure: Cancelling a failed transaction