• Mats Kindahl's avatar
    Bug #38360: BLACKHOLE replication with RBR is broken · 8d9cf89e
    Mats Kindahl authored
    The Blackhole engine did not support row-based replication
    since the delete_row(), update_row(), and the index and range
    searching functions were not implemented.
    
    This patch adds row-based replication support for the
    Blackhole engine by implementing the two functions mentioned
    above, and making the engine pretend that it has found the
    correct row to delete or update when executed from the slave
    SQL thread by implementing index and range searching functions.
    
    It is necessary to only pretend this for the SQL thread, since
    a SELECT executed on the Blackhole engine will otherwise never
    return EOF, causing a livelock.
    
    
    mysql-test/extra/binlog_tests/blackhole.test:
      Blackhole now handles row-based replication.
    mysql-test/extra/rpl_tests/rpl_blackhole.test:
      Test helper file for testing that blackhole actually
      writes something to the binary log on the slave.
    mysql-test/suite/binlog/t/binlog_multi_engine.test:
      Replication now handles row-based replcation.
    mysql-test/suite/rpl/t/rpl_blackhole.test:
      Test that Blackhole works with primary key, index, or none.
    sql/log_event.cc:
      Correcting code to only touch filler bits and leave
      all other bits alone. It is necessary since there is
      no guarantee that the engine will be able to fill in
      the bits correctly (e.g., the blackhole engine).
    storage/blackhole/ha_blackhole.cc:
      Adding definitions for update_row() and delete_row() to return OK
      when executed from the slave SQL thread with thd->query == NULL
      (indicating that row-based replication events are being processed).
      
      Changing rnd_next(), index_read(), index_read_idx(), and
      index_read_last() to return OK when executed from the slave SQL
      thread (faking that the row has been found so that processing
      proceeds to update/delete the row).
    storage/blackhole/ha_blackhole.h:
      Enabling row capabilities for engine.
      Defining write_row(), update_row(), and delete_row().
      Making write_row() private (as it should be).
    8d9cf89e
ha_blackhole.cc 9.78 KB