Uploaded image for project: 'Core Server'
  1. Core Server
  2. SERVER-74261

transaction behavior

    XMLWordPrintableJSON

Details

    • Icon: Bug Bug
    • Resolution: Works as Designed
    • Icon: Major - P3 Major - P3
    • None
    • 4.4.4
    • None
    • Storage Execution
    • ALL
    • Hide

      case 1:

      T1 execute stmt: 't1.put(0, 0)'
      T1 execute stmt: 't1.put(1, 0)'
      T1 start transaction success
      T1 execute stmt: 't1.put(0, 1)'
                                              T2 start transaction success
                                              T2 execute stmt: 't1.put(1, 1)'
                                              T2 execute stmt: 't1.get(0)'
                                                 current_result: 
                                                   (0,0
      T1 execute stmt: 't1.get(1)'
         current_result: 
           (1,0
                                              T2 COMMIT transaction success
      T1 COMMIT transaction success
                                                                                      T3 execute stmt: 't1.get(*)'
                                                                                         current_result: 
                                                                                           (0,1) (1,1

      case 2:

      T1 execute stmt: 't1.put(0, 0)'
      T1 execute stmt: 't1.put(1, 0)'
      T1 start transaction success
      T1 execute stmt: 't1.put(0, 1)'
                                              T2 start transaction success
                                              T2 execute stmt: 't1.put(1, 1)'
                                              T2 execute stmt: 't1.get(0)'
                                                 current_result: 
                                                   (0,0)                                         T2 COMMIT transaction success
      T1 execute stmt: 't1.get(1)'
         current_result: 
           (1,0) T1 COMMIT transaction success
                                                                                      T3 execute stmt: 't1.get(*)'
                                                                                         current_result: 
                                                                                           (0,1) (1,1

      case 3:

      T1 execute stmt: 't1.put(0, 0)'
      T1 execute stmt: 't1.put(1, 0)'
      T1 execute stmt: 't1.put(2, 0)'
      T1 start transaction success
      T1 execute stmt: 't1.put(0, 1)'
                                              T2 start transaction success
                                              T2 execute stmt: 't1.put(1, 1)'
                                              T2 execute stmt: 't1.get(0)'
                                                 current_result: 
                                                   (0,0
                                                                                      T3 start transaction success
                                                                                      T3 execute stmt: 't1.put(2, 1)'
                                                                                      T3 execute stmt: 't1.get(1)'
                                                                                         current_result: 
                                                                                           (1,0
      T1 execute stmt: 't1.get(2)'
         current_result: 
           (2,0
      T1 COMMIT transaction success
                                              T2 COMMIT transaction success
                                                                                      T3 COMMIT transaction success
                                                                                                                              T4 execute stmt: 't1.get(*)'
                                                                                                                                 current_result: 
                                                                                                                                   (0,1) (1,1) (2,1

      case 4:

      T1 execute stmt: 't1.put(0, 0)'
      T1 execute stmt: 't1.put(1, 0)'
      T1 start transaction success
      T1 execute stmt: 't1.get(0)'
         current_result: 
           (0,0)                                                                    T2 start transaction success
                                              T2 execute stmt: 't1.get(1)'
                                                 current_result: 
                                                   (1,0)                                                                                T2 execute stmt: 't1.put(0, 1)'
      T1 execute stmt: 't1.put(1, 1)'
      T1 COMMIT transaction success
                                              T2 COMMIT transaction success
                                                                                      T3 execute stmt: 't1.get(*)'
                                                                                         current_result: 
                                                                                           (0,1) (1,1

      case 5:

      T1 execute stmt: 't1.put(0, 0)'
      T1 execute stmt: 't1.put(1, 0)'
      T1 start transaction success
      T1 execute stmt: 't1.get(0)'
         current_result: 
           (0,0)                                         T2 start transaction success
                                              T2 execute stmt: 't1.get(1)'
                                                 current_result: 
                                                   (1,0)                                         T2 execute stmt: 't1.put(0, 1)'
      T1 COMMIT transaction success
      T1 execute stmt: 't1.put(1, 1)'
                                              T2 COMMIT transaction success
                                                                                      T3 execute stmt: 't1.get(*)'
                                                                                         current_result: 
                                                                                           (0,1) (1,1

      case 6:

      T1 execute stmt: 't1.put(0, 0)'
      T1 execute stmt: 't1.put(1, 0)'
      T1 execute stmt: 't1.put(2, 0)'
      T1 start transaction success
      T1 execute stmt: 't1.get(2)'
         current_result: 
           (2,0)                                         T2 start transaction success
                                              T2 execute stmt: 't1.get(0)'
                                                 current_result: 
                                                   (0,0)                                                                                 T3 start transaction success
                                                                                      T3 execute stmt: 't1.get(1)'
                                                                                         current_result: 
                                                                                           (1,0)T1 execute stmt: 't1.put(0, 1)'
                                              T2 execute stmt: 't1.put(1, 1)'
                                                                                      T3 execute stmt: 't1.put(2, 1)'
      T1 COMMIT transaction success
                                              T2 COMMIT transaction success
                                                                                      T3 COMMIT transaction success
                                                                                                                              T4 execute stmt: 't1.get(*)'
                                                                                                                                 current_result: 
                                                                                                                                   (0,1) (1,1) (2,1) 

       

      Show
      case 1: T1 execute stmt: 't1.put(0, 0)' T1 execute stmt: 't1.put(1, 0)' T1 start transaction success T1 execute stmt: 't1.put(0, 1)'                                         T2 start transaction success                                         T2 execute stmt: 't1.put(1, 1)'                                         T2 execute stmt: 't1.get(0)'                                            current_result:                                               ( 0 , 0 )  T1 execute stmt: 't1.get(1)'    current_result:       ( 1 , 0 )                                          T2 COMMIT transaction success T1 COMMIT transaction success                                                                                 T3 execute stmt: 't1.get(*)'                                                                                    current_result:                                                                                       ( 0 , 1 ) ( 1 , 1 )  case 2: T1 execute stmt: 't1.put(0, 0)' T1 execute stmt: 't1.put(1, 0)' T1 start transaction success T1 execute stmt: 't1.put(0, 1)'                                         T2 start transaction success                                         T2 execute stmt: 't1.put(1, 1)'                                         T2 execute stmt: 't1.get(0)'                                            current_result:                                               ( 0 , 0 )                                         T2 COMMIT transaction success T1 execute stmt: 't1.get(1)'    current_result:       ( 1 , 0 ) T1 COMMIT transaction success                                                                                 T3 execute stmt: 't1.get(*)'                                                                                    current_result:                                                                                       ( 0 , 1 ) ( 1 , 1 )  case 3: T1 execute stmt: 't1.put(0, 0)' T1 execute stmt: 't1.put(1, 0)' T1 execute stmt: 't1.put(2, 0)' T1 start transaction success T1 execute stmt: 't1.put(0, 1)'                                         T2 start transaction success                                         T2 execute stmt: 't1.put(1, 1)'                                         T2 execute stmt: 't1.get(0)'                                            current_result:                                               ( 0 , 0 )                                                                                  T3 start transaction success                                                                                 T3 execute stmt: 't1.put(2, 1)'                                                                                 T3 execute stmt: 't1.get(1)'                                                                                    current_result:                                                                                       ( 1 , 0 )  T1 execute stmt: 't1.get(2)'    current_result:       ( 2 , 0 )  T1 COMMIT transaction success                                         T2 COMMIT transaction success                                                                                 T3 COMMIT transaction success                                                                                                                         T4 execute stmt: 't1.get(*)'                                                                                                                            current_result:                                                                                                                               ( 0 , 1 ) ( 1 , 1 ) ( 2 , 1 )  case 4: T1 execute stmt: 't1.put(0, 0)' T1 execute stmt: 't1.put(1, 0)' T1 start transaction success T1 execute stmt: 't1.get(0)'    current_result:       ( 0 , 0 )                             T2 start transaction success                                         T2 execute stmt: 't1.get(1)'                                            current_result:                                               ( 1 , 0 )                                         T2 execute stmt: 't1.put(0, 1)' T1 execute stmt: 't1.put(1, 1)' T1 COMMIT transaction success                                         T2 COMMIT transaction success                                                                                 T3 execute stmt: 't1.get(*)'                                                                                    current_result:                                                                                       ( 0 , 1 ) ( 1 , 1 )  case 5: T1 execute stmt: 't1.put(0, 0)' T1 execute stmt: 't1.put(1, 0)' T1 start transaction success T1 execute stmt: 't1.get(0)'    current_result:       ( 0 , 0 )                                         T2 start transaction success                                         T2 execute stmt: 't1.get(1)'                                            current_result:                                               ( 1 , 0 )                                         T2 execute stmt: 't1.put(0, 1)' T1 COMMIT transaction success T1 execute stmt: 't1.put(1, 1)'                                         T2 COMMIT transaction success                                                                                 T3 execute stmt: 't1.get(*)'                                                                                    current_result:                                                                                       ( 0 , 1 ) ( 1 , 1 )  case 6: T1 execute stmt: 't1.put(0, 0)' T1 execute stmt: 't1.put(1, 0)' T1 execute stmt: 't1.put(2, 0)' T1 start transaction success T1 execute stmt: 't1.get(2)'    current_result:       ( 2 , 0 )                                         T2 start transaction success                                         T2 execute stmt: 't1.get(0)'                                            current_result:                                               ( 0 , 0 )                                                                                 T3 start transaction success                                                                                 T3 execute stmt: 't1.get(1)'                                                                                    current_result:                                                                                       ( 1 , 0 )T1 execute stmt: 't1.put(0, 1)'                                         T2 execute stmt: 't1.put(1, 1)'                                                                                 T3 execute stmt: 't1.put(2, 1)' T1 COMMIT transaction success                                         T2 COMMIT transaction success                                                                                 T3 COMMIT transaction success                                                                                                                         T4 execute stmt: 't1.get(*)'                                                                                                                            current_result:                                                                                                                               ( 0 , 1 ) ( 1 , 1 ) ( 2 , 1 )  
    • Execution NAMR Team 2023-07-24, Execution NAMR Team 2023-08-07

    Description

      I execute some histories for multiple transactions in different sessions. There are some read-write dependencies between these transactions and I expect that at least one transaction should be aborted.

      However, all transactions commit successfully unexpectedly which means there are data anomailies in these histories.

      Attachments

        Activity

          People

            pavithra.vetriselvan@mongodb.com Pavithra Vetriselvan
            williamcliu@tencent.com LiuChang N/A
            Votes:
            0 Vote for this issue
            Watchers:
            11 Start watching this issue

            Dates

              Created:
              Updated:
              Resolved: