Skip to content
  • Libing Song's avatar
    c9c7bda0
    Bug#14801955 TABLE_ID IS DEFINED DIFFERENTLY IN SQL/TABLE.H VS SQL/LOG_EVENT.H · c9c7bda0
    Libing Song authored
    Problem
    =======
    Table id used by replication, was defined as ulong on master
    (TABLE_SHARE::table_map_id). But uint on slave(TABLE_LIST::table_id).
    It caused a few problems below:
    * Data lost on slave if table it was greater than uint.
    * Slave stopped because it found two tables had same table id.
      E.g. t1's id is 0 and t2's id is UINT_MAX+1
    * Table id in Table_map_log_event is 6 Bytes long, so all table ids
      which were greater than max integer of 6 bytes(281474976710655)
      were binlogged as 281474976710655.
    
    Fix
    ===
    Table id on both master and slave are defined as ulonglong now,
    but table id is confined from 0 to 281474976710655(max value of
    6 bytes integer). Table id is allocated in aoto-increment way.
    It will restart from 0, when it exceeds 281474976710655.
    
    I also removed the code to check the dummy event on slave from
    log_event.cc. Dummy event appeared only between 5.1.5 and 5.1.11
    which were still generating old rows log events. FYI, Dummy event
    was removed by revision sp1r-mats@mysql.com-20060531172152-28107.
    c9c7bda0
    Bug#14801955 TABLE_ID IS DEFINED DIFFERENTLY IN SQL/TABLE.H VS SQL/LOG_EVENT.H
    Libing Song authored
    Problem
    =======
    Table id used by replication, was defined as ulong on master
    (TABLE_SHARE::table_map_id). But uint on slave(TABLE_LIST::table_id).
    It caused a few problems below:
    * Data lost on slave if table it was greater than uint.
    * Slave stopped because it found two tables had same table id.
      E.g. t1's id is 0 and t2's id is UINT_MAX+1
    * Table id in Table_map_log_event is 6 Bytes long, so all table ids
      which were greater than max integer of 6 bytes(281474976710655)
      were binlogged as 281474976710655.
    
    Fix
    ===
    Table id on both master and slave are defined as ulonglong now,
    but table id is confined from 0 to 281474976710655(max value of
    6 bytes integer). Table id is allocated in aoto-increment way.
    It will restart from 0, when it exceeds 281474976710655.
    
    I also removed the code to check the dummy event on slave from
    log_event.cc. Dummy event appeared only between 5.1.5 and 5.1.11
    which were still generating old rows log events. FYI, Dummy event
    was removed by revision sp1r-mats@mysql.com-20060531172152-28107.
Loading