• Jon Olav Hauglid's avatar
    Bug #52593 SHOW CREATE TABLE is blocked if table is locked · d3d459a7
    Jon Olav Hauglid authored
               for write by another connection
    
    The problem was that if a table was locked in one connection by
    LOCK TABLES ... WRITE, REPAIR TABLE or OPTIMIZE TABLE, SHOW CREATE
    TABLE from another connection would be blocked. As SHOW CREATE TABLE
    only reads metadata about the table, such blocking is not needed.
    
    The problem was that when SHOW CREATE TABLE tried to get a metadata
    lock on the table in order to open it, it used the wrong type of
    metadata lock request. It used MDL_SHARED_READ which is used when
    the intent is to read both table metadata and table data. Instead
    it should have used MDL_SHARED_HIGH_PRIO which signifies an intent
    to only read metadata.
    
    This patch fixes the problem by making sure SHOW CREATE TABLE uses
    the MDL_SHARED_HIGH_PRIO metadata lock request type when trying to
    open the table. The patch also fixes a similar problem with the
    mysql_list_fields API call.
    
    Test case added to show_check.test.
    d3d459a7
show_check.test 28.4 KB