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

transaction behavior

    • Type: Icon: Bug Bug
    • Resolution: Works as Designed
    • Priority: Icon: Major - P3 Major - P3
    • None
    • Affects Version/s: 4.4.4
    • Component/s: 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

      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.

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

              Created:
              Updated:
              Resolved: