1. 13 Dec, 2018 16 commits
    • Aleksey Midenkov's avatar
      330c6218
    • Marko Mäkelä's avatar
      Introduce dict_table_t::init_instant() · a044e326
      Marko Mäkelä authored
      dict_table_t::init_instant(): Initialize instant->non_pk_col_map[].
      Refactored from dict_table_t::instant_column().
      Also, assert that the n_nullable for the clustered index is initialized
      correctly.
      a044e326
    • Marko Mäkelä's avatar
      Add dict_col_t::same_format() · b32a3191
      Marko Mäkelä authored
      dict_col_t::same_format(): Check if two columns have the same
      data type and compatible length.
      b32a3191
    • Marko Mäkelä's avatar
      MDEV-15563: Instantly change a column to NULL · 7a27db77
      Marko Mäkelä authored
      Allow instant changes of columns in ROW_FORMAT=REDUNDANT
      from NOT NULL to NULL.
      
      Later, this may be implemented for ROW_FORMAT=COMPACT or DYNAMIC,
      but in that case any indexes on the table must be rebuilt.
      
      dict_table_t::prepare_instant(): Add some debug assertions,
      and relax a debug assertion so that the number of fields is
      allowed not to change.
      
      dict_index_t::instant_add_field(): Relax a debug assertion,
      allowing a column to change from NOT NULL to NULL.
      
      dict_table_t::instant_column(): Add debug assertions.
      
      instant_alter_column_possible(): Allow ALTER_COLUMN_NULLABLE
      when applicable.
      
      innodb_insert_sys_columns(): Add the parameter bool update=false
      to run UPDATE instead of INSERT.
      
      innobase_instant_add_col(): Remove; let the only caller invoke
      innodb_insert_sys_columns() directly.
      
      innobase_instant_try(): Update the SYS_COLUMNS record if the
      column is changed. Only convert the table to the instant ALTER TABLE
      format if necessary. For ALTER_COLUMN_NULLABLE in ROW_FORMAT=REDUNDANT,
      there is no data format change.
      7a27db77
    • Marko Mäkelä's avatar
      MDEV-17958: Remove WITH_INNODB_BUG_ENDIAN_CRC32 · 62d28f83
      Marko Mäkelä authored
      Remove the bug-compatible crc32 algorithm variant that was added
      to allow an upgrade from data files from big-endian systems where
      innodb_checksum_algorithm=crc32 was used on MySQL 5.6
      or MariaDB 10.0 or 10.1.
      
      Affected users should be able to recompute page checksums using
      innochecksum.
      62d28f83
    • Marko Mäkelä's avatar
      Merge 10.3 into 10.4 · 6dbc50a3
      Marko Mäkelä authored
      6dbc50a3
    • Marko Mäkelä's avatar
      Merge 10.2 into 10.3 · f6e16bdc
      Marko Mäkelä authored
      f6e16bdc
    • Marko Mäkelä's avatar
      MDEV-17989 InnoDB: Failing assertion: dict_tf2_is_valid(flags, flags2) · e3dda3d9
      Marko Mäkelä authored
      With innodb_default_row_format=redundant, InnoDB would crash when
      using table options that are incompatible with ROW_FORMAT=REDUNDANT.
      
      create_table_info_t::m_default_row_format: Cache the value of
      innodb_default_row_format.
      
      create_table_info_t::check_table_options(): Validate ROW_TYPE_DEFAULT
      with m_default_row_format.
      
      create_table_info_t::innobase_table_flags(): Use the
      cached m_default_row_format.
      
      create_table_info_t: Never read m_form->s->row_type.
      Use m_create_info->row_type instead.
      
      dict_tf_set(): Never set invalid flags for ROW_FORMAT=REDUNDANT.
      
      ha_innobase::truncate(): Set info.row_type based on the ROW_FORMAT
      of the current table.
      e3dda3d9
    • Marko Mäkelä's avatar
      MDEV-17958 Make bug-endian innodb_checksum_algorithm=crc32 optional · 1a780eef
      Marko Mäkelä authored
      In MySQL 5.7, it was noticed that files are not portable between
      big-endian and little-endian processor architectures
      (such as SPARC and x86), because the original implementation of
      innodb_checksum_algorithm=crc32 was not byte order agnostic.
      
      A byte order agnostic implementation of innodb_checksum_algorithm=crc32
      was only added to MySQL 5.7, not backported to 5.6. Consequently,
      MariaDB Server versions 10.0 and 10.1 only contain the CRC-32C
      implementation that works incorrectly on big-endian architectures,
      and MariaDB Server 10.2.2 got the byte-order agnostic CRC-32C
      implementation from MySQL 5.7.
      
      MySQL 5.7 introduced a "legacy crc32" variant that is functionally
      equivalent to the big-endian version of the original crc32 implementation.
      Thanks to this variant, old data files can be transferred from big-endian
      systems to newer versions.
      
      Introducing new variants of checksum algorithms (without introducing
      new names for them, or something on the pages themselves to identify
      the algorithm) generally is a bad idea, because each checksum algorithm
      is like a lottery ticket. The more algorithms you try, the more likely
      it will be for the checksum to match on a corrupted page.
      
      So, essentially MySQL 5.7 weakened innodb_checksum_algorithm=crc32,
      and MariaDB 10.2.2 inherited this weakening.
      
      We introduce a build option that together with MDEV-17957
      makes innodb_checksum_algorithm=strict_crc32 strict again
      by only allowing one variant of the checksum to match.
      
      WITH_INNODB_BUG_ENDIAN_CRC32: A new cmake option for enabling the
      bug-compatible "legacy crc32" checksum. This is only enabled on
      big-endian systems by default, to facilitate an upgrade from
      MariaDB 10.0 or 10.1. Checked by #ifdef INNODB_BUG_ENDIAN_CRC32.
      
      ut_crc32_byte_by_byte: Remove (unused function).
      
      legacy_big_endian_checksum: Remove. This variable seems to have
      unnecessarily complicated the logic. When the weakening is enabled,
      we must always fall back to the buggy checksum.
      
      buf_page_check_crc32(): A helper function to compute one or
      two CRC-32C variants.
      1a780eef
    • Marko Mäkelä's avatar
      Merge 10.1 into 10.2 · 2e5aea4b
      Marko Mäkelä authored
      2e5aea4b
    • Marko Mäkelä's avatar
      Merge 10.0 into 10.1 · 621041b6
      Marko Mäkelä authored
      Also, apply the MDEV-17957 changes to encrypted page checksums,
      and remove error message output from the checksum function,
      because these messages would be useless noise when mariabackup
      is retrying reads of corrupted-looking pages, and not that
      useful during normal server operation either.
      
      The error messages in fil_space_verify_crypt_checksum()
      should be refactored separately.
      621041b6
    • Alexander Barkov's avatar
    • Marko Mäkelä's avatar
      Fix cmake -DWITH_PARTITION_STORAGE_ENGINE:BOOL=OFF · 8e613458
      Marko Mäkelä authored
      This is a backport of a part of
      commit 18455ec3
      from 10.1.
      8e613458
    • Marko Mäkelä's avatar
      Remove space before #ifdef · 5ab91f59
      Marko Mäkelä authored
      5ab91f59
    • Thirunarayanan Balathandayuthapani's avatar
      MDEV-17957 Make Innodb_checksum_algorithm stricter for strict_* values · 5f5e73f1
      Thirunarayanan Balathandayuthapani authored
      Problem:
      
        Innodb_checksum_algorithm checks for all checksum algorithm to
      validate the page checksum even though the algorithm is specified as
      strict_crc32, strict_innodb, strict_none.
      
      Fix:
      
         Remove the checks for all checksum algorithm to validate the page
      checksum if the algo is specified as strict_* values.
      5f5e73f1
    • Varun Gupta's avatar
  2. 12 Dec, 2018 24 commits