Vous êtes sur la page 1sur 24

Slides for Chapter 17:

Distributed transactions

From Coulouris, Dollimore, Kindberg and


Blair
Distributed Systems:
Concepts and Design
Edition 5, Addison-Wesley 2012
Figure 17.1
Distributed transactions

(a) Flat transaction (b) Nested transactions

M
X
T11

X
Client T1 N
T T 12
Y
T
T
T
21
T2
Client
Y
P
Z
T
22

Instructors Guide for Coulouris, Dollimore, Kindberg and Blair, Distributed Systems: Concepts and Design Edn. 5
Pearson Education 2012
Figure 17.2
Nested banking transaction

X
Client T A a.withdraw(10)
1
T

T = openTransaction Y
openSubTransaction T B b.withdraw(20)
2
a.withdraw(10);
openSubTransaction
b.withdraw(20); Z
openSubTransaction
c.deposit(10); T
3 C c.deposit(10)
openSubTransaction
d.deposit(20); T D d.deposit(20)
4
closeTransaction

Instructors Guide for Coulouris, Dollimore, Kindberg and Blair, Distributed Systems: Concepts and Design Edn. 5
Pearson Education 2012
Figure 17.3
A distributed banking transaction

openTransaction join participant


closeTransaction
A a.withdraw(4);
.
join
BranchX
T
participant
b.withdraw(T, 3);
Client B b.withdraw(3);

T = openTransaction
join BranchY
a.withdraw(4);
c.deposit(4); participant
b.withdraw(3);
d.deposit(3); C c.deposit(4);
closeTransaction
D d.deposit(3);
Note: the coordinator is in one of the servers, e.g. BranchX
BranchZ

Instructors Guide for Coulouris, Dollimore, Kindberg and Blair, Distributed Systems: Concepts and Design Edn. 5
Pearson Education 2012
Figure 17.4
Operations for two-phase commit protocol

canCommit?(trans)-> Yes / No
Call from coordinator to participant to ask whether it can commit a transaction.
Participant replies with its vote.
doCommit(trans)
Call from coordinator to participant to tell participant to commit its part of a
transaction.
doAbort(trans)
Call from coordinator to participant to tell participant to abort its part of a
transaction.
haveCommitted(trans, participant)
Call from participant to coordinator to confirm that it has committed the
transaction.
getDecision(trans) -> Yes / No
Call from participant to coordinator to ask for the decision on a transaction after
it has voted Yes but has still had no reply after some delay. Used to recover from
server crash or delayed messages.

Instructors Guide for Coulouris, Dollimore, Kindberg and Blair, Distributed Systems: Concepts and Design Edn. 5
Pearson Education 2012
Figure 17.5
The two-phase commit protocol

Phase 1 (voting phase):


1. The coordinator sends a canCommit? request to each of the participants in the
transaction.
2. When a participant receives a canCommit? request it replies with its vote (Yes or
No) to the coordinator. Before voting Yes, it prepares to commit by saving objects in
permanent storage. If the vote is No the participant aborts immediately.

Phase 2 (completion according to outcome of vote):


3. The coordinator collects the votes (including its own).
(a) If there are no failures and all the votes are Yes the coordinator decides to commit
the transaction and sends a doCommit request to each of the participants.
(b)Otherwise the coordinator decides to abort the transaction and sends doAbort
requests to all participants that voted Yes.
4. Participants that voted Yes are waiting for a doCommit or doAbort request from the
coordinator. When a participant receives one of these messages it acts accordingly
and in the case of commit, makes a haveCommitted call as confirmation to the
coordinator.

Instructors Guide for Coulouris, Dollimore, Kindberg and Blair, Distributed Systems: Concepts and Design Edn. 5
Pearson Education 2012
Figure 17.6
Communication in two-phase commit protocol

Coordinator Participant

step status step status


canCommit?
1 prepared to commit
(waiting for votes) Yes 2 prepared to commit
3 committed doCommit (uncertain)
haveCommitted 4 committed
done

Instructors Guide for Coulouris, Dollimore, Kindberg and Blair, Distributed Systems: Concepts and Design Edn. 5
Pearson Education 2012
Figure 17.7
Operations in coordinator for nested transactions

