1. 13 Dec, 2018 9 commits
    • 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
    • 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 12 commits
  3. 11 Dec, 2018 1 commit
  4. 10 Dec, 2018 5 commits
    • Vladislav Vaintroub's avatar
    • Varun Gupta's avatar
      MDEV-17778: Alter table leads to a truncation warning with ANALYZE command · 8aef7f2b
      Varun Gupta authored
      Alter statement changed the THD structure by setting the value to FIELD_CHECK_WARN
      and then not resetting it back. This led ANALYZE to throw a warning which previously
      it didn't.
      8aef7f2b
    • Marko Mäkelä's avatar
      MDEV-17938: ALTER TABLE error handling accesses freed memory · a7251634
      Marko Mäkelä authored
      This regression was introduced in MDEV-11369 instant ADD COLUMN.
      
      prepare_inplace_alter_table_dict(): Avoid dereferencing ctx->new_table
      after row_create_table_for_mysql() returns a failure code, because
      it will have freed the memory.
      a7251634
    • Marko Mäkelä's avatar
      Merge 10.2 into 10.3 · 1d18665e
      Marko Mäkelä authored
      1d18665e
    • Marko Mäkelä's avatar
      MDEV-17938 ALTER TABLE reports ER_TABLESPACE_EXISTS after failed ALTER TABLE · 0d7cf06a
      Marko Mäkelä authored
      There was a race condition in the error handling of ALTER TABLE when
      the table contains FULLTEXT INDEX.
      
      During the error handling of an erroneous ALTER TABLE statement,
      when InnoDB would drop the internally created tables for FULLTEXT INDEX,
      it could happen that one of the hidden tables was being concurrently
      accessed by a background thread. Because of this, InnoDB would defer
      the drop operation to the background.
      
      However, related to MDEV-13564 backup-safe TRUNCATE TABLE and its
      prerequisite MDEV-14585, we had to make the background drop table queue
      crash-safe by renaming the table to a temporary name before enqueueing it.
      This renaming was introduced in a follow-up of the MDEV-13407 fix.
      As part of this rename operation, we were unnecessarily parsing the
      current SQL statement, because the same rename operation could also be
      executed as part of ALTER TABLE via ha_innobase::rename_table().
      
      If an ALTER TABLE statement was being refused due to incorrectly formed
      FOREIGN KEY constraint, then it could happen that the renaming of the hidden
      internal tables for FULLTEXT INDEX could also fail, triggering a host of
      error log messages, and causing a subsequent table-rebuilding ALTER TABLE
      operation to fail due to the tablespace already existing.
      
      innobase_rename_table(), row_rename_table_for_mysql(): Add the parameter
      use_fk for suppressing the parsing of FOREIGN KEY constraints. It
      will only be passed as use_fk=true by ha_innobase::rename_table(),
      which can be invoked as part of ALTER TABLE...ALGORITHM=COPY.
      0d7cf06a
  5. 08 Dec, 2018 1 commit
  6. 07 Dec, 2018 10 commits
  7. 06 Dec, 2018 2 commits