1. 21 Jan, 2021 1 commit
    • Hartmut Holzgraefe's avatar
      MDEV-10271: add master host/port info to slave thread exit messages · fa14c423
      Hartmut Holzgraefe authored
      Sample log error message generated:
      
      mysql-test/var/log/mysqld.2.err:2021-01-21 13:02:30 8 [Note] Slave SQL thread exiting, replication stopped in log 'master-bin.000001' at position 329, master: 127.0.0.1:16000
      mysql-test/var/log/mysqld.2.err:2021-01-21 13:02:30 7 [Note] Slave I/O thread exiting, read up to log 'master-bin.000001', position 329, master 127.0.0.1:16000
      mysql-test/var/log/mysqld.2.err:2021-01-21 13:02:30 12 [Note] Slave SQL thread exiting, replication stopped in log 'master-bin.000001' at position 329; GTID position '', master: 127.0.0.1:16000
      
      Reviewer: knielsen@knielsen-hq.org, Andrei and Sachin
      fa14c423
  2. 15 Jan, 2021 1 commit
  3. 14 Jan, 2021 4 commits
    • Marko Mäkelä's avatar
      Fixup 92abdcca · 0dfabf6e
      Marko Mäkelä authored
      Revert an accidental update of ColumnStore.
      A different submodule is being used between MariaDB 10.5 and 10.6.
      The submodule was accidentally updated to the 10.5 version in the merge.
      0dfabf6e
    • Marko Mäkelä's avatar
      MDEV-24569: Merge 10.5 into 10.6 · 394fc71f
      Marko Mäkelä authored
      fseg_page_is_free(): Because MDEV-24167 changed fil_space_t::latch
      to a simple non-recursive rw-lock, we must avoid acquiring a shared
      latch if the current thread already holds an exclusive latch.
      This affects the test innodb.innodb_bug59733, which is exercising
      the change buffer.
      
      fil_space_t::is_owner(): Make available in non-debug builds.
      394fc71f
    • Marko Mäkelä's avatar
      Merge 10.5 into 10.6 · 6d05a95c
      Marko Mäkelä authored
      6d05a95c
    • 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
  4. 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
  5. 12 Jan, 2021 7 commits
  6. 11 Jan, 2021 4 commits
  7. 10 Jan, 2021 1 commit
  8. 09 Jan, 2021 3 commits
  9. 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
  10. 07 Jan, 2021 6 commits
  11. 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
  12. 05 Jan, 2021 3 commits
    • Marko Mäkelä's avatar
      Cleanup: Declare trx_weight_ge() inline · 8a4ca339
      Marko Mäkelä authored
      8a4ca339
    • Nikita Malyavin's avatar
      MDEV-23632 ALTER TABLE...ADD KEY creates corrupted index on virtual column · 9a645dae
      Nikita Malyavin authored
      mysql_col_offset was not updated after the new column has been added by an
      INSTANT ALTER TABLE -- table data dictionary had been remaining the same.
      
      When the virtual column is added or removed, table was usually evicted and
      then reopened, which triggered vcol info rebuild on the next open.
      
      However this also should be done when the usual column is added or removed:
      mariadb always stores virtual field at the end of maria record,
      so the shift should always happen.
      
      Fix:
      expand the eviction condition to the case when usual fields are
      added/removed
      
      Note:
      this should happen only in the case of !new_clustered:
      * When new_clustered is true, a new data dictionary is created, and vcol
      metadata is rebuilt in `alter_rebuild_apply_log()`
      * We can't do it in `new_clustered` case, because the old table is not yet
      subctituted correctly
      9a645dae
    • Nikita Malyavin's avatar