openSubTransaction(trans) -> subTrans


Opens a new subtransaction whose parent is trans and
returns a unique subtransaction identifier.

getStatus(trans)-> committed, aborted, provisional


Asks the coordinator to report on the status of the transaction
trans. Returns values representing one of the following:
committed, aborted, provisional.

Instructors Guide for Coulouris, Dollimore, Kindberg and Blair, Distributed Systems: Concepts and Design Edn. 5
Pearson Education 2012
Figure 17.8
Transaction T decides whether to commit

T abort (at M)
11
T1 provisional commit (at X)

T T provisional commit (at N)


12

T21 provisional commit (at N)

T aborted (at Y)
2
T provisional commit (at P)
22

Instructors Guide for Coulouris, Dollimore, Kindberg and Blair, Distributed Systems: Concepts and Design Edn. 5
Pearson Education 2012
Figure 17.9
Information held by coordinators of nested transactions

Coordinator of Child Participant Provisional Abort list


transaction transactions commit list
T T1, T 2 yes T1 , T 12 T11 , T 2
T1 T11 , T 12 yes T1, T 12 T11
T2 T21, T 22 no (aborted) T2
T11 no (aborted) T11
T12, T 21 T12 but notT21 * T21, T 12
T22 no (parent aborted) T22
*T 21s parent has aborted

Instructors Guide for Coulouris, Dollimore, Kindberg and Blair, Distributed Systems: Concepts and Design Edn. 5
Pearson Education 2012
Figure 17.10
canCommit? for hierarchic two-phase commit protocol

canCommit?(trans, subTrans) -> Yes / No


Call a coordinator to ask coordinator of child subtransaction
whether it can commit a subtransaction subTrans. The first
argument trans is the transaction identifier of top-level
transaction. Participant replies with its vote Yes / No.

Instructors Guide for Coulouris, Dollimore, Kindberg and Blair, Distributed Systems: Concepts and Design Edn. 5
Pearson Education 2012
Figure 17.11
canCommit? for flat two-phase commit protoco

canCommit?(trans, abortList) -> Yes / No


Call from coordinator to participant to ask whether it can
commit a transaction. Participant replies with its
vote Yes / No.

Instructors Guide for Coulouris, Dollimore, Kindberg and Blair, Distributed Systems: Concepts and Design Edn. 5
Pearson Education 2012
Figure 17.12
Interleavings of transactions U, V and W

U V W
d.deposit(10) lock D
b.deposit(10) lock B
a.deposit(20) lock A at Y
at X
c.deposit(30) lock C
b.withdraw(30) wait at Y at Z

c.withdraw(20) wait at Z
a.withdraw(20) wait at X

Instructors Guide for Coulouris, Dollimore, Kindberg and Blair, Distributed Systems: Concepts and Design Edn. 5
Pearson Education 2012
Figure 17.13
Distributed deadlock

(a) (b)

W
W
Held by Waits for

C D A

Z X V

Held
Waits Held by by
for U
V U

B Waits for
Held
by
Y

Instructors Guide for Coulouris, Dollimore, Kindberg and Blair, Distributed Systems: Concepts and Design Edn. 5
Pearson Education 2012
Figure 17.14
Local and global wait-for graphs

local wait-for graph local wait-for graph global deadlock detector

T
T U V T

U V
X Y

Instructors Guide for Coulouris, Dollimore, Kindberg and Blair, Distributed Systems: Concepts and Design Edn. 5
Pearson Education 2012
Figure 17.15
Probes transmitted to detect deadlock

W
W U V W Held by Waits for
Deadlock
detected C
A
Z
Initiation X
W U V
Waits
for W U

V
U

Held by Waits for


Y B

Instructors Guide for Coulouris, Dollimore, Kindberg and Blair, Distributed Systems: Concepts and Design Edn. 5
Pearson Education 2012
Figure 17.16
Two probes initiated

(a) initial situation (b) detection initiated at object (c) detection initiated at object
requested by T requested by W

T
Waits for T Waits for T T U
W V T
V U W V T U
V U V
T U W U
T U W V
W Waits
for W V
Waits
W W for

Instructors Guide for Coulouris, Dollimore, Kindberg and Blair, Distributed Systems: Concepts and Design Edn. 5
Pearson Education 2012
Figure 17.17
Probes travel downhill
.
.

(a) V stores probe when U starts waiting (b) Probe is forwarded when V starts waiting

W
W U V probe
U Waits V W queue
for C
U V U

V Waits for
V Waits for
probe U V B
queue U V B

Instructors Guide for Coulouris, Dollimore, Kindberg and Blair, Distributed Systems: Concepts and Design Edn. 5
Pearson Education 2012
Figure 17.18
Types of entry in a recovery file

Type of entry Description of contents of entry


Object A value of an object.
Transaction identifier, transaction status ( prepared , committed
Transaction status aborted ) and other status values used for the two-phase
commit protocol.
Transaction identifier and a sequence of intentions, each of
Intentions list which consists of <objectID, Pi>, where Pi is the position in the
recovery file of the value of the object.

Instructors Guide for Coulouris, Dollimore, Kindberg and Blair, Distributed Systems: Concepts and Design Edn. 5
Pearson Education 2012
Figure 17.19
Log for banking service

P0 P1 P2 P3 P4 P5 P6 P7
Object:A Object:B Object:C Object:A Object:B Trans: T Trans: T Object: C Object: B Trans: U
100 200 300 80 220 prepared committed 278 242 prepared
<A, P1 > <C, P5 >
<B, P2 > <B, P6 >
P0 P3 P4
Checkpoint
End
of log

Instructors Guide for Coulouris, Dollimore, Kindberg and Blair, Distributed Systems: Concepts and Design Edn. 5
Pearson Education 2012
Figure 17.20
Shadow versions

Map at start Map when T commits


A P 0 A P 1
B P 0' B P 2
C P 0" C P 0"

P0 P0' P0" P1 P2 P3 P4
Version store 100 200 300 80 220 278 242
Checkpoint

Instructors Guide for Coulouris, Dollimore, Kindberg and Blair, Distributed Systems: Concepts and Design Edn. 5
Pearson Education 2012
Figure 17.21
Log with entries relating to two-phase commit protocol

Trans:T Coordr:T Trans:T Trans: U Partpant:U Trans:U Trans: U

prepared partpant committed prepared Coordr: . . uncertain committed


list: . . .
intentions intentions
list list

Instructors Guide for Coulouris, Dollimore, Kindberg and Blair, Distributed Systems: Concepts and Design Edn. 5
Pearson Education 2012
Figure 17.22
Recovery of the two-phase commit protocol

Role Status Action of recovery manager


Coordinator prepared No decision had been reached before the server failed. It sends
abortTransaction to all the servers in the participant list and adds the
transaction status aborted in its recovery file. Same action for state
aborted. If there is no participant list, the participants will eventually
timeout and abort the transaction.
Coordinator committed A decision to commit had been reached before the server failed. It
sends a doCommit to all the participants in its participant list (in case
it had not done so before) and resumes the two-phase protocol at step 4
(Fig 13.5).
Participant committed The participant sends a haveCommitted message to the coordinator (in
case this was not done before it failed). This will allow the coordinator
to discard information about this transaction at the next checkpoint.
Participant uncertain The participant failed before it knew the outcome of the transaction. It
cannot determine the status of the transaction until the coordinator
informs it of the decision. It will send a getDecision to the coordinator
to determine the status of the transaction. When it receives the reply it
will commit or abort accordingly.
Participant prepared The participant has not yet voted and can abort the transaction.
Coordinator done No action is required.
Instructors Guide for Coulouris, Dollimore, Kindberg and Blair, Distributed Systems: Concepts and Design Edn. 5
Pearson Education 2012
Figure 17.23
Nested transactions

top of stack
T11
T A1 A11 A11 A12 A12 A2 A2
1
T T12 A1 A11 A12
T2
T1 T11 T12 T2

Instructors Guide for Coulouris, Dollimore, Kindberg and Blair, Distributed Systems: Concepts and Design Edn. 5
Pearson Education 2012

Vous aimerez peut-être aussi