Presentation is loading. Please wait.

Presentation is loading. Please wait.

Slides for Chapter 9: Transactions and Concurrency Control From Coulouris, Dollimore and Kindberg Distributed Systems: Concepts and Design Edition 4, ©

Similar presentations


Presentation on theme: "Slides for Chapter 9: Transactions and Concurrency Control From Coulouris, Dollimore and Kindberg Distributed Systems: Concepts and Design Edition 4, ©"— Presentation transcript:

1 Slides for Chapter 9: Transactions and Concurrency Control From Coulouris, Dollimore and Kindberg Distributed Systems: Concepts and Design Edition 4, © Addison-Wesley 2005

2 Transactions and Concurrency Control zA Transaction defines a sequence of server operations that is guaranteed to be atomic in the presence of multiple clients and server crash. zAll concurrency control protocols are based on serial equivalence and are derived from rules of conflicting operations. yLocks used to order transactions that access the same object according to request order. yOptimistic concurrency control allows transactions to proceed until they are ready to commit, whereupon a check is made to see any conflicting operation on objects. yTimestamp ordering uses timestamps to order transactions that access the same object according to their starting time. Instructor’s Guide for Coulouris, Dollimore and Kindberg Distributed Systems: Concepts and Design Edn. 4 © Addison-Wesley Publishers 2005

3 Banking Example zEach account is represented by a remote object whose interface Account provides operations for making deposits and withdrawals and for enquiring about and setting the balance. zEach branch of the bank is represented by a remote object whose interface Branch provides operations for creating a new account, for looking up an account by name and for enquiring about the total funds at that branch. zMain issue: unless a server is carefully designed, its operations performed on behalf of different clients may sometimes interfere with one another. Such interference may result in incorrect values in the object. Instructor’s Guide for Coulouris, Dollimore and Kindberg Distributed Systems: Concepts and Design Edn. 4 © Addison-Wesley Publishers 2005

4 Figure 13.1 Operations of the Account interface deposit(amount) deposit amount in the account withdraw(amount) withdraw amount from the account getBalance() -> amount return the balance of the account setBalance(amount) set the balance of the account to amount create(name) -> account create a new account with a given name lookUp(name) -> account return a reference to the account with the given name branchTotal() -> amount return the total of all the balances at the branch Operations of the Branch interface

5 Simple Synchronization without Transactions zThe use of multiple threads is beneficial to the performance. Multiple threads may access the same objects. zFor example, deposit and withdraw methods: the actions of two concurrent executions of the methods could be interleaved arbitrarily and have strange effects on the instance variables of the account object. zSynchronized keyword can be applied to method in Java, so only one thread at a time can access an object. zIf one thread invokes a synchronized method on an object, then that object is locked, another thread that invokes one of the synchronized method will be blocked. Instructor’s Guide for Coulouris, Dollimore and Kindberg Distributed Systems: Concepts and Design Edn. 4 © Addison-Wesley Publishers 2005

6 Enhancing Client Cooperation by Signaling zWe have seen how clients may use a server as a means of sharing some resources. E.g. some clients update the server’s objects and other clients access them. zHowever, in some applications, threads need to communicate and coordinate their actions. zProducer and Consumer problem. yWait and Notify actions. Instructor’s Guide for Coulouris, Dollimore and Kindberg Distributed Systems: Concepts and Design Edn. 4 © Addison-Wesley Publishers 2005

7 Transactions zTransaction originally from database management systems. zClients require a sequence of separate requests to a server to be atomic in the sense that: yThey are free from interference by operations being performed on behalf of other concurrent clients; and yEither all of the operations must be completed successfully or they must have no effect at all in the presence of server crashes. Instructor’s Guide for Coulouris, Dollimore and Kindberg Distributed Systems: Concepts and Design Edn. 4 © Addison-Wesley Publishers 2005

8 Atomicity zAll or nothing: a transaction either completes successfully, and effects of all of its operations are recorded in the object, or it has no effect at all. yFailure atomicity: effects are atomic even when server crashes yDurability: after a transaction has completed successfully, all its effects are saved in permanent storage for recover later. zIsolation: each transaction must be performed without interference from other transactions. The intermediate effects of a transaction must not be visible to other transactions. Instructor’s Guide for Coulouris, Dollimore and Kindberg Distributed Systems: Concepts and Design Edn. 4 © Addison-Wesley Publishers 2005

9 Figure 13.2 A client’s banking transaction Transaction T: a.withdraw(100); b.deposit(100);

10 Instructor’s Guide for Coulouris, Dollimore and Kindberg Distributed Systems: Concepts and Design Edn. 4 © Addison-Wesley Publishers 2005 Figure 13.3 Operations in Coordinator interface openTransaction() -> trans; starts a new transaction and delivers a unique TID trans. This identifier will be used in the other operations in the transaction. closeTransaction(trans) -> (commit, abort); ends a transaction: a commit return value indicates that the transaction has committed; an abort return value indicates that it has aborted. abortTransaction(trans); aborts the transaction.

