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