• Monty's avatar
    MDEV-23844 Atomic DROP TABLE (single table) · e3cfb7c8
    Monty authored
    Logging logic:
    - Log tables, just before they are dropped, to the ddl log
    - After the last table for the statement is dropped, log an xid for the
      whole ddl log event
    
    In case of crash:
    - Remove first any active DROP TABLE events from the ddl log that matches
      xids found in binary log (this mean the drop was successful and was
      propery logged).
    - Loop over all active DROP TABLE events
      - Ensure that the table is completely dropped
    - Write a DROP TABLE entry to the binary log with the dropped tables.
    
    Other things:
    - Added code to ha_drop_table() to be able to tell the difference if
      a get_new_handler() failed because of out-of-memory or because the
      handler refused/was not able to create a a handler. This was needed
      to get sequences to work as sequences needs a share object to be passed
      to get_new_handler()
    - TC_LOG_BINLOG::recover() was changed to always collect Xid's from the
      binary log and always call ddl_log_close_binlogged_events(). This was
      needed to be able to collect DROP TABLE events with embedded Xid's
      (used by ddl log).
    - Added a new variable "$grep_script" to binlog filter to be able to find
      only rows that matches a regexp.
    - Had to adjust some test that changed because drop statements are a bit
      larger in the binary log than before (as we have to store the xid)
    
    Other things:
    - MDEV-25588 Atomic DDL: Binlog query event written upon recovery is corrupt
      fixed (in the original commit).
    e3cfb7c8
ddl_log.cc 63.2 KB