1. 07 May, 2020 1 commit
    • Marko Mäkelä's avatar
      MDEV-22497 [ERROR] InnoDB: Unable to purge a record · 26aab96e
      Marko Mäkelä authored
      The InnoDB insert buffer was upgraded in MySQL 5.5 into a change
      buffer that also covers delete-mark and delete (purge) operations.
      
      There is an important constraint for delete operations: a B-tree
      leaf page must not become empty unless the entire tree becomes empty,
      consisting of an empty root page. Because change buffer merges only
      occur on a single leaf page at a time, delete operations must not be
      buffered if it is possible that the last record of the page could be
      deleted. (In that case, we would refuse to use the change buffer, and
      if we really delete the last record, we would shrink the index tree.)
      
      The function ibuf_get_volume_buffered_hash() is part of our insurance
      that the page would not become empty. It is supposed to map each
      buffered INSERT or DELETE_MARK record payload into a hash value.
      We will only count each such record as a distinct key if there is no
      hash collision. DELETE operations will always decrement the predicted
      number fo records in the page.
      
      Due to a bug in the function, we would actually compute the hash value
      not only on the record payload, but also on some following bytes,
      in case the record contains NULL values. In MySQL Bug #61104, we had
      some examples of this dating back to 2012. But back then, we failed to
      reproduce the bug, and in commit d84c9557
      we simply demoted the hard assertion to a message printout and a debug
      assertion failure.
      
      ibuf_get_volume_buffered_hash(): Correctly compute the hash value
      of the payload bytes only. Note: we will consider
      ('foo','bar'),(NULL,'foobar'),('foob','ar') to be equal, but this
      is not a problem, because in case of a hash collision, we could
      also consider ('boo','far') to be equal, and underestimate the number
      of records in the page, leading to refusing to buffer a DELETE.
      26aab96e
  2. 06 May, 2020 2 commits
  3. 05 May, 2020 1 commit
  4. 04 May, 2020 3 commits
  5. 30 Apr, 2020 12 commits
  6. 29 Apr, 2020 7 commits
  7. 28 Apr, 2020 4 commits
    • Marko Mäkelä's avatar
      InnoDB 5.6.48 · 713e427b
      Marko Mäkelä authored
      713e427b
    • Marko Mäkelä's avatar
      MDEV-22393 Corruption for SET GLOBAL innodb_ string variables · 70418074
      Marko Mäkelä authored
      Several MYSQL_SYSVAR_STR parameters that employ both a validate
      function callback fail to copy the string for saving the
      validated value. The affected variables include the following:
      
      innodb_ft_aux_table
      innodb_ft_server_stopword_table
      innodb_ft_user_stopword_table
      innodb_buffer_pool_filename
      
      The test case is an enhanced version of
      mysql/mysql-server@0b0c30641fd66336e87394ac28587e40864f8af9
      and the code changes are inspired by their fixes.
      
      We are also importing and adjusting the test innodb_fts.stopword
      to get coverage for the variable innodb_ft_user_stopword_table.
      
      buf_dump(), buf_load(): Protect srv_buf_dump_filename with
      LOCK_global_system_variables.
      
      fts_load_user_stopword(): Minor cleanup
      
      fts_load_stopword(): Remove the parameter global_stopword_table.
      
      innobase_fts_load_stopword(): Protect innodb_server_stopword_table
      against concurrent SET GLOBAL.
      70418074
    • Marko Mäkelä's avatar
      MDEV-22392 Race condition on SET GLOBAL innodb_buffer_pool_evict='uncompressed' · cce1b6e2
      Marko Mäkelä authored
      innodb_buffer_pool_evict_uncompressed(): Restart the loop when
      prev_block might not enjoy mutex protection.
      
      This is based on
      mysql/mysql-server@eccaecac070b6747ecf14d6b9150791f8c3e8f6d
      cce1b6e2
    • Marko Mäkelä's avatar
      Remove a duplicated copyright message · cf64d27b
      Marko Mäkelä authored
      cf64d27b
  8. 27 Apr, 2020 8 commits
    • Marko Mäkelä's avatar
      XtraDB 5.6.47-87.0 · d956175d
      Marko Mäkelä authored
      The only change is a change of the version number.
      As noted in commit 02af6278
      there were no changes to InnoDB between MySQL 5.6.46 and 5.6.47
      either.
      d956175d
    • Marko Mäkelä's avatar
      MDEV-7962 wsrep_on() takes 0.14% in OLTP RO · edbdfc2f
      Marko Mäkelä authored
      The function wsrep_on() was being called rather frequently
      in InnoDB and XtraDB. Let us cache it in trx_t and invoke
      trx_t::is_wsrep() instead.
      
      innobase_trx_init(): Cache trx->wsrep = wsrep_on(thd).
      
      ha_innobase::write_row(): Replace many repeated calls to current_thd,
      and test the cheapest condition first.
      edbdfc2f
    • Sergei Golubchik's avatar
      MDEV-22271 Excessive stack memory usage due to WSREP_LOG · dd4124c2
      Sergei Golubchik authored
      fix embedded innodb_plugin tests
      
      followup for 7198c6ab
      dd4124c2
    • Sergei Golubchik's avatar
      MDEV-22078 MariaDB-compat missing from MariaDB 10.4 CentOS 8 Yum Repo · f462fbac
      Sergei Golubchik authored
      Backport INSALL_SYMLINK cmake macro from 10.3.
      It'll make libmysqlclient_r.* symlinks to link to the actual
      shared library file, not to another symlink.
      
      As a bonus it'll fix cmake warning about deprecated LOCATION property
      f462fbac
    • Marko Mäkelä's avatar
      MDEV-22203: WSREP_ON is unnecessarily expensive to evaluate · 6be05ceb
      Marko Mäkelä authored
      This is a backport of the applicable part of
      commit 93475aff and
      commit 2c39f69d
      from 10.4.
      
      Before 10.4 and Galera 4, WSREP_ON is a macro that points to
      a global Boolean variable, so it is not that expensive to
      evaluate, but we will add an unlikely() hint around it.
      
      WSREP_ON_NEW: Remove. This macro was introduced in
      commit c863159c
      when reverting WSREP_ON to its previous definition.
      
      We replace some use of WSREP_ON with WSREP(thd), like it was done
      in 93475aff. Note: the macro
      WSREP() in 10.1 is equivalent to WSREP_NNULL() in 10.4.
      
      Item_func_rand::seed_random(): Avoid invoking current_thd
      when WSREP is not enabled.
      6be05ceb
    • Marko Mäkelä's avatar
      Fix clang 10 warnings · 758fbec6
      Marko Mäkelä authored
      _ma_fetch_keypage(): Correct an assertion that used to always hold.
      Thanks to clang -Wint-in-bool-context for flagging this.
      
      double_to_datetime_with_warn(): Suppress -Wimplicit-int-float-conversion
      by adding a cast. LONGLONG_MAX converted to double will actually be
      LONGLONG_MAX+1.
      758fbec6
    • Marko Mäkelä's avatar
      6a3fc110
    • Marko Mäkelä's avatar
      MDEV-22271: Follow-up fix of --embedded · d28ee189
      Marko Mäkelä authored
      Since commit 7198c6ab
      the ./mtr --embedded tests would fail to start innodb_plugin
      because of an undefined reference to the symbol wsrep_log().
      
      Let us define a stub for that function. The embedded server
      is never built WITH_WSREP, but there are no separate storage
      engine builds for the embedded server. Hence, by default,
      the dynamic InnoDB storage engine plugin would be built WITH_WSREP
      and it would fail to load into the embedded server library due to
      a reference to the undefined symbol.
      d28ee189
  9. 25 Apr, 2020 1 commit
  10. 24 Apr, 2020 1 commit