1. 15 Jan, 2021 5 commits
  2. 14 Jan, 2021 1 commit
    • Marko Mäkelä's avatar
      MDEV-24569: Change buffer merge modifies freed page · deadec4e
      Marko Mäkelä authored
      Starting with MDEV-15528, we will avoid writing freed pages back
      to data files. During stress testing, the assertion
      mach_read_from_4(frame + 4U) == block.page.id().page_no()
      failed in log_phys_t::apply(), because before the server was
      killed and restarted, change buffer merge was executed on a
      previously freed page.
      
      During recovery, the assertion would fail when InnoDB would apply
      a FREE_PAGE and a WRITE record to the page.
      
      ibuf_merge_or_delete_for_page(): Before applying any changes, check whether
      the secondary index leaf page has already been freed according to
      the allocation bitmap page. If it is freed, then we must reset the bits
      in change buffer bitmap page.
      
      ibuf_reset_bitmap(): Auxiliary function for repeated code.
      
      mtr_t::sx_lock_space(): Replaces mtr_t::x_lock_space(). Due to the
      lazy approach of the change buffer, The function
      ibuf_merge_or_delete_for_page() may be executed in buf_page_create()
      while the tablespace is already X-latched. An S-latch must not be
      acquired while the thread already holds an X-latch, but a redundant
      SX-latch is fine.
      
      The fix was developed by Thirunarayanan Balathandayuthapani.
      deadec4e
  3. 13 Jan, 2021 1 commit
    • Marko Mäkelä's avatar
      MDEV-24536 innodb_idle_flush_pct has no effect · e4205fba
      Marko Mäkelä authored
      The parameter innodb_idle_flush_pct that was introduced in
      MariaDB Server 10.1.2 by MDEV-6932 has no effect ever since
      the InnoDB changes from MySQL 5.7.9 were applied in
      commit 2e814d47.
      
      Let us declare the parameter as MARIADB_REMOVED_OPTION.
      For earlier versions, commit ea9cd97f
      declared the parameter deprecated.
      e4205fba
  4. 12 Jan, 2021 7 commits
  5. 11 Jan, 2021 3 commits
  6. 10 Jan, 2021 1 commit
  7. 09 Jan, 2021 3 commits
  8. 08 Jan, 2021 6 commits
    • Jan Lindström's avatar
      MDEV-23536 : Race condition between KILL and transaction commit · 775fccea
      Jan Lindström authored
      A race condition may occur between the execution of transaction commit,
      and an execution of a KILL statement that would attempt to abort that
      transaction.
      
      MDEV-17092 worked around this race condition by modifying InnoDB code.
      After that issue was closed, Sergey Vojtovich pointed out that this
      race condition would better be fixed above the storage engine layer:
      
      If you look carefully into the above, you can conclude that
      thd->free_connection() can be called concurrently with
      KILL/thd->awake(). Which is the bug. And it is partially fixed in
      THD::~THD(), that is destructor waits for KILL completion:
      
      Fix: Add necessary mutex operations to THD::free_connection()
      and move WSREP specific code also there. This ensures that no
      one is using THD while we do free_connection(). These mutexes
      will also ensures that there can't be concurrent KILL/THD::awake().
      
      innobase_kill_query
        We can now remove usage of trx_sys_mutex introduced on MDEV-17092.
      
      trx_t::free()
        Poison trx->state and trx->mysql_thd
      
      This patch is validated with an RQG run similar to the one that
      reproduced MDEV-17092.
      775fccea
    • Marko Mäkelä's avatar
      18254c18
    • Nikita Malyavin's avatar
      fixup MDEV-17556: fix mroonga · 61a362c9
      Nikita Malyavin authored
      61a362c9
    • Jan Lindström's avatar
      Update wsrep-lib · 26d913a7
      Jan Lindström authored
      26d913a7
    • Marko Mäkelä's avatar
      cd1e5d65
    • Nikita Malyavin's avatar
      MDEV-17556 Assertion `bitmap_is_set_all(&table->s->all_set)' failed · e25623e7
      Nikita Malyavin authored
      The assertion failed in handler::ha_reset upon SELECT under
      READ UNCOMMITTED from table with index on virtual column.
      
      This was the debug-only failure, though the problem is mush wider:
      * MY_BITMAP is a structure containing my_bitmap_map, the latter is a raw
       bitmap.
      * read_set, write_set and vcol_set of TABLE are the pointers to MY_BITMAP
      * The rest of MY_BITMAPs are stored in TABLE and TABLE_SHARE
      * The pointers to the stored MY_BITMAPs, like orig_read_set etc, and
       sometimes all_set and tmp_set, are assigned to the pointers.
      * Sometimes tmp_use_all_columns is used to substitute the raw bitmap
       directly with all_set.bitmap
      * Sometimes even bitmaps are directly modified, like in
      TABLE::update_virtual_field(): bitmap_clear_all(&tmp_set) is called.
      
      The last three bullets in the list, when used together (which is mostly
      always) make the program flow cumbersome and impossible to follow,
      notwithstanding the errors they cause, like this MDEV-17556, where tmp_set
      pointer was assigned to read_set, write_set and vcol_set, then its bitmap
      was substituted with all_set.bitmap by dbug_tmp_use_all_columns() call,
      and then bitmap_clear_all(&tmp_set) was applied to all this.
      
      To untangle this knot, the rule should be applied:
      * Never substitute bitmaps! This patch is about this.
       orig_*, all_set bitmaps are never substituted already.
      
      This patch changes the following function prototypes:
      * tmp_use_all_columns, dbug_tmp_use_all_columns
       to accept MY_BITMAP** and to return MY_BITMAP * instead of my_bitmap_map*
      * tmp_restore_column_map, dbug_tmp_restore_column_maps to accept
       MY_BITMAP* instead of my_bitmap_map*
      
      These functions now will substitute read_set/write_set/vcol_set directly,
      and won't touch underlying bitmaps.
      e25623e7
  9. 07 Jan, 2021 5 commits
  10. 06 Jan, 2021 3 commits
    • Andrei Elkin's avatar
      MDEV-19442 add-on · f319c426
      Andrei Elkin authored
      fixing windows build.
      f319c426
    • Marko Mäkelä's avatar
      MDEV-24537 innodb_max_dirty_pages_pct_lwm=0 lost its special meaning · a9933105
      Marko Mäkelä authored
      In commit 3a9a3be1 (MDEV-23855)
      some previous logic was replaced with the condition
      dirty_pct < srv_max_dirty_pages_pct_lwm, which caused
      the default value of the parameter innodb_max_dirty_pages_pct_lwm=0
      to lose its special meaning: 'refer to innodb_max_dirty_pages_pct instead'.
      
      This implicit special meaning was visible in the function
      af_get_pct_for_dirty(), which was removed in
      commit f0c295e2 (MDEV-24369).
      
      page_cleaner_flush_pages_recommendation(): Restore the special
      meaning that was removed in MDEV-24369.
      
      buf_flush_page_cleaner(): If srv_max_dirty_pages_pct_lwm==0.0,
      refer to srv_max_buf_pool_modified_pct. This fixes the observed
      performance regression due to excessive page flushing.
      
      buf_pool_t::page_cleaner_wakeup(): Revise the wakeup condition.
      
      innodb_init(): Do initialize srv_max_io_capacity in Mariabackup.
      It was previously constantly 0, which caused mariadb-backup --prepare
      to hang in buf_flush_sync(), making no progress.
      a9933105
    • Oleksandr Byelkin's avatar
      Merge commit '10.4' into 10.5 · 02e7bff8
      Oleksandr Byelkin authored
      02e7bff8
  11. 05 Jan, 2021 4 commits
  12. 04 Jan, 2021 1 commit