• unknown's avatar
    Fix for BUG#2477 "Slave stop with error after master reboot if use HEAP tables": · bbd2adf4
    unknown authored
    when we open the HEAP table for the first time since server restart,
    in hp_open(), we set a flag to propagate this info to the handler level
    which then writes a DELETE FROM this_heap_table to the binlog.
    It is not a perfect solution for the bug, because between the server start and 
    the first open of the table, the slave still had old data in his table so
    a SELECT on the slave may show wrong content. But if there is a --init-file
    to populate the HEAP table on master as startup, then this is a safe fix
    (I'll put a note about init-file in the HEAP section of the manual).
    
    
    heap/hp_info.c:
      new info variable implicit_emptied
    heap/hp_open.c:
      If this is the first open of the HEAP table, it means it is empty,
      so we mark it.
    include/heap.h:
      new variables implicit_emptied
      (we need one in HEAPINFO for the hp_info() call).
    sql/ha_heap.cc:
      report info to upper level
    sql/handler.h:
      new info 'implicit_emptied' in the handler level; only HEAP uses it.
    sql/sql_base.cc:
      When a HEAP table is opened for the first time, write a DELETE FROM to the binlog,
      for replication and mysqlbinlog|mysql.
      Monty: I added the
      entry->file->implicit_emptied= 0;
    bbd2adf4
sql_base.cc 63 KB