11 Instructor’s Guide for Coulouris, Dollimore and Kindberg Distributed Systems: Concepts and Design Edn. 4 © Addison-Wesley Publishers 2005 Figure 13.4 Transaction life histories SuccessfulAborted by clientAborted by server openTransaction operation server aborts transaction operation operation ERROR reported to client closeTransactionabortTransaction If a transaction aborts for any reason (self abort or server abort), it must be guaranteed that future transaction will not see the its effect either in the object or in their copies in permanent storage.

12 Instructor’s Guide for Coulouris, Dollimore and Kindberg Distributed Systems: Concepts and Design Edn. 4 © Addison-Wesley Publishers 2005 Concurrency Control: the lost update problem TransactionT: balance = b.getBalance(); b.setBalance(balance*1.1); a.withdraw(balance/10) TransactionU: balance = b.getBalance(); b.setBalance(balance*1.1); c.withdraw(balance/10) balance = b.getBalance(); $200 balance = b.getBalance(); $200 b.setBalance(balance*1.1); $220 b.setBalance(balance*1.1); $220 a.withdraw(balance/10) $80 c.withdraw(balance/10) $280 a, b and c initially have bank account balance are: 100, 200, and 300. T transfers an amount from a to b. U transfers an amount from c to b.

13 Instructor’s Guide for Coulouris, Dollimore and Kindberg Distributed Systems: Concepts and Design Edn. 4 © Addison-Wesley Publishers 2005 Concurrency Control: The inconsistent retrievals problem TransactionV: a.withdraw(100) b.deposit(100) TransactionW : aBranch.branchTotal() a.withdraw(100); $100 total = a.getBalance() $100 total = total+b.getBalance() $300 total = total+c.getBalance() b.deposit(100) $300 a, b accounts start with 200 both.

14 Serial equivalence zIf these transactions are done one at a time in some order, then the final result will be correct. zIf we do not want to sacrifice the concurrency, an interleaving of the operations of transactions may lead to the same effect as if the transactions had been performed one at a time in some order. zWe say it is a serially equivalent interleaving. zThe use of serial equivalence is a criterion for correct concurrent execution to prevent lost updates and inconsistent retrievals. Instructor’s Guide for Coulouris, Dollimore and Kindberg Distributed Systems: Concepts and Design Edn. 4 © Addison-Wesley Publishers 2005

15 Figure 13.7 A serially equivalent interleaving of T and U TransactionT: balance = b.getBalance() b.setBalance(balance*1.1) a.withdraw(balance/10) TransactionU: balance = b.getBalance() b.setBalance(balance*1.1) c.withdraw(balance/10) balance = b.getBalance()$200 b.setBalance(balance*1.1)$220 balance = b.getBalance()$220 b.setBalance(balance*1.1)$242 a.withdraw(balance/10) $80 c.withdraw(balance/10)$278

16 Conflicting Operations zWhen we say a pair of operations conflicts we mean that their combined effect depends on the order in which they are executed. E.g. read and write zThree ways to ensure serializability: yLocking yTimestamp ordering yOptimistic concurrency control Instructor’s Guide for Coulouris, Dollimore and Kindberg Distributed Systems: Concepts and Design Edn. 4 © Addison-Wesley Publishers 2005

17 Figure 13.9 Read and write operation conflict rules Operations of different transactions ConflictReason read NoBecause the effect of a pair ofread operations does not depend on the order in which they are executed readwriteYesBecause the effect of aread and awrite operation depends on the order of their execution write YesBecause the effect of a pair ofwrite operations depends on the order of their execution

18 Instructor’s Guide for Coulouris, Dollimore and Kindberg Distributed Systems: Concepts and Design Edn. 4 © Addison-Wesley Publishers 2005 Figure 13.13 Nested transactions T : top-level transaction T 1 = openSubTransaction T 2 openSubTransaction T 1 :T 2 : T 11 :T 12 : T 211 : T 21 : prov.commit abort prov. commit commit

19 Locks zA simple example of a serializing mechanism is the use of exclusive locks. zServer can lock any object that is about to be used by a client. zIf another client wants to access the same object, it has to wait until the object is unlocked in the end. Instructor’s Guide for Coulouris, Dollimore and Kindberg Distributed Systems: Concepts and Design Edn. 4 © Addison-Wesley Publishers 2005

20 Figure 13.14 Transactions T and U with exclusive locks TransactionT: balance = b.getBalance() b.setBalance(bal*1.1) a.withdraw(bal/10) TransactionU: balance = b.getBalance() b.setBalance(bal*1.1) c.withdraw(bal/10) OperationsLocksOperationsLocks openTransaction bal = b.getBalance()lockB b.setBalance(bal*1.1) openTransaction a.withdraw(bal/10)Lock A bal = b.getBalance()waits forT’s’s lock onB closeTransactionunlockA,B lockB b.setBalance(bal*1.1) c.withdraw(bal/10)lock C closeTransaction unlockB,C

