1. 01 Sep, 2017 10 commits
    • Oleksandr Byelkin's avatar
      Fix of a warning of gcc 7.0 · 9ff7129f
      Oleksandr Byelkin authored
      9ff7129f
    • Marko Mäkelä's avatar
      MDEV-13359 Enable ALTER TABLE...ALGORITHM=INPLACE for compressed columns · a8ec55e4
      Marko Mäkelä authored
      innobase_rec_reset(): Remove. This function was introduced in the
      InnoDB Plugin for MySQL 5.1, which later evolved into MySQL 5.5.
      There used to be a bug that ADD UNIQUE INDEX would not always correctly
      report the duplicate key value of the secondary index. This function
      ensured that instead of reporting total garbage values, InnoDB
      would report NULL.
      
      It looks like the function was made unnecessary in MySQL 5.6.6 by
      https://github.com/mysql/mysql-server/commit/d143097eb1e02904baed34990db637ff68fe3113
      
      The corresponding test was subsequently adjusted in
      https://github.com/mysql/mysql-server/commit/fde80cf49d4b7635d2aef47d8a77681f2df62105
      
      The ALTER TABLE tests were imported to MariaDB as part of MDEV-13625,
      and these tests do pass with this change.
      
      The unnecessary function did not do any harm before MDEV-11371 introduced
      compressed columns.
      
      One question remains: What if we needed to report a duplicate key value
      for a compressed column? The simple answer is that the test
      main.column_compression demonstrates that no indexes can be defined
      on compressed columns.
      a8ec55e4
    • Marko Mäkelä's avatar
      Fix a buffer overflow in INFORMATION_SCHEMA.GLOBAL_VARIABLES, caused by MDEV-12179 · 8a8cca28
      Marko Mäkelä authored
      pretty_print_engine_list(): When the plugin list is empty, return
      an empty string instead of allocating a buffer of 0 bytes and then
      trying to write a NUL byte into it.
      8a8cca28
    • Marko Mäkelä's avatar
      Merge bb-10.2-ext into 10.3 · 4e1fa7f6
      Marko Mäkelä authored
      4e1fa7f6
    • Marko Mäkelä's avatar
      After-merge fixes for Galera test results · 2f3968d9
      Marko Mäkelä authored
      2f3968d9
    • Marko Mäkelä's avatar
      Merge 10.2 into bb-10.2-ext · 05cc028f
      Marko Mäkelä authored
      05cc028f
    • Marko Mäkelä's avatar
      After-merge fix for a Galera test result · b660584b
      Marko Mäkelä authored
      b660584b
    • Marko Mäkelä's avatar
      MDEV-13654 Various crashes due to DB_TRX_ID mismatch in table-rebuilding ALTER TABLE…LOCK=NONE · ff81faf6
      Marko Mäkelä authored
      After MDEV-12288 and MDEV-13536, the DB_TRX_ID of old clustered index
      records for which no history is available should be reset to 0.
      
      This caused crashes in online table-rebuilding ALTER, because the
      row_log_table_apply() is built on the assumption that the PRIMARY KEY
      together with DB_TRX_ID,DB_ROLL_PTR identifies the record.
      
      Both when copying the old table and when writing log about changes to
      the old table, we must map "old" DB_TRX_ID to 0. "old" here is simply
      "older than the trx_id of the ALTER TABLE transaction", because
      the MDL_EXCLUSIVE (and exclusive InnoDB table lock) in
      ha_innobase::prepare_inplace_alter_table() forces any transactions
      accessing the table to commit or rollback. So, we know that we can
      safely reset any DB_TRX_ID in the table that is older than the
      transaction ID of the ALTER TABLE, because the undo log history would be
      lost in a table-rebuilding ALTER.
      
      Note: After a table-rebuilding online ALTER TABLE, the rebuilt table
      may end up containing some nonzero DB_TRX_ID columns. The apply logic
      identifies the rows by the combination of PRIMARY KEY and DB_TRX_ID.
      These nonzero DB_TRX_ID would necessarily refer to concurrent DML
      operations that were started during ha_innobase::inplace_alter_table().
      
      row_log_allocate(): Add a parameter for the ALTER TABLE transaction.
      
      row_log_t::min_trx: The ALTER TABLE transaction ID.
      
      trx_id_check(): A debug function to check that DB_TRX_ID makes sense
      (is either 0 or bigger than the ALTER TABLE transaction ID).
      
      reset_trx_id[]: The reset DB_TRX_ID,DB_ROLL_PTR columns.
      
      row_log_table_delete(), row_log_table_get_pk(): Reset the
      DB_TRX_ID,DB_ROLL_PTR when they precede the ALTER TABLE transaction.
      
      row_log_table_apply_delete(), row_log_table_apply_update():
      Assert trx_id_check().
      
      row_merge_insert_index_tuples(): Remove the unused parameter trx_id.
      
      row_merge_read_clustered_index(): In a table-rebuilding ALTER,
      reset the DB_TRX_ID,DB_ROLL_PTR when they precede the ALTER TABLE
      transaction. Assert trx_id_check() on clustered index records that
      are being buffered.
      ff81faf6
    • Marko Mäkelä's avatar
      Merge 10.2 into bb-10.2-ext · 6749d39a
      Marko Mäkelä authored
      6749d39a
    • Marko Mäkelä's avatar
  2. 31 Aug, 2017 22 commits
    • Marko Mäkelä's avatar
      Merge 10.1 into 10.2 · 5660c061
      Marko Mäkelä authored
      5660c061
    • Marko Mäkelä's avatar
      Merge 10.0 into 10.1 · be45f083
      Marko Mäkelä authored
      be45f083
    • Vladislav Vaintroub's avatar
      MDEV-13693 : Fix parameter passing to my_error. · 6be93c3b
      Vladislav Vaintroub authored
      char* parameter is expected by the message ER_KEY_COLUMN_DOES_NOT_EXITS,
      thus pass char*, rather than LEX_STRING.
      6be93c3b
    • Vladislav Vaintroub's avatar
      MDEV-13691 : my_write() sets inappropriate errno for ERROR_FILE_SYSTEM_LIMITATON · 66eb9774
      Vladislav Vaintroub authored
      ERROR_FILE_SYSTEM_LIMITATION was seen by support when backing up large
      file. However mariabackup error message was not very helpful,
      since it mapped the error to generic catch-all EINVAL.
      
      With the patch, ERROR_FILE_SYSTEM_LIMITATION will be mapped to more
      appropriate EFBIG. Also add mapping from ERROR_NO_SYSTEM_RESOURCES
      to ENOMEM.
      66eb9774
    • Sergey Vojtovich's avatar
      MDEV-11371 - column compression · fdc47792
      Sergey Vojtovich authored
      Storage engine independent support for column compression.
      
      TINYBLOB, BLOB, MEDIUMBLOB, LONGBLOB, TINYTEXT, TEXT, MEDIUMTEXT, LONGTEXT,
      VARCHAR and VARBINARY columns can be compressed.
      
      New COMPRESSED column attribute added:
      COMPRESSED[=<compression_method>]
      
      System variables added:
      column_compression_threshold
      column_compression_zlib_level
      column_compression_zlib_strategy
      column_compression_zlib_wrap
      
      Status variables added:
      Column_compressions
      Column_decompressions
      
      Limitations:
      - the only supported method currently is zlib
      - CSV storage engine stores data uncompressed on-disk even if COMPRESSED
        attribute is present
      - it is not possible to create indexes over compressed columns.
      fdc47792
    • Marko Mäkelä's avatar
      Disable a badly written, randomly failing Galera test · a9e71c77
      Marko Mäkelä authored
      CURRENT_TEST: galera.galera_kill_applier
      mysqltest: At line 14: query 'KILL $applier_thread' failed with wrong
      errno 1064: 'You have an error in your SQL syntax; check the manual
      that corresponds to your MariaDB server version for the right syntax
      to use near '' at line 1', instead of 1095...
      a9e71c77
    • Sergey Vojtovich's avatar
      Get rid of Field::do_save_field_metadata() · dd4e9cdd
      Sergey Vojtovich authored
      It doesn't serve any purpose, but generates extra virtual function call.
      dd4e9cdd
    • Jan Lindström's avatar
      MDEV-13674: Deprecate innodb_use_mtflush and innodb_mtflush_threads · e23de9f2
      Jan Lindström authored
      These parameters and associated code is to be removed in 10.3.
      Users can use innodb-page-cleaners > 1 instead.
      e23de9f2
    • Peter Shchuchkin's avatar
      Added HITS column to QUERY_CACHE_INFO table · 41d89b7d
      Peter Shchuchkin authored
      Updated qc_info tests, added new test that checks HITS is incremented.
      41d89b7d
    • Peter Shchuchkin's avatar
      Counting hits for queries in query cache. · cf3a74eb
      Peter Shchuchkin authored
      Added hit_count field to Query_cache_query and methods to get and increment it.
      The counter is incremented when query results are read from query cache.
      cf3a74eb
    • Eugene Kosov's avatar
      simplify READ_RECORD usage NFC · 5dd8e1bf
      Eugene Kosov authored
      READ_RECORD read_record;
      ...
      // this
      // read_record.read_record(&read_record);
      // becomes just
      read_record.read_record();
      5dd8e1bf
    • Jan Lindström's avatar
      MDEV-12741: innodb.ibuf_not_empty failed in buildbot with "InnoDB: Trying to... · aa22981d
      Jan Lindström authored
      MDEV-12741: innodb.ibuf_not_empty failed in buildbot with "InnoDB: Trying to do I/O to a tablespace which does not exist"
      
      Background thread is doing ibuf merge, in buf0rea.cc buf_read_ibuf_merge_pages().
      It first tries to get page_size and if space is not found it deletes them, but
      as we do not hold any mutexes, space can be marked as stopped between that
      and buf_read_page_low() for same space. This naturally leads seen error
      message on log.
      
      buf_read_page_low(): Add parameter ignore_missing_space = false that
      is passed to fil_io()
      
      buf_read_ibuf_merge_pages(): call buf_read_page_low with
      ignore_missing_space = true, this function will handle missing
      space error code after buf_read_page_low returns.
      
      fil_io(): if ignore_missing_space = true do not print error
      message about trying to do I/0 for missing space, just return
      correct error code that is handled later.
      aa22981d
    • Sergei Petrunia's avatar
      MDEV-13669: Some MyRocks test take a long time · 0e45edf3
      Sergei Petrunia authored
      Make rocksdb.bloomfilter* tests 1.8x faster by doing loading in bulk
      0e45edf3
    • Marko Mäkelä's avatar
      Merge 10.1 into 10.2 · 2000a900
      Marko Mäkelä authored
      2000a900
    • Marko Mäkelä's avatar
      MDEV-13684 InnoDB race condition between fil_crypt_thread and btr_scrub_init · 38ca9be4
      Marko Mäkelä authored
      There is a race condition in InnoDB startup. A number of
      fil_crypt_thread are created by fil_crypt_threads_init(). These threads
      may call btr_scrub_complete_space() before btr_scrub_init() was called.
      Those too early calls would be accessing an uninitialized scrub_stat_mutex.
      
      innobase_start_or_create_for_mysql(): Invoke btr_scrub_init() before
      fil_crypt_threads_init().
      
      fil_crypt_complete_rotate_space(): Only invoke btr_scrub_complete_space()
      if scrubbing is enabled. There is no need to update the statistics if
      it is not enabled.
      38ca9be4
    • Marko Mäkelä's avatar
      Merge 10.1 into 10.2 · 2f20be94
      Marko Mäkelä authored
      2f20be94
    • Marko Mäkelä's avatar
      Add ATTRIBUTE_NORETURN and ATTRIBUTE_COLD · 4386ee8c
      Marko Mäkelä authored
      ATTRIBUTE_NORETURN is supported on all platforms (MSVS and GCC-like).
      It declares that a function will not return; instead, the thread or
      the whole process will terminate.
      
      ATTRIBUTE_COLD is supported starting with GCC 4.3. It declares that
      a function is supposed to be executed rarely. Rarely used error-handling
      functions and functions that emit messages to the error log should be
      tagged such.
      4386ee8c
    • Marko Mäkelä's avatar
      Fix some badly written Galera tests · 03a8eaa0
      Marko Mäkelä authored
      galera.galera_kill_applier: Make the test less likely to fail
      by adding sleep time.
      
      galera.query_cache: Remove data truncation.
      
      Part of the test file looks like it has been misinterpreted as latin1
      and wrongly converted to UTF-8 encoding. In MariaDB 10.1, the server would
      only warn about data truncation and not issue an error. 10.2 is stricter.
      (The test should be carefully reviewed if it really makes sense.)
      03a8eaa0
    • Marko Mäkelä's avatar
      Merge 10.1 into 10.2 · a36c369b
      Marko Mäkelä authored
      For running the Galera tests, the variable my_disable_leak_check
      was set to true in order to avoid assertions due to memory leaks
      at shutdown.
      
      Some adjustments due to MDEV-13625 (merge InnoDB tests from MySQL 5.6)
      were performed. The most notable behaviour changes from 10.0 and 10.1
      are the following:
      
      * innodb.innodb-table-online: adjustments for the DROP COLUMN
      behaviour change (MDEV-11114, MDEV-13613)
      
      * innodb.innodb-index-online-fk: the removal of a (1,NULL) record
      from the result; originally removed in MySQL 5.7 in the
      Oracle Bug #16244691 fix
      https://github.com/mysql/mysql-server/commit/377774689bf6a16af74182753fe950d514c2c6dd
      
      * innodb.create-index-debug: disabled due to MDEV-13680
      (the MySQL Bug #77497 fix was not merged from 5.6 to 5.7.10)
      
      * innodb.innodb-alter-autoinc: MariaDB 10.2 behaves like MySQL 5.6/5.7,
      while MariaDB 10.0 and 10.1 assign different values when
      auto_increment_increment or auto_increment_offset are used.
      Also MySQL 5.6/5.7 exhibit different behaviour between
      LGORITHM=INPLACE and ALGORITHM=COPY, so something needs to be tested
      and fixed in both MariaDB 10.0 and 10.2.
      
      * innodb.innodb-wl5980-alter: disabled because it would trigger an
      InnoDB assertion failure (MDEV-13668 may need additional effort in 10.2)
      a36c369b
    • Jan Lindström's avatar
      Fixed test failure on innodb_encryption · 28b2896a
      Jan Lindström authored
      After MDEV-13583: Improvements for MTR rebootstrap introduced in
      MDEV-12042 bootsrap correctly creates mysql/innodb_table_stats
      and mysql/innodb_index_stats InnoDB tables before innodb_encryption
      test starts. These tables are also encrypted or decrypted, thus
      we need to wait also these tables (if not we could randomly
      get different results as system tablespace and these tables
      are encrypted or decrypted in parallel).
      28b2896a
    • Jan Lindström's avatar
      Fix test failures on embedded server. · b29f26d7
      Jan Lindström authored
      Problem was incorrect definition of wsrep_recovery,
      trx_sys_update_wsrep_checkpoint and
      trx_sys_read_wsrep_checkpoint functions causing
      innodb_plugin not to load as there was undefined symbols.
      b29f26d7
    • Jan Lindström's avatar
      MDEV-13557: Startup failure, unable to decrypt ibdata1 · eca238ae
      Jan Lindström authored
      Fixes also MDEV-13488: InnoDB writes CRYPT_INFO even though
      encryption is not enabled.
      
      Fixes also MDEV-13093: Leak of Datafile::m_crypt_info on
      shutdown after failed startup.
      
      Problem was that we created encryption metadata (crypt_data) for
      system tablespace even when no encryption was enabled and too early.
      System tablespace can be encrypted only using key rotation.
      
      Test innodb-key-rotation-disable, innodb_encryption, innodb_lotoftables
      require adjustment because INFORMATION_SCHEMA INNODB_TABLESPACES_ENCRYPTION
      contain row only if tablespace really has encryption metadata.
      
      xb_load_single_table_tablespace(): Do not call
      fil_space_destroy_crypt_data() any more, because Datafile::m_crypt_data
      has been removed.
      
      fil_crypt_realloc_iops(): Avoid divide by zero.
      
      fil_crypt_set_thread_cnt(): Set fil_crypt_threads_event if
      encryption threads exist. This is required to find tablespaces
      requiring key rotation if no other changes happen.
      
      fil_crypt_find_space_to_rotate(): Decrease the amount of time waiting
      when nothing happens to better enable key rotation on startup.
      
      fil_ibd_open(), fil_ibd_load(): Load possible crypt_data from first
      page.
      
      class Datafile, class SysTablespace : remove m_crypt_info field.
      
      Datafile::get_first_page(): Return a pointer to first page buffer.
      
      fsp_header_init(): Write encryption metadata to page 0 only if
      tablespace is encrypted or encryption is disabled by table option.
      
      i_s_dict_fill_tablespaces_encryption(): Skip tablespaces that do not
      contain encryption metadata. This is required to avoid too early
      wait condition trigger in encrypted -> unencrypted state transfer.
      eca238ae
  3. 30 Aug, 2017 8 commits