1. 03 Jan, 2022 2 commits
    • Marko Mäkelä's avatar
      MDEV-27414 Server may hang when innodb_undo_log_truncate=ON · c410f7aa
      Marko Mäkelä authored
      trx_purge_truncate_history(): Avoid a deadlock with
      buf_pool_t::release_freed_page(). Page latches are not supposed
      to be waited for while holding a mutex like buf_pool.mutex or
      buf_pool.flush_list_mutex.
      
      This regression was caused by
      commit aaef2e1d (MDEV-27058).
      Before that, trx_purge_truncate_history() would buffer-fix the block,
      release buf_pool.flush_list_mutex, and then wait for the
      exclusive page latch.
      
      This bug led to occasional failures of the test
      innodb.undo_truncate_recover.
      c410f7aa
    • Andrei's avatar
      MDEV-27039 Trying to lock mutex ... when the mutex was already locked · 30b917d3
      Andrei authored
      The reason of the double lock was an extraneous ha_flush_logs().
      Unlike the upstream it is unnecessary in Mariadb that exploits a binlog
      checkpoint mechanism for not letting PURGE or RESET-MASTER to trouble
      transaction recovery. That is in case should a trx
      be prepared but its binlog file gone, the trx then is committed on disk too.
      Those facts have been always verified by existing tests of
      
        binlog.binlog_{checkpoint,xa_recover}.test.
      
      A regression test for the bug is included though.
      30b917d3
  2. 31 Dec, 2021 1 commit
  3. 23 Dec, 2021 1 commit
    • Nayuta Yanagisawa's avatar
      MDEV-27184 Assertion `(old_top == initial_top (av) && old_size == 0) ||... · dc74d234
      Nayuta Yanagisawa authored
      MDEV-27184 Assertion `(old_top == initial_top (av) && old_size == 0) || ((unsigned long) (old_size) >= MINSIZE && prev_inuse (old_top) && ((unsigned long) old_end & (pagesize - 1)) == 0)' failed, Assertion `str.alloced_length() >= str.length() + data_len' failed
      
      Spider crashes on a query that inserts some rows including float.
      This is because Spider allocates a string of insufficient length.
      dc74d234
  4. 22 Dec, 2021 1 commit
  5. 21 Dec, 2021 2 commits
  6. 19 Dec, 2021 1 commit
    • Sergei Petrunia's avatar
      MDEV-27306: SET STATEMENT optimizer_trace=1 Doesn't save the trace · 32692140
      Sergei Petrunia authored
      In mysql_execute_command(), move optimizer trace initialization to be
      after run_set_statement_if_requested() call.
      
      Unfortunately, mysql_execute_command() code uses "goto error" a lot, and
      this means optimizer trace code cannot use RAII objects. Work this around
      by:
      - Make Opt_trace_start a non-RAII object, add init() method.
      - Move the code that writes the top-level object and array into
        Opt_trace_start::init().
      32692140
  7. 16 Dec, 2021 1 commit
  8. 14 Dec, 2021 1 commit
    • Julius Goryavsky's avatar
      MDEV-27181: Galera SST scripts should use ssl_capath for CA directory · 30bf0bca
      Julius Goryavsky authored
      1. Galera SST scripts should use ssl_capath (not ssl_ca) for CA
         directory. The current implementation tries to automatically
         detect the path using the trailing slash in the ssl_ca variable
         value, but this approach is not compatible with the server
         configuration. Now, by analogy with the server, SST scripts
         also use a separate ssl_capath variable. In addition, a similar
         tcapath variable has been added for the old-style configuration
         (in the "sst" section).
      2. Openssl utility detection made more reliable.
      3. Removed extra spaces in automatically generated command lines -
         to simplify debugging of the SST scripts.
      4. In general, the code for detecting the presence or absence of
         auxiliary utilities has been improved - it is made more reliable
         in some configurations (and for shells other than bash).
      30bf0bca
  9. 12 Dec, 2021 3 commits
  10. 10 Dec, 2021 1 commit
  11. 07 Dec, 2021 8 commits
  12. 06 Dec, 2021 4 commits
  13. 04 Dec, 2021 2 commits
  14. 03 Dec, 2021 6 commits
  15. 02 Dec, 2021 1 commit
  16. 01 Dec, 2021 3 commits
    • Marko Mäkelä's avatar
      MDEV-12353 fixup: Correct a comment · f9726ced
      Marko Mäkelä authored
      Several EXTENDED type records have already been implemented.
      f9726ced
    • Thirunarayanan Balathandayuthapani's avatar
      MDEV-27014 InnoDB fails to restore page 0 from the doublewrite buffer · e0e24b18
      Thirunarayanan Balathandayuthapani authored
      - Replaced the pointer parameter of validate_for_recovery() with uint32_t
      e0e24b18
    • Jan Lindström's avatar
      Fix bad galera tests · d7b37de9
      Jan Lindström authored
      * galera_kill_applier : we should make sure that node has
        correct number of wsrep appliers
      * galera_bad_wsrep_new_cluster: This test restarts both nodes,
      so it is bad on mtr. Make sure it is run alone
      * galera_update_limit : Make sure we have PK when needed
      galera_as_slave_replay : bf abort was not consistent
      * galera_unicode_pk : Add wait_conditions so that all nodes
      are part of cluster and DDL and INSERT has replicated before
      any further operations are done.
      * galera_bf_abort_at_after_statement : Add wait_conditions
      to make sure all nodes are part of cluster and that DDL
      and INSERT has replicated. Make sure we reset DEBUG_SYNC.
      d7b37de9
  17. 30 Nov, 2021 2 commits
    • Martin Beck's avatar
      MDEV-27088: Server crash on ARM (WMM architecture) due to missing barriers in lf-hash (10.5) · 4ebac0fc
      Martin Beck authored
      MariaDB server crashes on ARM (weak memory model architecture) while
      concurrently executing l_find to load node->key and add_to_purgatory
      to store node->key = NULL. l_find then uses key (which is NULL), to
      pass it to a comparison function.
      
      The specific problem is the out-of-order execution that happens on a
      weak memory model architecture. Two essential reorderings are possible,
      which need to be prevented.
      
      a) As l_find has no barriers in place between the optimistic read of
      the key field lf_hash.cc#L117 and the verification of link lf_hash.cc#L124,
      the processor can reorder the load to happen after the while-loop.
      
      In that case, a concurrent thread executing add_to_purgatory on the same
      node can be scheduled to store NULL at the key field lf_alloc-pin.c#L253
      before key is loaded in l_find.
      
      b) A node is marked as deleted by a CAS in l_delete lf_hash.cc#L247 and
      taken off the list with an upfollowing CAS lf_hash.cc#L252. Only if both
      CAS succeed, the key field is written to by add_to_purgatory. However,
      due to a missing barrier, the relaxed store of key lf_alloc-pin.c#L253
      can be moved ahead of the two CAS operations, which makes the value of
      the local purgatory list stored by add_to_purgatory visible to all threads
      operating on the list. As the node is not marked as deleted yet, the
      same error occurs in l_find.
      
      This change three accesses to be atomic.
      
      * optimistic read of key in l_find lf_hash.cc#L117
      * read of link for verification lf_hash.cc#L124
      * write of key in add_to_purgatory lf_alloc-pin.c#L253
      
      Reviewers: Sergei Vojtovich, Sergei Golubchik
      
      Fixes: MDEV-23510 / d30c1331a18d875e553f3fcf544997e4f33fb943
      4ebac0fc
    • Martin Beck's avatar
      MDEV-27088: lf unit tests - cycles insufficient · 17802165
      Martin Beck authored
      Per bug report, cycles was woefully insufficient to
      detect any implementation error.
      17802165