21 Instructor’s Guide for Coulouris, Dollimore and Kindberg Distributed Systems: Concepts and Design Edn. 4 © Addison-Wesley Publishers 2005 Figure 13.15 Lock compatibility For one objectLock requested readwrite Lock already set noneOK readOKwait writewait An object can be read and write. From the compatibility table, we know pairs of read operations from different transactions do not conflict. So a simple exclusive lock used for both read and write reduces concurrency more than necessary. (Many readers/Single writer) Rules; 1.If T has already performed a read operation, then a concurrent transaction U must not write until T commits or aborts. 2.If T already performed a write operation, then concurrent U must not read or write until T commits or aborts.

22 Shared Lock and Exclusive lock yLocks must be obtained before read/write can begin yIf a transaction want to read and write the same object, it can either xObtain an X-lock before reading and unlock it immediately afterwards xObtain an S-lock before reading, then obtain an X-lock before writing. And unlock it immediately afterwards. x Instructor’s Guide for Coulouris, Dollimore and Kindberg Distributed Systems: Concepts and Design Edn. 4 © Addison-Wesley Publishers 2005 zConsider the following examples 1.A1 <- Read(X) 2.A1 <- A1 – k 3.Write(X, A1) 4.A2 <- Read(Y) 5.A2 <- A2 + k 6.Write(Y, A2) 1.A1 <- Read(X) 2.A1 <- A1* 1.01 3.Write(X, A1) 4.A2 <- Read(Y) 5.A2 <- A2 * 1.01 6.Write(Y, A2) T1 (Transfer) T2 (Dividend)

23 Lock-based protocol -- example zExample of schedule with locks 1.S-lock(X) 2.A1 <- Read(X) 3.Unlock(X) 4.A1 <- A1 – k 5.X-lock(X) 6.Write(X, A1) 7.Unlock(X) 8.…. 1.S-lock(X) 2.A1 <- Read(X) 3.Unlock(X) 4.A1 <- A1* 1.01 5.X-lock(X) T1 T2 T1 waits T1 can go ahead No wait: S-locks T2 waits T2 can go ahead

24 zDoes having locks this way guarantee conflict serializability? zIs there any other requirements in the order/manner of accquiring/releasing locks? zDoes it matter when to acquire locks? zDoes it matter when to release locks? Lock based protocols -- questions

25 Lock based protocol – need for a protocol 1.A1 <- Read(X) 2.A1 <- A1 – k 3.Write(X, A1) 4. A2 <- Read(Y) 5. A2 <- A2 + k 6. Write(Y, A2) 1.A1 <- Read(X) 2.A1 <- A1* 1.01 3.Write(X, A1) 4.A2 <- Read(Y) 5.A2 <- A2 * 1.01 6.Write(Y, A2) Not conflict serializable. S-lock (X) Unlock(X) X-lock(X) Unlock(X), S-lock(Y) X-lock (X) X-lock (Y) Unlock(Y) S-lock (Y) Unlock(Y) X-lock (Y) Unlock(Y) X : 100 -> 50 -> 50.5; Y : 200 -> 202 -> 252; X+Y = 302.5

26 Two-phase locking -- motivation zWhat is the problem? zWhen a transaction release a lock on an object, that means other transactions can obtain a lock on it. zIn this case, there is contention from T1 to T2 zTo ensure serializability, we must ensure there is no conflict from T2 back to T1 zHow? X-lock(X) Write(X, 100) Unlock(X) S-lock(X) Read(X) …… T1 T2

27 Two-phase locking -- motivation zEnsure that T1 does not read/write anything that T2 read/write. yUnrealistic to check in real life zWhat is a sufficient condition then? zEnsure T1 does not read/write anything after releasing the lock! z  (basic) Two-phase locking

28 Two phase locking – definition zThe basic two-phase locking (2PL) protocol yA transaction T must hold a lock on an item x in the appropriate mode before T accesses x. yIf a conflicting lock on x is being held by another transaction, T waits. yOnce T releases a lock, it cannot obtain any other lock subsequently. zNote: a transaction is divided into two phases: yA growing phase (obtaining locks) yA shrinking phase (releasing locks) zClaim : 2PL ensures conflict serializability

29 Two phase locking – Serializability zLock-point: the point where the transaction obtains all the locks zWith 2PL, a schedule is conflict equivalent to a a serial schedule ordered by the lock- point of the transactions

30 2-phase locking -- example 1.S-lock(X) 2.A1 <- Read(X) 3.A1 <- A1 – k 4.X-lock(X) 5.Write(X, A1) 6.S-lock(Y) 7.A2 <- Read(Y) 8.A2 <- A2 + k 9.X-lock(Y) 10.Write(Y, A2) 11.Unlock(X) 12.Unlock(Y) 1.S-lock(X) 2.A1 <- Read(X) 3.A1 <- A1* 1.01 4.X-lock(X) 5.Write(X, A1) 6.S-lock(Y) 7.A2 <- Read(Y) 8.A2 <- A2 * 1.01 9.X-lock(Y) 10.Write(Y, A2) 11.Unlock(Y) 12.Unlock(X) T1 T2 T2 waits Lock point for T1 Lock point for T2

