Skip to content
  • Kailasnath Nagarkar's avatar
    1b2e8ea2
    Bug #20939184: INNODB: UNLOCK ROW COULD NOT FIND A 2 MODE · 1b2e8ea2
    Kailasnath Nagarkar authored
                   LOCK ON THE RECORD
    
    
    Issue:
    ------
    Consdier tables t1 and t2 such that t1 has multiple rows
    and join condition for t1 left join t2 results in only
    single row from t2.
    
    In this case, access to table t2 is const since there
    is a single row that qualifies the join condition.
    
    However, while executing the query, attempt is made to
    unlock t2's row multiple times.
    
    The current algorithm to fetch rows approximates to:
    1) Retrieve the row for t1.
    2) Retrieve the row for t2.
    3) Apply the join conditions.
       a) If condition evaluates to true:
          Project the row to the result.
       b) If condition evaluates to false:
          i) If t2's qep_tab->not_null_complement is true,
             unlock t2's row.
          ii) Null-complement the row by calling
              "evaluate_null_complemented_join_record()". In
              this function qep_tab->not_null_complement is
              set to false.
    
    The t2's only one row, that qualifies join condition,
    is unlocked in Step i) when t1's row is evaluated to
    false.
    When t1's next row is also evaluated to false, another
    attempt is made to unlock t2's already unlocked row.
    
    This results in following error being logged in error.log:
    
    "[ERROR] InnoDB: Unlock row could not find a 3 mode lock on
    the record. Current statement:
    select * from t1 left join t2 ......"
    
    
    Solution:
    ---------
    When a table's access method is "const", set record unlock
    method for this table to do no operation.
    1b2e8ea2
    Bug #20939184: INNODB: UNLOCK ROW COULD NOT FIND A 2 MODE
    Kailasnath Nagarkar authored
                   LOCK ON THE RECORD
    
    
    Issue:
    ------
    Consdier tables t1 and t2 such that t1 has multiple rows
    and join condition for t1 left join t2 results in only
    single row from t2.
    
    In this case, access to table t2 is const since there
    is a single row that qualifies the join condition.
    
    However, while executing the query, attempt is made to
    unlock t2's row multiple times.
    
    The current algorithm to fetch rows approximates to:
    1) Retrieve the row for t1.
    2) Retrieve the row for t2.
    3) Apply the join conditions.
       a) If condition evaluates to true:
          Project the row to the result.
       b) If condition evaluates to false:
          i) If t2's qep_tab->not_null_complement is true,
             unlock t2's row.
          ii) Null-complement the row by calling
              "evaluate_null_complemented_join_record()". In
              this function qep_tab->not_null_complement is
              set to false.
    
    The t2's only one row, that qualifies join condition,
    is unlocked in Step i) when t1's row is evaluated to
    false.
    When t1's next row is also evaluated to false, another
    attempt is made to unlock t2's already unlocked row.
    
    This results in following error being logged in error.log:
    
    "[ERROR] InnoDB: Unlock row could not find a 3 mode lock on
    the record. Current statement:
    select * from t1 left join t2 ......"
    
    
    Solution:
    ---------
    When a table's access method is "const", set record unlock
    method for this table to do no operation.
Loading