SlideShare a Scribd company logo
1 of 42
95-702 Distributed Systems
Transactions and Concurrency
           Control

           Transaction Notes mainly from Coulouris
 Distributed Transactions Notes adapted from Tanenbaum’s
       “Distributed Systems Principles and Paradigms”


                     95-702 Transactions        1
Transactions
• A transaction is specified by a client as a set of
  operations on objects to be performed as an
  indivisible unit by the servers managing those
  objects.
• The servers must guarantee that either the
  entire transaction is carried out and the results
  recorded in permanent storage or, in the case
  that one or more of them crashes, its effects are
  completely erased.

                     95-702 Transactions   2
Transactions (ACID)
• Atomic: All or nothing. No intermediate states
  are visible.
• Consistent: system invariants preserved, e.g., if
  there were n dollars in a bank before a transfer
  transaction then there will be n dollars in the
  bank after the transfer.
• Isolated: Two transactions do not interfere with
  each other. They appear as serial executions.
• Durable: The commit causes a permanent
  change.

                    95-702 Transactions   3
Recall The Synchronized
               Keyword
private double balance;


public synchronized void deposit(double amount) throws
       RemoteException {
          add amount to the balance               These operations are
}                                                 atomic.


public synchronized void withdraw(double amount) throws
       RemoteException {                          If one thread invokes
                                                  a method it acquires a
          subtract amount from the balance
                                                  lock. Another thread
}                                                 will be blocked until
 This is all that is required for many applications.   the lock is released.
                               95-702 Transactions     4
Communicating Threads
Consider a shared queue and two
operations:

  synchronized first() { removes from front }
  synchronized append() { adds to rear }

Is this sufficient? No. If the queue is empty
the client of first() will have to poll on the
                      95-702 Transactions 5
method. It is also potentially unfair.
Communicating Threads
Consider again the shared queue and two
operations:               When threads can synchronize
                                              their actions on an object by means
  synchronized first() {                      of wait and notify, the server holds
    if queue is empty call wait()             on to requests that cannot
                                              immediately be satisfied and the
    remove from front                         client waits for a reply until
  }                                           another client has produced
  synchronized append() {                     whatever they need.
    adds to rear                              Note that both methods are
    call notify()                             synchronized. Only one thread at
  }                                           a time is allowed in.

                                                This is general. It can get tricky fast.
                            95-702 Transactions             6
Back to Transactions
• A client may require that a sequence of
  separate requests to a single server be
  atomic.
  - Free from interference from other
    concurrent clients.
  - Either all of the operations complete
    successfully or they have no effect at all
    in the presence of server crashes.
                   95-702 Transactions   7
Assume Each Operation Is
        Synchronized
Client 1 Transaction T;
a.withdraw(100);
b.deposit(100);     Client 2 Transaction W;
c.withdraw(200); total = a.getBalance();
b.deposit(200);     total = total +
                            b.getBalance();
                    total = total +
 Are we OK?                 c.getBalance();
                 95-702 Transactions   8
Assume Each Operation Is
        Synchronized
Client 1 Transaction T;
a.withdraw(100);
b.deposit(100);      Client 2 Transaction W;
c.withdraw(200); total = a.getBalance();
b.deposit(200);      total = total +
                             b.getBalance();
                     total = total +
 Inconsistent retrieval!     c.getBalance();
                  95-702 Transactions   9
Assume Each Operation Is
        Synchronized
Client 1 Transaction T;
bal = b.getBalance();
b.setBalance(bal*1.1);
                      Client 2 Transaction W;
                      bal = b.getBalance();
                      b.setBalance(bal*1.1);

Are we OK?
                  95-702 Transactions   10
Assume Each Operation Is
        Synchronized
Client 1 Transaction T;
bal = b.getBalance()
b.setBalance(bal*1.1);

                      Client 2 Transaction W;
                      bal = b.getBalance();
                      b.setBalance(bal*1.1);
Lost Update!
                  95-702 Transactions   11
Assume Each Operation Is
        Synchronized
Transaction T;                           The aim of any server that
                                         supports transactions is to
a.withdraw(100);                         maximize concurrency. So,
                                         transactions are allowed to execute
b.deposit(100);                          concurrently if they would have
                                         the same effect as serial execution.
c.withdraw(200);
b.deposit(200);
                                         Each transaction is created
                                         and managed by a coordinator.




                   95-702 Transactions              12
Example
Transaction T
                         Coordinator Interface:
tid = openTransaction();
                         openTransaction() -> transID
   a.withdraw(tid,100);  closeTransaction(transID) ->
                           commit or abort
   b.deposit(tid,100);   abortTransaction(TransID)

   c.withdraw(tid,200);
   b.deposit(tid,200);
closeTransaction(tid) or
abortTransaction(tid)
                    95-702 Transactions   13
Transaction Life Histories
Successful         Client Aborts             Server Aborts
openTransaction    openTransaction           openTransaction
operation          operation                 operation
operation          operation                 operation
:                  :                         :
operation          operation                 :
closeTransaction   abortTransaction          closeTransaction
                                             returns an abort
                                             from server




                       95-702 Transactions               14
Locks

• A lock is a variable associated with a data item and
  describes the status of that item with respect to
  possible operations that can be applied to that item.
• Generally, there is one lock for each item.
• Locks provide a means of synchronizing the access
  by concurrent transactions to the items.
• The server sets a lock, labeled with the transaction    This is
  identifier, on each object just before it is accessed   called
                                                          two
  and removes these locks when the transaction has        phase
  completed. Two types of locks are used: read locks      locking.
  and write locks. Two transactions may share a read
  lock.
                      95-702 Transactions
                                                      15
Example: Binary Lock (1)
Lock_Item(x)                     Not interleaved with other
B: if(Lock(x) == 0)              code until this terminates or
                                 waits. In java, this would be a
       Lock(x) = 1               synchronized method.
   else {
          wait until Lock(x) == 0 and
          we are woken up.
          GOTO B
   }
Now, a transaction is free to use x.

                        95-702 Transactions     16
Example: Binary Lock(2)
The transaction is done using x.

Unlock_Item(x)
  Lock(x) = 0
  if any transactions are waiting then
  wake up one of the waiting
  transactions.                 Not interleaved with other
                                                    code. If this were java, this
                                                    method would be synchronized.




                              95-702 Transactions            17
         Master of Information System
                 Management
Locks Are Often Used To
    Support Concurrent
       Transactions      Think of these
                                                                  as remote
Transaction T1                   Transaction T2                   procedure
                                                                  calls being
                                                                  executed
                                                                  concurrently.

 Lock_Item(x)                   Lock_Item(y)                      In reality, the
                                                                  coordinator
 T1 uses x                      T2 uses y                         would do the
                                                                  locking.
 Unlock_Item(x) two transactions proceed concurrently.
  If x differs from y these Unlock_Item(y)
    If both want to use x, one waits until the other completes.




                           95-702 Transactions        18
      Master of Information System
              Management
Locks May Lead to Deadlock
Four Requirements for deadlock:

 (1) Resources need mutual exclusion. They are not thread safe.
 (2) Resources may be reserved while a process is waiting for more.
 (3) Preemption is not allowed. You can't force a process to give
     up a resource.
 (4) Circular wait is possible. X wants what Y has and Y wants what Z
     has but Z wants what X has.

Solutions (short course):

 Prevention (disallow one of the four)
 Avoidance (study what is required by all before beginning)
 Detection and recovery (reboot if nothing is getting done)



                            95-702 Transactions         19
Deadlock




Source: G. Coulouris et al., Distributed Systems: Concepts and Design, Third Edition.

                                   95-702 Transactions             20
Transactions May Be Needed on
       More than One Server
Begin transaction BookTrip
     book a plane from Qantas
     book hotel from Hilton
     book rental car from Hertz
End transaction BookTrip

The Two Phase Commit Protocol is a classic solution.



                             95-702 Transactions       21
Client Talks to a Coordinator
                                            Different servers
      Any server
                                             BookPlane Participant
      BookTrip                                      Recoverable objects needed
      Coordinator                                   to book a plane
                                             BookHotel Participant
                                                    Recoverable objects needed
openTrans       Unique Transaction ID               to book a hotel.
                TID
                                              BookRentalCar Participant
                                                    Recoverable objects needed
      BookTrip Client                               to rent a car.
            TID = openTransaction()



                              95-702 Transactions          22
Client Uses Services
                                        Different servers
Any server
                                         BookPlane Participant
BookTrip                                        Recoverable objects needed
Coordinator                                     to book a plane
                                         BookHotel Participant
                                                Recoverable objects needed
                                                to book a hotel.
             Call + TID
                                          BookRentalCar Participant
                                                Recoverable objects needed
BookTrip Client                                 to rent a car.

     plane.bookFlight(111,”Seat32A”,TID)



                          95-702 Transactions          23
Participants Talk to Coordinator
                                                           The participant only
                                                           calls join if it has not
                                         Different servers
                                                           already done so.
                                         BookPlane Participant
  BookTrip                                       Recoverable objects needed
  Coordinator                                    to book a plane
      join(TID,ref to participant)
                                          BookHotel Participant
                                                 Recoverable objects needed
                                                 to book a hotel.
                                          BookRentalCar Participant

  BookTrip Client
                                     The participant knows where the
                                     coordinator is because that
                                     information can be included in
                                     the TID (eg. an IP address.)
                                     The coordinator now has a pointer to the
                                     participant.         24
Suppose All Goes Well (1)
                                Different servers

                                 BookPlane Participant
BookTrip                                Recoverable objects needed
Coordinator                             to book a plane
                                 BookHotel Participant
                                        Recoverable objects needed
                                        to book a hotel.
                                 BookRentalCar Participant
BookTrip Client
                                        Recoverable objects needed
                                        to rent a car.

   OK returned

   OK returned

    OK returned   95-702 Transactions          25
Suppose All Goes Well (2)
                                 Different servers

                                 BookPlane Participant
BookTrip                                Recoverable objects needed
Coordinator                             to book a plane

     Coordinator begins          BookHotel Participant
                                        Recoverable objects needed
     2PC and this results in
                                        to book a hotel.
     a GLOBAL COMMIT
     sent to each participant.   BookRentalCar Participant
                                        Recoverable objects needed
BookTrip Client                         to rent a car.
   OK returned
   OK returned
   OK returned
                                                26
CloseTransaction(TID) Called
This Time No Cars Available (1)
                           Different servers

                           BookPlane Participant
  BookTrip                        Recoverable objects needed
  Coordinator                     to book a plane
                            BookHotel Participant
                                  Recoverable objects needed
                                  to book a hotel.
                            BookRentalCar Participant
                                   Recoverable objects needed
  BookTrip Client                  to rent a car.
     OK returned

     OK returned

     NO CARS AVAIL
                                          27
 abortTransaction(TID) called
This Time No Cars Available (2)
                           Different servers

                           BookPlane Participant
  BookTrip                        Recoverable objects needed
  Coordinator                     to book a plane
                            BookHotel Participant
     Coordinator sends a          Recoverable objects needed
     GLOBAL_ABORT to all          to book a hotel.
     particpants
                            BookRentalCar Participant
                                  Recoverable objects needed
  BookTrip Client                 to rent a car.
     OK returned

     OK returned

     NO CARS AVAIL
                                          28
 abortTransaction(TID) called
This Time No Cars Available (3)
                               Different servers

                               BookPlane Participant
  BookTrip                            ROLLBACK CHANGES
  Coordinator
     abortTransaction          BookHotel Participant
                                      ROLLBACK CHANGES
         Each participant
         Gets a GLOBAL_ABORT
                               BookRentalCar Participant
                                      ROLLBACK CHANGES
  BookTrip Client
     OK returned

     OK returned

     NO CARS AVAIL
                                              29
 abortTransaction(TID)
BookPlane Server Crashes
 After Returning ‘OK’ (1)
                                Different servers

                                 BookPlane Participant
BookTrip                                Recoverable objects needed
Coordinator                             to book a plane
                                 BookHotel Participant
                                        Recoverable objects needed
                                        to book a hotel.
                                 BookRentalCar Participant
BookTrip Client
                                        Recoverable objects needed
                                        to rent a car.

   OK returned

   OK returned

    OK returned   95-702 Transactions          30
BookPlane Server Crashes
 After Returning ‘OK’ (2)
                                Different servers

                                BookPlane Participant
BookTrip                               Recoverable objects needed
Coordinator                            to book a plane

   Coordinator excutes 2PC:     BookHotel Participant
   Ask everyone to vote.               Recoverable objects needed
   No news from the BookPlane          to book a hotel.
   Participant so multicast a   BookRentalCar Participant
   GLOBAL ABORT
                                       Recoverable objects needed
BookTrip Client                        to rent a car.
   OK returned
   OK returned
   OK returned
                                               31
CloseTransaction(TID) Called
BookPlane Server Crashes after
      returning ‘OK’ (3)
                              Different servers

                              BookPlane Participant
  BookTrip                           Recoverable objects needed
  Coordinator                        to book a plane

       GLOBAl ABORT           BookHotel Participant
                                     ROLLBACK


                              BookRentalCar Participant
                                     ROLLBACK
  BookTrip Client
     OK returned
     OK returned
                   ROLLBACK
     OK returned
                                             32
  CloseTransaction(TID) Called
Two-Phase Commit Protocol
                                            BookPlane

                     Vote_Request
      BookTrip        Vote_Commit
      Coordinator
                         Vote Request
                                            BookHotel
                         Vote Commit

                           Vote Request
Phase 1 BookTrip coordinator                 BookRentalCar
sends a Vote_Request to each Vote Commit
process. Each process returns
a Vote_Commit or Vote_Abort.

                              95-702 Transactions       33
Two-Phase Commit Protocol

                                            BookPlane

                            Global Commit
       BookTrip              ACK
       Coordinator                          BookHotel
                            Global Commit
                            ACK
                           Global Commit

Phase 2 BookTrip coordinator ACK               BookRentalCar
checks the votes. If every process
votes to commit then so will the coordinator.
In that case, it will send a Global_Commit to each process.
If any process votes to abort the coordinator sends a GLOBAL_ABORT.
Each process waits for a Global_Commit message before committing its part of the
                                                            34
transaction.
2PC Finite State Machine from
                  Tanenbaum
 BookTrip Coordinator                  Participant
                                       State has already been saved to permanent
                                       storage.
                                                             Init
                 Init
                                           Vote-request           Vote-request
 Commit
                                           -----------------      -----------------
 ----------
                                           Vote-abort             Vote-commit
 Vote-request
                                                                  Ready
                 wait
Vote-abort                 Vote-commit                                          Global-commit
--------------             ----------------                                     -------------------
Global-abort               Global-commit                                        ACK
                                                            Global-abort
                                                            ----------------
        Abort           Commit
                                                            ACK
                                                                                       Commit
                                              Abort
                                      95-702 Transactions                  35
2PC Blocks in Three Places
                                                If waiting too long for a Vote-Request
                                                send a Vote-Abort

                                                                   Init
                 Init
                                              Vote-request                Vote-request
 Commit
                                              -----------------           -----------------
 ----------
                                              Vote-abort                  Vote-commit
 Vote-request
                                                                  Ready
                 wait
Vote-abort                 Vote-commit                                          Global-commit
--------------             ----------------                                     -------------------
Global-abort               Global-commit                                        ACK
                                                            Global-abort
                                                            ----------------
        Abort           Commit
                                                            ACK
                                                                                       Commit
                                               Abort
                                      95-702 Transactions                  36
2PC Blocks in Three Places

                                                                    Init
                   Init
                                                                          Vote-request
 Commit               If waiting too long
                                                                          -----------------
 ----------           After Vote-request
                                                                          Vote-commit
 Vote-request         Send a Global-Abort
                                           Vote-request          Ready
                wait                       -----------------
Vote-abort                Vote-commit Vote-abort                               Global-commit
--------------            ----------------                                     -------------------
Global-abort              Global-commit                                        ACK
                                                           Global-abort
                                                           ----------------
          Abort      Commit
                                                           ACK
                                                                                       Commit
                                             Abort
                                         95-702 Transactions                37
2PC Blocks in Three Places
                         If waiting too long we can’t simply abort! We must wait
                         until the coordinator recovers. We might also make queries
                         on other participants.

                                                                   Init
                 Init
                                                                          Vote-request
 Commit                                 Vote-request                      -----------------
 ----------                             -----------------                 Vote-commit
 Vote-request                           Vote-abort
                                                                  Ready
                 wait
Vote-abort                 Vote-commit                                          Global-commit
--------------             ----------------                                     -------------------
Global-abort               Global-commit                                        ACK
                                                            Global-abort
                                                            ----------------
        Abort           Commit
                                                            ACK
                                                                                       Commit
                                              Abort
                                      95-702 Transactions                  38
2PC Blocks in Three Places
                         If this process learns that another has committed then this
                         process is free to commit. The coordinator must have sent out
                         a Global-commit that did not get to this process.

                                                                   Init
                 Init
                                                                          Vote-request
 Commit                                 Vote-request                      -----------------
 ----------                             -----------------                 Vote-commit
 Vote-request                           Vote-abort
                                                                  Ready
                 wait
Vote-abort                 Vote-commit                                          Global-commit
--------------             ----------------                                     -------------------
Global-abort               Global-commit                                        ACK
                                                            Global-abort
                                                            ----------------
        Abort           Commit
                                                            ACK
                                                                                       Commit
                                              Abort
                                      95-702 Transactions                  39
2PC Blocks in Three Places
                         If this process learns that another has aborted then it too
                         is free to abort.


                                                                   Init
                 Init
                                                                          Vote-request
 Commit                                 Vote-request                      -----------------
 ----------                             -----------------                 Vote-commit
 Vote-request                           Vote-abort
                                                                  Ready
                 wait
Vote-abort                 Vote-commit                                          Global-commit
--------------             ----------------                                     -------------------
Global-abort               Global-commit                                        ACK
                                                            Global-abort
                                                            ----------------
        Abort           Commit
                                                            ACK
                                                                                       Commit
                                              Abort
                                      95-702 Transactions                  40
2PC Blocks in Three Places
                         Suppose this process learns that another
                         process is still in its init state. The coordinator must have
                         crashed while multicasting the Vote-request. It’s safe for
                         this process (and the queried process) to abort.
                                                                Init
                 Init
                                                                     Vote-request
 Commit                                 Vote-request                 -----------------
 ----------                             -----------------            Vote-commit
 Vote-request                           Vote-abort
                                                               Ready
                 wait
Vote-abort                 Vote-commit                                          Global-commit
--------------             ----------------                                     -------------------
Global-abort               Global-commit                                        ACK
                                                            Global-abort
                                                            ----------------
        Abort           Commit
                                                            ACK
                                                                                       Commit
                                              Abort
                                      95-702 Transactions                  41
2PC Blocks in Three Places
                         Tricky case: If the queried processes are all still in their ready
                         state what do we know? We have to block and wait until the
                         Coordinator recovers.

                                                                   Init
                 Init
                                                                          Vote-request
 Commit                                 Vote-request                      -----------------
 ----------                             -----------------                 Vote-commit
 Vote-request                           Vote-abort
                                                                  Ready
                 wait
Vote-abort                 Vote-commit                                          Global-commit
--------------             ----------------                                     -------------------
Global-abort               Global-commit                                        ACK
                                                            Global-abort
                                                            ----------------
        Abort           Commit
                                                            ACK
                                                                                       Commit
                                              Abort
                                      95-702 Transactions                  42

More Related Content

What's hot

Deuce STM - CMP'09
Deuce STM - CMP'09Deuce STM - CMP'09
Deuce STM - CMP'09Guy Korland
 
4. concurrency control
4. concurrency control4. concurrency control
4. concurrency controlAbDul ThaYyal
 
Concurrency control
Concurrency controlConcurrency control
Concurrency controlJaya Jeswani
 
Seastar Summit 2019: Past and future of futures
Seastar Summit 2019: Past and future of futuresSeastar Summit 2019: Past and future of futures
Seastar Summit 2019: Past and future of futuresScyllaDB
 
Reactive Design Patterns — J on the Beach
Reactive Design Patterns — J on the BeachReactive Design Patterns — J on the Beach
Reactive Design Patterns — J on the BeachRoland Kuhn
 
Code Contracts In .Net
Code Contracts In .NetCode Contracts In .Net
Code Contracts In .NetBruce Johnson
 
Qt Framework Events Signals Threads
Qt Framework Events Signals ThreadsQt Framework Events Signals Threads
Qt Framework Events Signals ThreadsNeera Mital
 
Deadlock Detection
Deadlock DetectionDeadlock Detection
Deadlock DetectionStuart Joy
 
16. Concurrency Control in DBMS
16. Concurrency Control in DBMS16. Concurrency Control in DBMS
16. Concurrency Control in DBMSkoolkampus
 
Database ,11 Concurrency Control
Database ,11 Concurrency ControlDatabase ,11 Concurrency Control
Database ,11 Concurrency ControlAli Usman
 
Concurrency control
Concurrency controlConcurrency control
Concurrency controlvarsha singh
 
Errors (Concurrency)
Errors (Concurrency)Errors (Concurrency)
Errors (Concurrency)Sri Prasanna
 
[GEG1] 10.camera-centric engine design for multithreaded rendering
[GEG1] 10.camera-centric engine design for multithreaded rendering[GEG1] 10.camera-centric engine design for multithreaded rendering
[GEG1] 10.camera-centric engine design for multithreaded rendering종빈 오
 

What's hot (15)

Deuce STM - CMP'09
Deuce STM - CMP'09Deuce STM - CMP'09
Deuce STM - CMP'09
 
4. concurrency control
4. concurrency control4. concurrency control
4. concurrency control
 
Concurrency control
Concurrency controlConcurrency control
Concurrency control
 
Seastar Summit 2019: Past and future of futures
Seastar Summit 2019: Past and future of futuresSeastar Summit 2019: Past and future of futures
Seastar Summit 2019: Past and future of futures
 
Reactive Design Patterns — J on the Beach
Reactive Design Patterns — J on the BeachReactive Design Patterns — J on the Beach
Reactive Design Patterns — J on the Beach
 
Code Contracts In .Net
Code Contracts In .NetCode Contracts In .Net
Code Contracts In .Net
 
Qt Framework Events Signals Threads
Qt Framework Events Signals ThreadsQt Framework Events Signals Threads
Qt Framework Events Signals Threads
 
Deadlock Detection
Deadlock DetectionDeadlock Detection
Deadlock Detection
 
16. Concurrency Control in DBMS
16. Concurrency Control in DBMS16. Concurrency Control in DBMS
16. Concurrency Control in DBMS
 
Database ,11 Concurrency Control
Database ,11 Concurrency ControlDatabase ,11 Concurrency Control
Database ,11 Concurrency Control
 
Concurrency control
Concurrency controlConcurrency control
Concurrency control
 
04 - Qt Data
04 - Qt Data04 - Qt Data
04 - Qt Data
 
Errors (Concurrency)
Errors (Concurrency)Errors (Concurrency)
Errors (Concurrency)
 
[GEG1] 10.camera-centric engine design for multithreaded rendering
[GEG1] 10.camera-centric engine design for multithreaded rendering[GEG1] 10.camera-centric engine design for multithreaded rendering
[GEG1] 10.camera-centric engine design for multithreaded rendering
 
Ekiden
EkidenEkiden
Ekiden
 

Similar to Transactions

Chapter 12 transactions and concurrency control
Chapter 12 transactions and concurrency controlChapter 12 transactions and concurrency control
Chapter 12 transactions and concurrency controlAbDul ThaYyal
 
Dbms ii mca-ch10-concurrency-control-2013
Dbms ii mca-ch10-concurrency-control-2013Dbms ii mca-ch10-concurrency-control-2013
Dbms ii mca-ch10-concurrency-control-2013Prosanta Ghosh
 
Concurrency Control Techniques
Concurrency Control TechniquesConcurrency Control Techniques
Concurrency Control TechniquesRaj vardhan
 
5-Chapter Five - Concurrenc.ppt
5-Chapter Five - Concurrenc.ppt5-Chapter Five - Concurrenc.ppt
5-Chapter Five - Concurrenc.pptDadiTesfaye
 
concurrency-control-techniques.ppt
concurrency-control-techniques.pptconcurrency-control-techniques.ppt
concurrency-control-techniques.pptkushvithchinna900
 
Chapter Three _Concurrency Control Techniques_ETU.ppt
Chapter Three _Concurrency Control Techniques_ETU.pptChapter Three _Concurrency Control Techniques_ETU.ppt
Chapter Three _Concurrency Control Techniques_ETU.ppthaymanot taddesse
 
Concurrency control!
Concurrency control!Concurrency control!
Concurrency control!Ashish K
 
Security in the blockchain
Security in the blockchainSecurity in the blockchain
Security in the blockchainBellaj Badr
 
Chapter 4 Concrruncy controling techniques (1).ppt
Chapter 4 Concrruncy controling techniques (1).pptChapter 4 Concrruncy controling techniques (1).ppt
Chapter 4 Concrruncy controling techniques (1).pptbinaboss24
 
Writing more complex models (continued)
Writing more complex models (continued)Writing more complex models (continued)
Writing more complex models (continued)Mohamed Samy
 
Reactive Design Patterns by Dr.Roland Kuhn
Reactive Design Patterns by Dr.Roland KuhnReactive Design Patterns by Dr.Roland Kuhn
Reactive Design Patterns by Dr.Roland KuhnJ On The Beach
 
transaction ,concurrency , and DDBMS
transaction ,concurrency , and DDBMStransaction ,concurrency , and DDBMS
transaction ,concurrency , and DDBMSzahidHussain373
 
Transactions (Distributed computing)
Transactions (Distributed computing)Transactions (Distributed computing)
Transactions (Distributed computing)Sri Prasanna
 
Multi version Concurrency Control and its applications in Advanced database s...
Multi version Concurrency Control and its applications in Advanced database s...Multi version Concurrency Control and its applications in Advanced database s...
Multi version Concurrency Control and its applications in Advanced database s...GauthamSK4
 
Synchronization in os.pptx
Synchronization in os.pptxSynchronization in os.pptx
Synchronization in os.pptxAbdullahBhatti53
 
Dartabase Transaction.pptx
Dartabase Transaction.pptxDartabase Transaction.pptx
Dartabase Transaction.pptxBibus Poudel
 
Distributed Database Design and Relational Query Language
Distributed Database Design and Relational Query LanguageDistributed Database Design and Relational Query Language
Distributed Database Design and Relational Query LanguageAAKANKSHA JAIN
 

Similar to Transactions (20)

Chapter 12 transactions and concurrency control
Chapter 12 transactions and concurrency controlChapter 12 transactions and concurrency control
Chapter 12 transactions and concurrency control
 
Ch 9
Ch 9Ch 9
Ch 9
 
Dbms module iii
Dbms module iiiDbms module iii
Dbms module iii
 
Dbms ii mca-ch10-concurrency-control-2013
Dbms ii mca-ch10-concurrency-control-2013Dbms ii mca-ch10-concurrency-control-2013
Dbms ii mca-ch10-concurrency-control-2013
 
Concurrency Control Techniques
Concurrency Control TechniquesConcurrency Control Techniques
Concurrency Control Techniques
 
5-Chapter Five - Concurrenc.ppt
5-Chapter Five - Concurrenc.ppt5-Chapter Five - Concurrenc.ppt
5-Chapter Five - Concurrenc.ppt
 
concurrency-control-techniques.ppt
concurrency-control-techniques.pptconcurrency-control-techniques.ppt
concurrency-control-techniques.ppt
 
Chapter Three _Concurrency Control Techniques_ETU.ppt
Chapter Three _Concurrency Control Techniques_ETU.pptChapter Three _Concurrency Control Techniques_ETU.ppt
Chapter Three _Concurrency Control Techniques_ETU.ppt
 
Concurrency control!
Concurrency control!Concurrency control!
Concurrency control!
 
Security in the blockchain
Security in the blockchainSecurity in the blockchain
Security in the blockchain
 
Chapter 4 Concrruncy controling techniques (1).ppt
Chapter 4 Concrruncy controling techniques (1).pptChapter 4 Concrruncy controling techniques (1).ppt
Chapter 4 Concrruncy controling techniques (1).ppt
 
Writing more complex models (continued)
Writing more complex models (continued)Writing more complex models (continued)
Writing more complex models (continued)
 
Reactive Design Patterns by Dr.Roland Kuhn
Reactive Design Patterns by Dr.Roland KuhnReactive Design Patterns by Dr.Roland Kuhn
Reactive Design Patterns by Dr.Roland Kuhn
 
transaction ,concurrency , and DDBMS
transaction ,concurrency , and DDBMStransaction ,concurrency , and DDBMS
transaction ,concurrency , and DDBMS
 
Cs501 concurrency
Cs501 concurrencyCs501 concurrency
Cs501 concurrency
 
Transactions (Distributed computing)
Transactions (Distributed computing)Transactions (Distributed computing)
Transactions (Distributed computing)
 
Multi version Concurrency Control and its applications in Advanced database s...
Multi version Concurrency Control and its applications in Advanced database s...Multi version Concurrency Control and its applications in Advanced database s...
Multi version Concurrency Control and its applications in Advanced database s...
 
Synchronization in os.pptx
Synchronization in os.pptxSynchronization in os.pptx
Synchronization in os.pptx
 
Dartabase Transaction.pptx
Dartabase Transaction.pptxDartabase Transaction.pptx
Dartabase Transaction.pptx
 
Distributed Database Design and Relational Query Language
Distributed Database Design and Relational Query LanguageDistributed Database Design and Relational Query Language
Distributed Database Design and Relational Query Language
 

Transactions

  • 1. 95-702 Distributed Systems Transactions and Concurrency Control Transaction Notes mainly from Coulouris Distributed Transactions Notes adapted from Tanenbaum’s “Distributed Systems Principles and Paradigms” 95-702 Transactions 1
  • 2. Transactions • A transaction is specified by a client as a set of operations on objects to be performed as an indivisible unit by the servers managing those objects. • The servers must guarantee that either the entire transaction is carried out and the results recorded in permanent storage or, in the case that one or more of them crashes, its effects are completely erased. 95-702 Transactions 2
  • 3. Transactions (ACID) • Atomic: All or nothing. No intermediate states are visible. • Consistent: system invariants preserved, e.g., if there were n dollars in a bank before a transfer transaction then there will be n dollars in the bank after the transfer. • Isolated: Two transactions do not interfere with each other. They appear as serial executions. • Durable: The commit causes a permanent change. 95-702 Transactions 3
  • 4. Recall The Synchronized Keyword private double balance; public synchronized void deposit(double amount) throws RemoteException { add amount to the balance These operations are } atomic. public synchronized void withdraw(double amount) throws RemoteException { If one thread invokes a method it acquires a subtract amount from the balance lock. Another thread } will be blocked until This is all that is required for many applications. the lock is released. 95-702 Transactions 4
  • 5. Communicating Threads Consider a shared queue and two operations: synchronized first() { removes from front } synchronized append() { adds to rear } Is this sufficient? No. If the queue is empty the client of first() will have to poll on the 95-702 Transactions 5 method. It is also potentially unfair.
  • 6. Communicating Threads Consider again the shared queue and two operations: When threads can synchronize their actions on an object by means synchronized first() { of wait and notify, the server holds if queue is empty call wait() on to requests that cannot immediately be satisfied and the remove from front client waits for a reply until } another client has produced synchronized append() { whatever they need. adds to rear Note that both methods are call notify() synchronized. Only one thread at } a time is allowed in. This is general. It can get tricky fast. 95-702 Transactions 6
  • 7. Back to Transactions • A client may require that a sequence of separate requests to a single server be atomic. - Free from interference from other concurrent clients. - Either all of the operations complete successfully or they have no effect at all in the presence of server crashes. 95-702 Transactions 7
  • 8. Assume Each Operation Is Synchronized Client 1 Transaction T; a.withdraw(100); b.deposit(100); Client 2 Transaction W; c.withdraw(200); total = a.getBalance(); b.deposit(200); total = total + b.getBalance(); total = total + Are we OK? c.getBalance(); 95-702 Transactions 8
  • 9. Assume Each Operation Is Synchronized Client 1 Transaction T; a.withdraw(100); b.deposit(100); Client 2 Transaction W; c.withdraw(200); total = a.getBalance(); b.deposit(200); total = total + b.getBalance(); total = total + Inconsistent retrieval! c.getBalance(); 95-702 Transactions 9
  • 10. Assume Each Operation Is Synchronized Client 1 Transaction T; bal = b.getBalance(); b.setBalance(bal*1.1); Client 2 Transaction W; bal = b.getBalance(); b.setBalance(bal*1.1); Are we OK? 95-702 Transactions 10
  • 11. Assume Each Operation Is Synchronized Client 1 Transaction T; bal = b.getBalance() b.setBalance(bal*1.1); Client 2 Transaction W; bal = b.getBalance(); b.setBalance(bal*1.1); Lost Update! 95-702 Transactions 11
  • 12. Assume Each Operation Is Synchronized Transaction T; The aim of any server that supports transactions is to a.withdraw(100); maximize concurrency. So, transactions are allowed to execute b.deposit(100); concurrently if they would have the same effect as serial execution. c.withdraw(200); b.deposit(200); Each transaction is created and managed by a coordinator. 95-702 Transactions 12
  • 13. Example Transaction T Coordinator Interface: tid = openTransaction(); openTransaction() -> transID a.withdraw(tid,100); closeTransaction(transID) -> commit or abort b.deposit(tid,100); abortTransaction(TransID) c.withdraw(tid,200); b.deposit(tid,200); closeTransaction(tid) or abortTransaction(tid) 95-702 Transactions 13
  • 14. Transaction Life Histories Successful Client Aborts Server Aborts openTransaction openTransaction openTransaction operation operation operation operation operation operation : : : operation operation : closeTransaction abortTransaction closeTransaction returns an abort from server 95-702 Transactions 14
  • 15. Locks • A lock is a variable associated with a data item and describes the status of that item with respect to possible operations that can be applied to that item. • Generally, there is one lock for each item. • Locks provide a means of synchronizing the access by concurrent transactions to the items. • The server sets a lock, labeled with the transaction This is identifier, on each object just before it is accessed called two and removes these locks when the transaction has phase completed. Two types of locks are used: read locks locking. and write locks. Two transactions may share a read lock. 95-702 Transactions 15
  • 16. Example: Binary Lock (1) Lock_Item(x) Not interleaved with other B: if(Lock(x) == 0) code until this terminates or waits. In java, this would be a Lock(x) = 1 synchronized method. else { wait until Lock(x) == 0 and we are woken up. GOTO B } Now, a transaction is free to use x. 95-702 Transactions 16
  • 17. Example: Binary Lock(2) The transaction is done using x. Unlock_Item(x) Lock(x) = 0 if any transactions are waiting then wake up one of the waiting transactions. Not interleaved with other code. If this were java, this method would be synchronized. 95-702 Transactions 17 Master of Information System Management
  • 18. Locks Are Often Used To Support Concurrent Transactions Think of these as remote Transaction T1 Transaction T2 procedure calls being executed concurrently. Lock_Item(x) Lock_Item(y) In reality, the coordinator T1 uses x T2 uses y would do the locking. Unlock_Item(x) two transactions proceed concurrently. If x differs from y these Unlock_Item(y) If both want to use x, one waits until the other completes. 95-702 Transactions 18 Master of Information System Management
  • 19. Locks May Lead to Deadlock Four Requirements for deadlock: (1) Resources need mutual exclusion. They are not thread safe. (2) Resources may be reserved while a process is waiting for more. (3) Preemption is not allowed. You can't force a process to give up a resource. (4) Circular wait is possible. X wants what Y has and Y wants what Z has but Z wants what X has. Solutions (short course): Prevention (disallow one of the four) Avoidance (study what is required by all before beginning) Detection and recovery (reboot if nothing is getting done) 95-702 Transactions 19
  • 20. Deadlock Source: G. Coulouris et al., Distributed Systems: Concepts and Design, Third Edition. 95-702 Transactions 20
  • 21. Transactions May Be Needed on More than One Server Begin transaction BookTrip book a plane from Qantas book hotel from Hilton book rental car from Hertz End transaction BookTrip The Two Phase Commit Protocol is a classic solution. 95-702 Transactions 21
  • 22. Client Talks to a Coordinator Different servers Any server BookPlane Participant BookTrip Recoverable objects needed Coordinator to book a plane BookHotel Participant Recoverable objects needed openTrans Unique Transaction ID to book a hotel. TID BookRentalCar Participant Recoverable objects needed BookTrip Client to rent a car. TID = openTransaction() 95-702 Transactions 22
  • 23. Client Uses Services Different servers Any server BookPlane Participant BookTrip Recoverable objects needed Coordinator to book a plane BookHotel Participant Recoverable objects needed to book a hotel. Call + TID BookRentalCar Participant Recoverable objects needed BookTrip Client to rent a car. plane.bookFlight(111,”Seat32A”,TID) 95-702 Transactions 23
  • 24. Participants Talk to Coordinator The participant only calls join if it has not Different servers already done so. BookPlane Participant BookTrip Recoverable objects needed Coordinator to book a plane join(TID,ref to participant) BookHotel Participant Recoverable objects needed to book a hotel. BookRentalCar Participant BookTrip Client The participant knows where the coordinator is because that information can be included in the TID (eg. an IP address.) The coordinator now has a pointer to the participant. 24
  • 25. Suppose All Goes Well (1) Different servers BookPlane Participant BookTrip Recoverable objects needed Coordinator to book a plane BookHotel Participant Recoverable objects needed to book a hotel. BookRentalCar Participant BookTrip Client Recoverable objects needed to rent a car. OK returned OK returned OK returned 95-702 Transactions 25
  • 26. Suppose All Goes Well (2) Different servers BookPlane Participant BookTrip Recoverable objects needed Coordinator to book a plane Coordinator begins BookHotel Participant Recoverable objects needed 2PC and this results in to book a hotel. a GLOBAL COMMIT sent to each participant. BookRentalCar Participant Recoverable objects needed BookTrip Client to rent a car. OK returned OK returned OK returned 26 CloseTransaction(TID) Called
  • 27. This Time No Cars Available (1) Different servers BookPlane Participant BookTrip Recoverable objects needed Coordinator to book a plane BookHotel Participant Recoverable objects needed to book a hotel. BookRentalCar Participant Recoverable objects needed BookTrip Client to rent a car. OK returned OK returned NO CARS AVAIL 27 abortTransaction(TID) called
  • 28. This Time No Cars Available (2) Different servers BookPlane Participant BookTrip Recoverable objects needed Coordinator to book a plane BookHotel Participant Coordinator sends a Recoverable objects needed GLOBAL_ABORT to all to book a hotel. particpants BookRentalCar Participant Recoverable objects needed BookTrip Client to rent a car. OK returned OK returned NO CARS AVAIL 28 abortTransaction(TID) called
  • 29. This Time No Cars Available (3) Different servers BookPlane Participant BookTrip ROLLBACK CHANGES Coordinator abortTransaction BookHotel Participant ROLLBACK CHANGES Each participant Gets a GLOBAL_ABORT BookRentalCar Participant ROLLBACK CHANGES BookTrip Client OK returned OK returned NO CARS AVAIL 29 abortTransaction(TID)
  • 30. BookPlane Server Crashes After Returning ‘OK’ (1) Different servers BookPlane Participant BookTrip Recoverable objects needed Coordinator to book a plane BookHotel Participant Recoverable objects needed to book a hotel. BookRentalCar Participant BookTrip Client Recoverable objects needed to rent a car. OK returned OK returned OK returned 95-702 Transactions 30
  • 31. BookPlane Server Crashes After Returning ‘OK’ (2) Different servers BookPlane Participant BookTrip Recoverable objects needed Coordinator to book a plane Coordinator excutes 2PC: BookHotel Participant Ask everyone to vote. Recoverable objects needed No news from the BookPlane to book a hotel. Participant so multicast a BookRentalCar Participant GLOBAL ABORT Recoverable objects needed BookTrip Client to rent a car. OK returned OK returned OK returned 31 CloseTransaction(TID) Called
  • 32. BookPlane Server Crashes after returning ‘OK’ (3) Different servers BookPlane Participant BookTrip Recoverable objects needed Coordinator to book a plane GLOBAl ABORT BookHotel Participant ROLLBACK BookRentalCar Participant ROLLBACK BookTrip Client OK returned OK returned ROLLBACK OK returned 32 CloseTransaction(TID) Called
  • 33. Two-Phase Commit Protocol BookPlane Vote_Request BookTrip Vote_Commit Coordinator Vote Request BookHotel Vote Commit Vote Request Phase 1 BookTrip coordinator BookRentalCar sends a Vote_Request to each Vote Commit process. Each process returns a Vote_Commit or Vote_Abort. 95-702 Transactions 33
  • 34. Two-Phase Commit Protocol BookPlane Global Commit BookTrip ACK Coordinator BookHotel Global Commit ACK Global Commit Phase 2 BookTrip coordinator ACK BookRentalCar checks the votes. If every process votes to commit then so will the coordinator. In that case, it will send a Global_Commit to each process. If any process votes to abort the coordinator sends a GLOBAL_ABORT. Each process waits for a Global_Commit message before committing its part of the 34 transaction.
  • 35. 2PC Finite State Machine from Tanenbaum BookTrip Coordinator Participant State has already been saved to permanent storage. Init Init Vote-request Vote-request Commit ----------------- ----------------- ---------- Vote-abort Vote-commit Vote-request Ready wait Vote-abort Vote-commit Global-commit -------------- ---------------- ------------------- Global-abort Global-commit ACK Global-abort ---------------- Abort Commit ACK Commit Abort 95-702 Transactions 35
  • 36. 2PC Blocks in Three Places If waiting too long for a Vote-Request send a Vote-Abort Init Init Vote-request Vote-request Commit ----------------- ----------------- ---------- Vote-abort Vote-commit Vote-request Ready wait Vote-abort Vote-commit Global-commit -------------- ---------------- ------------------- Global-abort Global-commit ACK Global-abort ---------------- Abort Commit ACK Commit Abort 95-702 Transactions 36
  • 37. 2PC Blocks in Three Places Init Init Vote-request Commit If waiting too long ----------------- ---------- After Vote-request Vote-commit Vote-request Send a Global-Abort Vote-request Ready wait ----------------- Vote-abort Vote-commit Vote-abort Global-commit -------------- ---------------- ------------------- Global-abort Global-commit ACK Global-abort ---------------- Abort Commit ACK Commit Abort 95-702 Transactions 37
  • 38. 2PC Blocks in Three Places If waiting too long we can’t simply abort! We must wait until the coordinator recovers. We might also make queries on other participants. Init Init Vote-request Commit Vote-request ----------------- ---------- ----------------- Vote-commit Vote-request Vote-abort Ready wait Vote-abort Vote-commit Global-commit -------------- ---------------- ------------------- Global-abort Global-commit ACK Global-abort ---------------- Abort Commit ACK Commit Abort 95-702 Transactions 38
  • 39. 2PC Blocks in Three Places If this process learns that another has committed then this process is free to commit. The coordinator must have sent out a Global-commit that did not get to this process. Init Init Vote-request Commit Vote-request ----------------- ---------- ----------------- Vote-commit Vote-request Vote-abort Ready wait Vote-abort Vote-commit Global-commit -------------- ---------------- ------------------- Global-abort Global-commit ACK Global-abort ---------------- Abort Commit ACK Commit Abort 95-702 Transactions 39
  • 40. 2PC Blocks in Three Places If this process learns that another has aborted then it too is free to abort. Init Init Vote-request Commit Vote-request ----------------- ---------- ----------------- Vote-commit Vote-request Vote-abort Ready wait Vote-abort Vote-commit Global-commit -------------- ---------------- ------------------- Global-abort Global-commit ACK Global-abort ---------------- Abort Commit ACK Commit Abort 95-702 Transactions 40
  • 41. 2PC Blocks in Three Places Suppose this process learns that another process is still in its init state. The coordinator must have crashed while multicasting the Vote-request. It’s safe for this process (and the queried process) to abort. Init Init Vote-request Commit Vote-request ----------------- ---------- ----------------- Vote-commit Vote-request Vote-abort Ready wait Vote-abort Vote-commit Global-commit -------------- ---------------- ------------------- Global-abort Global-commit ACK Global-abort ---------------- Abort Commit ACK Commit Abort 95-702 Transactions 41
  • 42. 2PC Blocks in Three Places Tricky case: If the queried processes are all still in their ready state what do we know? We have to block and wait until the Coordinator recovers. Init Init Vote-request Commit Vote-request ----------------- ---------- ----------------- Vote-commit Vote-request Vote-abort Ready wait Vote-abort Vote-commit Global-commit -------------- ---------------- ------------------- Global-abort Global-commit ACK Global-abort ---------------- Abort Commit ACK Commit Abort 95-702 Transactions 42