31 Recoverability from aborts zServers must record the effect of all committed transactions and none of the effects of the aborted transactions. zA transaction may abort by preventing it affecting other concurrent transactions if it does so. zTwo problems associated with aborting transactions that may occur in the presence of serially equivalent execution of transactions: yDirty reads yPremature writes Instructor’s Guide for Coulouris, Dollimore and Kindberg Distributed Systems: Concepts and Design Edn. 4 © Addison-Wesley Publishers 2005

32 Figure 13.11 A dirty read when transaction T aborts TransactionT: a.getBalance() a.setBalance(balance + 10) TransactionU: a.getBalance() a.setBalance(balance + 20) balance = a.getBalance()$100 a.setBalance(balance + 10)$110 balance = a.getBalance()$110 a.setBalance(balance + 20)$130 commit transaction abort transaction Dirty reads caused by a read in one transaction U and an earlier unsuccessful write in another transaction T on the same object. T will be rolled back and restore the original a value, thus U will have seen a value that never existed. U is committed, so cannot be undone. U performs a dirty read.

33 Instructor’s Guide for Coulouris, Dollimore and Kindberg Distributed Systems: Concepts and Design Edn. 4 © Addison-Wesley Publishers 2005 Figure 13.12 Premature Write: Overwriting uncommitted values TransactionT: a.setBalance(105) TransactionU: a.setBalance(110) $100 a.setBalance(105)$105 a.setBalance(110)$110 Premature write: related to the interaction between write operations on the same object belonging to different transactions. a. If U aborts and then T commit, we got a to be correct 105. Some systems restore value to “Before images” value for abort action, namely the value before all the writes of a transaction. a is 100, which is the before image of T’s write. 105 is the before image of U’s write. b. Consider if U commits and then T aborts, we got wrong value of 100. c. Similarly if T aborts then U aborts, we got 105, which is wrong and should be 100. So to ensure correctness, write operations must be delayed until earlier transactions that updated the same object have either committed or aborted.

34 Recover problem with 2PL zDirty Read problem! zThere is a gap between releasing locks and the decision to commit/abort zOther transactions can still access data written by a uncomitted transaction Instructor’s Guide for Coulouris, Dollimore and Kindberg Distributed Systems: Concepts and Design Edn. 4 © Addison-Wesley Publishers 2005 1.X-lock(X) 2.A1 <- Read(X) 3.A1 <- A1 * 10 4.Write(X, A1) 5.Unlock(X) 6.Abort! 1.X-lock(X) 2.A2 <- Read(X) 3.A2 <- A2 + 1 4.Write(X, A2) 5.Unlock(X) 6.Commit

35 Strict two-phase Locking Protocol zBecause transaction may abort, strict execution are needed to prevent dirty reads and premature writes, which are caused by read or write to same object accessed by another earlier unsuccessful transaction that already performed an write operation. zSo to prevent this problem, a transaction that needs to read or write an object must be delayed until other transactions that wrote the same object have committed or aborted. zRule: zAny locks applied during the progress of a transaction are held until the transaction commits or aborts. Instructor’s Guide for Coulouris, Dollimore and Kindberg Distributed Systems: Concepts and Design Edn. 4 © Addison-Wesley Publishers 2005

36 Strict two-phase Locking Protocol Instructor’s Guide for Coulouris, Dollimore and Kindberg Distributed Systems: Concepts and Design Edn. 4 © Addison-Wesley Publishers 2005

37 Figure 13.16 Use of locks in strict two-phase locking 1. When an operation accesses an object within a transaction: (a)If the object is not already locked, it is locked and the operation proceeds. (b)If the object has a conflicting lock set by another transaction, the transaction must wait until it is unlocked. (c)If the object has a non-conflicting lock set by another transaction, the lock is shared and the operation proceeds. (d)If the object has already been locked in the same transaction, the lock will be promoted if necessary and the operation proceeds. (Where promotion is prevented by a conflicting lock, rule (b) is used.) 2. When a transaction is committed or aborted, the server unlocks all objects it locked for the transaction. A transaction with a read lock that is shared by other transactions cannot promote its read lock to a write lock, because write lock will conflict with other read locks.

38 Instructor’s Guide for Coulouris, Dollimore and Kindberg Distributed Systems: Concepts and Design Edn. 4 © Addison-Wesley Publishers 2005 Figure 13.17 Lock class public class Lock { private Object object;// the object being protected by the lock private Vector holders; // the TIDs of current holders private LockType lockType; // the current type public synchronized void acquire(TransID trans, LockType aLockType ){ while(/*another transaction holds the lock in conflicing mode*/) { try { wait(); }catch ( InterruptedException e){/*...*/ } } if(holders.isEmpty()) { // no TIDs hold lock holders.addElement(trans); lockType = aLockType; } else if(/*another transaction holds the lock, share it*/ ) ){ if(/* this transaction not a holder*/) holders.addElement(trans); } else if (/* this transaction is a holder but needs a more exclusive lock*/) lockType.promote(); } Continues on next slide

39 Instructor’s Guide for Coulouris, Dollimore and Kindberg Distributed Systems: Concepts and Design Edn. 4 © Addison-Wesley Publishers 2005 Figure 13.17 continued public synchronized void release(TransID trans ){ holders.removeElement(trans); // remove this holder // set locktype to none notifyAll(); }

40 Instructor’s Guide for Coulouris, Dollimore and Kindberg Distributed Systems: Concepts and Design Edn. 4 © Addison-Wesley Publishers 2005 Figure 13.19 Deadlock with write locks Transaction T U OperationsLocksOperationsLocks a.deposit(100);write lockA b.deposit(200)write lockB b.withdraw(100) waits forU’s’s a.withdraw(200);waits forT’s’s lock onB A

41 Instructor’s Guide for Coulouris, Dollimore and Kindberg Distributed Systems: Concepts and Design Edn. 4 © Addison-Wesley Publishers 2005 Figure 13.20 The wait-for graph for Figure 13.19 B A Waits for Held by T U U T Waits for

42 Instructor’s Guide for Coulouris, Dollimore and Kindberg Distributed Systems: Concepts and Design Edn. 4 © Addison-Wesley Publishers 2005 Figure 13.21 A cycle in a wait-for graph U V T

43 Instructor’s Guide for Coulouris, Dollimore and Kindberg Distributed Systems: Concepts and Design Edn. 4 © Addison-Wesley Publishers 2005 Figure 13.22 Another wait-for graph C T U V Held by T U V W W B Waits for T and W then request write locks on object C and a deadlock arises. V is involved in two cycles.

44 Deadlock Prevention zDeadlock prevention: ySimple way is to lock all of the objects used by a transaction when it starts. It should be done as an atomic action to prevent deadlock. a. inefficient, say lock an object you only need for short period of time. b. Hard to predict what objects a transaction will require. yJudge if system can remain in a Safe state by satisfying a certain resource request. Banker’s algorithm. yOrder the objects in certain order. Acquiring the locks need to follow this certain order. Instructor’s Guide for Coulouris, Dollimore and Kindberg Distributed Systems: Concepts and Design Edn. 4 © Addison-Wesley Publishers 2005

45 Safe State zSystem is in safe state if there exists a sequence of ALL the processes is the systems such that for each P i, the resources that P i can still request can be satisfied by currently available resources + resources held by all the P j, with j < i. Instructor’s Guide for Coulouris, Dollimore and Kindberg Distributed Systems: Concepts and Design Edn. 4 © Addison-Wesley Publishers 2005 If a system is in safe state  no deadlocks. If a system is in unsafe state  possibility of deadlock. Avoidance  ensure that a system will never enter an unsafe state.

46 Banker’s Algorithm Let Available and Finish be vectors of length m (resource types) and n (processes number), respectively. Initialize: Finish [i] = false for i = 0, 1, …, n- 1. 2.Find and i such that both: (a) Finish [i] = false (b) Need i  Available If no such i exists, go to step 4. 3. Available = Available + Allocation i Finish[i] = true go to step 2. 4.If Finish [i] == true for all i, then the system is in a safe state. Instructor’s Guide for Coulouris, Dollimore and Kindberg Distributed Systems: Concepts and Design Edn. 4 © Addison-Wesley Publishers 2005

47 Example Instructor’s Guide for Coulouris, Dollimore and Kindberg Distributed Systems: Concepts and Design Edn. 4 © Addison-Wesley Publishers 2005 z5 processes P 0 through P 4 ; z3 resource types: A (10 instances), B (5instances), and C (7 instances). zSnapshot at time T 0 : AllocationMaxAvailable A B CA B C A B C P 0 0 1 07 5 3 3 3 2 P 1 2 0 0 3 2 2 P 2 3 0 2 9 0 2 P 3 2 1 1 2 2 2 P 4 0 0 24 3 3

48 Example Instructor’s Guide for Coulouris, Dollimore and Kindberg Distributed Systems: Concepts and Design Edn. 4 © Addison-Wesley Publishers 2005 zThe content of the matrix Need is defined to be Max – Allocation. Need A B C P 0 7 4 3 P 1 1 2 2 P 2 6 0 0 P 3 0 1 1 P 4 4 3 1 zThe system is in a safe state since the sequence satisfies safety criteria. AllocationMax Available A B C A B C A B C P 0 0 1 0 7 5 3 3 3 2 P 1 2 0 0 3 2 2 P 2 3 0 2 9 0 2 P 3 2 1 1 2 2 2 P 4 0 0 2 4 3 3

49 Request Example Instructor’s Guide for Coulouris, Dollimore and Kindberg Distributed Systems: Concepts and Design Edn. 4 © Addison-Wesley Publishers 2005 zCheck that Request  Available (that is, (1,0,2)  (3,3,2)  true. AllocationNeedAvailable A B CA B CA B C P 0 0 1 0 7 4 3 2 3 0 P 1 3 0 20 2 0 P 2 3 0 1 6 0 0 P 3 2 1 1 0 1 1 P 4 0 0 2 4 3 1 zExecuting Banker’s/safety algorithm shows that sequence satisfies safety requirement. zCan request for (3,3,0) by P 4 be granted? zCan request for (0,2,0) by P 0 be granted?

50 Resource-Allocation Graph and Wait-for Graph Instructor’s Guide for Coulouris, Dollimore and Kindberg Distributed Systems: Concepts and Design Edn. 4 © Addison-Wesley Publishers 2005 Resource-Allocation Graph Corresponding wait-for graph

51 Deadlock Detection zDeadlock may be detected by finding cycles in the wait-for-graph. Having detected a deadlock, a transaction must be selected for abortion to break the cycle. yIf lock manager blocks a request, an edge can be added. Cycle should be checked each time a new edge is added. yOne transaction will be selected to abort in case of cycle. Age of transaction and number of cycles involved when selecting a victim zTimeouts is commonly used to resolve deadlock. Each lock is given a limited period in which it is invulnerable. After this time, a lock becomes vulnerable. yIf no other transaction is competing for the object, vulnerable object remained locked. However, if another transaction is waiting, the lock is broken. Disadvantages: yTransaction aborted simply due to timeout and waiting transaction even if there is no deadlock. ( may add deadlock detection) yHard to set the timeout time Instructor’s Guide for Coulouris, Dollimore and Kindberg Distributed Systems: Concepts and Design Edn. 4 © Addison-Wesley Publishers 2005

52 Figure 13.23 Resolution of the deadlock in Figure 15.19 Transaction TTransaction U OperationsLocksOperationsLocks a.deposit(100); write lock A b.deposit(200) write lock B b.withdraw(100) waits for U ’s’s a.withdraw(200); waits for T’s lock onB A (timeout elapses) T’s lock onA becomes vulnerable, unlockA, abort T a.withdraw(200); write locksA unlockA,B

53 Optimistic Concurrency Control zKung and Robinson [1981] identified a number of inherent disadvantages of locking and proposed an alternative optimistic approach to the serialization of transaction that avoids these drawbacks. Disadvantages of lock-based: yLock maintenance represents an overhead that is not present in systems that do not support concurrent access to shared data. Locking sometimes are only needed for some cases with low probabilities. yThe use of lock can result in deadlock. Deadlock prevention reduces concurrency severely. The use of timeout and deadlock detection is not ideal for interactive programs. yTo avoid cascading aborts, locks cannot be released until the end of the transaction. This may reduce the potential for concurrency. Instructor’s Guide for Coulouris, Dollimore and Kindberg Distributed Systems: Concepts and Design Edn. 4 © Addison-Wesley Publishers 2005

54 Optimistic Concurrency Control zIt is based on observation that, in most applications, the likelihood of two clients’ transactions accessing the same object is low. Transactions are allowed to proceed as though there were no possibility of conflict with other transactions until the client completes its task and issues a closeTransaction request. zWhen conflict arises, some transaction is generally aborted and will need to be restarted by the client. Instructor’s Guide for Coulouris, Dollimore and Kindberg Distributed Systems: Concepts and Design Edn. 4 © Addison-Wesley Publishers 2005

55 Optimistic Concurrency Control zEach transaction has the following phases: yWorking phase: Each transaction has a tentative version of each of the objects that it updates. This is a copy of the most recently committed version of the object. The tentative version allows the transaction to abort with no effect on the object, either during the working phase or if it fails validation due to other conflicting transaction. Several different tentative values of the same object may coexist. In addition, two records are kept of the objects accessed within a transaction, a read set and a write set containing all objects either read or written by this transaction. Read are performed on committed version ( no dirty read can occur) and write record the new values of the object as tentative values which are invisible to other transactions. Instructor’s Guide for Coulouris, Dollimore and Kindberg Distributed Systems: Concepts and Design Edn. 4 © Addison-Wesley Publishers 2005

56 Optimistic Concurrency Control yValidation phase: When closeTransaction request is received, the transaction is validated to establish whether or not its operations on objects conflict with operations of other transaction on the same objects. If successful, then the transaction can commit. If fails, then either the current transaction or those with which it conflicts will need to be aborted. yUpdate phase: If a transaction is validated, all of the changes recorded in its tentative versions are made permanent. Read-only transaction can commit immediately after passing validation. Write transactions are ready to commit once the tentative versions have been recorded in permanent storage. Instructor’s Guide for Coulouris, Dollimore and Kindberg Distributed Systems: Concepts and Design Edn. 4 © Addison-Wesley Publishers 2005

57 Validation of Transactions zValidation uses the read-write conflict rules to ensure that the scheduling of a particular transaction is serially equivalent with respect to all other overlapping transactions- that is, any transactions that had not yet committed at the time this transaction started. Each transaction is assigned a number when it enters the validation phase (when the client issues a closeTransaction). Such number defines its position in time. A transaction always finishes its working phase after all transactions with lower numbers. That is, a transaction with the number Ti always precedes a transaction with number Tj if i < j. Instructor’s Guide for Coulouris, Dollimore and Kindberg Distributed Systems: Concepts and Design Edn. 4 © Addison-Wesley Publishers 2005

58 Table on page 547 Serializability of transaction T with respect to transaction T i TvTv TiTi Rule writeread1.TiTi must not read objects written byTvTv readwrite2.TvTv must not read objects written byTiTi write 3.TiTi must not write objects written byTvTv and TvTv mustnot write objects written byTiTi The validation test on transaction Tv is based on conflicts between operations in pairs of transaction Ti and Tv, for a transaction Tv to be serializable with respect to an overlapping transaction Ti, their operations must conform to the above rules.

59 Instructor’s Guide for Coulouris, Dollimore and Kindberg Distributed Systems: Concepts and Design Edn. 4 © Addison-Wesley Publishers 2005 Figure 13.28 Validation of transactions Earlier committed transactions WorkingValidationUpdate T 1 T v Transaction being validated T 2 T 3 Later active transactions active 1 2

60 Validation Instructor’s Guide for Coulouris, Dollimore and Kindberg Distributed Systems: Concepts and Design Edn. 4 © Addison-Wesley Publishers 2005 zBackward Validation: checks the transaction undergoing validation with other preceding overlapping transactions- those that entered the validation phase before it. zForward Validation: checks the transaction undergoing validation with other later transactions, which are still active.

61 Instructor’s Guide for Coulouris, Dollimore and Kindberg Distributed Systems: Concepts and Design Edn. 4 © Addison-Wesley Publishers 2005 Page 547-548 Validation of Transactions Backward validation of transaction T v boolean valid = true; for (int T i = startTn+1; T i <= finishTn; T i ++){ if (read set of T v intersects write set of T i ) valid = false; } Forward validation of transaction T v boolean valid = true; for (int T id = active1; T id <= activeN; T id ++){ if (write set of T v intersects read set of T id ) valid = false; }

62 Timestamp based concurrency control zEach transaction is assigned a unique timestamp value when it starts, which defines its position in the time sequence of transactions. zThe basic timestamp ordering rule is based on operation conflicts and is very simple: yA transaction’s request to write an object is valid only if that object was last read and written by earlier transactions. A transaction’s request to read an object is valid only if that object was last written by an earlier transaction. yThis rule assume that there is only one version of each object and restrict access to one transaction at a time. Instructor’s Guide for Coulouris, Dollimore and Kindberg Distributed Systems: Concepts and Design Edn. 4 © Addison-Wesley Publishers 2005

63 Timestamp ordering zTimestamps may be assigned from the server’s clock or a counter that is incremented whenever a timestamp value is issued. zEach object has a write timestamp and a set of tentative versions, each of which has a write timestamp associated with it; and a set of read timestamps. zThe write timestamps of the committed object is earlier than that of any of its tentative versions, and the set of read timestamps can be represented by its maximum member. Instructor’s Guide for Coulouris, Dollimore and Kindberg Distributed Systems: Concepts and Design Edn. 4 © Addison-Wesley Publishers 2005

64 Timestamp ordering zWhenever a transaction’s write operation on an object is accepted, the server creates a new tentative version of the object with write timestamp set to the transaction timestamp. Whenever a read operation is accepted, the timestamp of the transaction is added to its set of read timestamps. zWhen a transaction is committed, the values of the tentative version become the values of the object, and the timestamps of the tentative version become the write timestamp of the corresponding object. Instructor’s Guide for Coulouris, Dollimore and Kindberg Distributed Systems: Concepts and Design Edn. 4 © Addison-Wesley Publishers 2005

65 Figure 13.29 Operation conflicts for timestamp ordering Rule TcTc TiTi 1.writereadTcTc must notwrite an object that has beenread by anyTiTi where this requires thatTcTc ≥ the maximum read timestamp of the object. 2.write TcTc must notwrite an object that has beenwritten by anyTiTi where TiTi >TcTc this requires thatTcTc > write timestamp of the committedobject. 3.readwriteTcTc must notread an object that has beenwritten by anyTiTi where this requires thatTcTc > write timestamp of the committed object. TiTi >TcTc TiTi >TcTc Each request from a transaction is checked to see whether it conforms to the operation conflict rules. Conflict may occur when previous done operation from other transaction Ti is later than current transaction Tc. It means the request is submitted too late.

66 Instructor’s Guide for Coulouris, Dollimore and Kindberg Distributed Systems: Concepts and Design Edn. 4 © Addison-Wesley Publishers 2005 Figure 13.30 Write operations and timestamps write(b) T 3 (a)write (c) T 3 write object produced by transaction T i (with write timestamp T i ) T 3 write(d) T 3 T 1 <T 2 <T 3 <T 4 Time Before After T 2 T 2 T 3 Time Before After T 2 T 2 T 3 T 1 T 1 Time Before After T 1 T 1 T 4 T 3 T 4 Time Transaction aborts Before After T 4 T 4 Tentative Committed T i T i Key:

67 Instructor’s Guide for Coulouris, Dollimore and Kindberg Distributed Systems: Concepts and Design Edn. 4 © Addison-Wesley Publishers 2005 Page 551 Timestamp ordering write rule if (T c ≥ maximum read timestamp on D && T c > write timestamp on committed version of D) perform write operation on tentative version of D with write timestamp T c else /* write is too late */ Abort transaction T c

68 Instructor’s Guide for Coulouris, Dollimore and Kindberg Distributed Systems: Concepts and Design Edn. 4 © Addison-Wesley Publishers 2005 Page 551 Timestamp ordering read rule if ( T c > write timestamp on committed version of D) { let D selected be the version of D with the maximum write timestamp ≤ T c if (D selected is committed) perform read operation on the version D selected else Wait until the transaction that made version D selected commits or aborts then reapply the read rule } else Abort transaction T c

69 Instructor’s Guide for Coulouris, Dollimore and Kindberg Distributed Systems: Concepts and Design Edn. 4 © Addison-Wesley Publishers 2005 Figure 13.31 Read operations and timestamps (b) T 3 read Time read proceeds Selected T 2 Time read proceeds Selected T 2 T 4 Time read waits Selected T 1 T 2 Time Transaction aborts T 4 Key: Tentative Committed T i T i object produced by transaction T i (with write timestamp T i ) T 1 < T 2 < T 3 < T 4 (a) T 3 read (c) T 3 read (d) T 3 read

70 Exercise Instructor’s Guide for Coulouris, Dollimore and Kindberg Distributed Systems: Concepts and Design Edn. 4 © Addison-Wesley Publishers 2005 Timestamps and versions of objects TUABC RTSWTSRTSWTSRTSWTS {}S S S openTransaction bal = b.getBalance() openTransaction b.setBalance(bal*1.1) bal = b.getBalance() a.withdraw(bal/10) commit bal = b.getBalance() b.setBalance(bal*1.1) c.withdraw(bal/10) S<T<U

71 Instructor’s Guide for Coulouris, Dollimore and Kindberg Distributed Systems: Concepts and Design Edn. 4 © Addison-Wesley Publishers 2005 Figure 13.32 Timestamps in transactions T and U Timestamps and versions of objects TUABC RTSWTSRTSWTSRTSWTS {}S S S openTransaction bal = b.getBalance(){T}{T} openTransaction b.setBalance(bal*1.1) bal = b.getBalance() wait for T a.withdraw(bal/10) commitTT bal = b.getBalance() b.setBalance(bal*1.1) c.withdraw(bal/10)S, U T, U S, T {U}{U} S<T<U

72 Exercises zA server manages the objects a 1, a 2,... a n. The server provides two operations for its clients: read (i) returns the value of a i ; write(i, Value) assigns Value to a i. The transactions T and U are defined as follows: T: x = read(j); y = read (i); write(j, 44); write(i, 33); U: x = read(k); write(i, 55); y = read (j); write(k, 66). Give three serially equivalent interleavings of the transactions T and U. Instructor’s Guide for Coulouris, Dollimore and Kindberg Distributed Systems: Concepts and Design Edn. 4 © Addison-Wesley Publishers 2005

73 Exercises Instructor’s Guide for Coulouris, Dollimore and Kindberg Distributed Systems: Concepts and Design Edn. 4 © Addison-Wesley Publishers 2005 Consider the use of timestamp ordering with each of the example interleavings of transactions T and U in Exercise 13.9. Initial values of a i and a j are 10 and 20, respectively, and initial read and write timestamps are t0. Assume that each transaction opens and obtains a timestamp just before its first operation; for example, in (a) T and U get timestamps t1 and t2 respectively, where t0 < t1 < t2. Describe in order of increasing time the effects of each operation of T and U. For each operation, state the following: (i)whether the operation may proceed according to the write or read rule; (ii)timestamps assigned to transactions or objects; (iii)creation of tentative objects and their values. What are the final values of the objects and their timestamps?

74 Exercises Instructor’s Guide for Coulouris, Dollimore and Kindberg Distributed Systems: Concepts and Design Edn. 4 © Addison-Wesley Publishers 2005


Download ppt "Slides for Chapter 9: Transactions and Concurrency Control From Coulouris, Dollimore and Kindberg Distributed Systems: Concepts and Design Edition 4, ©"

Similar presentations


Ads by Google