1. 21 Dec, 2017 3 commits
  2. 20 Dec, 2017 5 commits
    • Marko Mäkelä's avatar
      Merge bb-10.2-ext into 10.3 · 1ec8d45c
      Marko Mäkelä authored
      1ec8d45c
    • Marko Mäkelä's avatar
      69e88de0
    • Marko Mäkelä's avatar
      MDEV-14585 Automatically remove #sql- tables in InnoDB dictionary during recovery · b4165985
      Marko Mäkelä authored
      Now that MDEV-14717 made RENAME TABLE crash-safe within InnoDB,
      it should be safe to drop the #sql- tables within InnoDB during
      crash recovery. These tables can be one of two things:
      
      (1) #sql-ib related to deferred DROP TABLE (follow-up to MDEV-13407)
      or to table-rebuilding ALTER TABLE...ALGORITHM=INPLACE
      (since MDEV-14378, only related to the intermediate copy of a table),
      
      (2) #sql- related to the intermediate copy of a table during
      ALTER TABLE...ALGORITHM=COPY
      
      We will not drop tables whose name starts with #sql2, because
      the server can be killed during an ALGORITHM=COPY operation at
      a point where the original table was renamed to #sql2 but the
      finished intermediate copy was not yet renamed from #sql-
      to the original table name.
      b4165985
    • Marko Mäkelä's avatar
      Merge bb-10.2-ext into 10.3 · 2534b5cb
      Marko Mäkelä authored
      2534b5cb
    • Marko Mäkelä's avatar
      MDEV-14717 RENAME TABLE in InnoDB is not crash-safe · 0bc36758
      Marko Mäkelä authored
      InnoDB in MariaDB 10.2 appears to only write MLOG_FILE_RENAME2
      redo log records during table-rebuilding ALGORITHM=INPLACE operations.
      We must write the records for any .ibd file renames, so that the
      operations are crash-safe.
      
      If InnoDB is killed during a RENAME TABLE operation, it can happen that
      the transaction for updating the data dictionary will be rolled back.
      But, nothing will roll back the renaming of the .ibd file
      (the MLOG_FILE_RENAME2 only guarantees roll-forward), or for that matter,
      the renaming of the dict_table_t::name in the dict_sys cache. We introduce
      the undo log record TRX_UNDO_RENAME_TABLE to fix this.
      
      fil_space_for_table_exists_in_mem(): Remove the parameters
      adjust_space, table_id and some code that was trying to work around
      these deficiencies.
      
      fil_name_write_rename(): Write a MLOG_FILE_RENAME2 record.
      
      dict_table_rename_in_cache(): Invoke fil_name_write_rename().
      
      trx_undo_rec_copy(): Set the first 2 bytes to the length of the
      copied undo log record.
      
      trx_undo_page_report_rename(), trx_undo_report_rename():
      Write a TRX_UNDO_RENAME_TABLE record with the old table name.
      
      row_rename_table_for_mysql(): Invoke trx_undo_report_rename()
      before modifying any data dictionary tables.
      
      row_undo_ins_parse_undo_rec(): Roll back TRX_UNDO_RENAME_TABLE
      by invoking dict_table_rename_in_cache(), which will take care
      of both renaming the table and the file.
      0bc36758
  3. 19 Dec, 2017 14 commits
  4. 18 Dec, 2017 18 commits