1. 07 Dec, 2023 7 commits
    • Yuchen Pei's avatar
      MDEV-32507 Spider: Use $MTR_SUITE_DIR for init-file files · 30af9872
      Yuchen Pei authored
      This should fix certain CI builds where the spider suite test files
      and the main suite test files do not follow the same relative paths
      relations as the mariadb source.
      30af9872
    • Yuchen Pei's avatar
      MDEV-32515 Use $MYSQLD_LAST_CMD in spider/bugfix.mdev_30370 · 70283aca
      Yuchen Pei authored
      $MYSQLD_CMD uses .1 as the defaults-group-suffix, which could cause
      the use of the default port (3306) or socket, which will fail in
      environment where these defaults are already in use by another server.
      
      Adding an extra --defaults-group-suffix=.1.1 does not help, because
      the first flag wins.
      
      So we use $MYSQLD_LAST_CMD instead, which uses the correct suffix.
      
      The extra innodb buffer pool warning is irrelevant to the goal of the
      test (running --wsrep-recover with --plug-load-add=ha_spider should
      not cause hang)
      70283aca
    • Yuchen Pei's avatar
      MDEV-22979 MDEV-27233 MDEV-28218 Fixing spider init bugs · d8f5d2be
      Yuchen Pei authored
      Fix spider init bugs (MDEV-22979, MDEV-27233, MDEV-28218) while
      preventing regression on old ones (MDEV-30370, MDEV-29904)
      
      Two things are changed:
      
      First, Spider initialisation is made fully synchronous, i.e. it no
      longer happens in a background thread. Adapted from the original fix
      by nayuta for MDEV-27233. This change itself would cause failure when
      spider is initialised early, by plugin-load-add, due to dependency on
      Aria and udf function creation, which are fixed in the second and
      third parts below. Requires SQL Service, thus porting earlier versions
      requires MDEV-27595
      
      Second, if spider is initialised before udf_init(), create udf by
      inserting into `mysql.func`, otherwise do it by `CREATE FUNCTION` as
      usual. This change may be generalised in MDEV-31401.
      
      Also factor out some clean-up queries from deinit_spider.inc for use
      of spider init tests.
      
      A minor caveat is that early spider initialisation will fail if the
      server is bootstrapped for the first time, due to missing `mysql`
      database which needs to be created by the bootstrap script.
      d8f5d2be
    • Yuchen Pei's avatar
      MDEV-27095 clean up spd_init_query.h · afe63ec6
      Yuchen Pei authored
      Removing procedures that were created and dropped during init.
      
      This also fixes a race condition where mtr test with
      plugin-load-add=ha_spider.so causes post test check to fail as it
      expects the procedures to still be there.
      afe63ec6
    • Yuchen Pei's avatar
      MDEV-27095 installing one spider plugin should not trigger others · f0af56be
      Yuchen Pei authored
      There are several plugins in ha_spider: spider, spider_alloc_mem,
      spider_wrapper_protocols, spider_rewrite etc.
      
      INSTALL PLUGIN foo SONAME ha_spider causes all the other ones to be
      installed by the init queries where foo is any of the plugins.
      
      This introduces unnecessary complexiy. For example it reads
      mysql.plugins to find all other plugins, causing the hack of moving
      spider plugin init to a separate thread.
      
      To install all spider related plugins, install soname ha_spider should
      be used instead.
      
      This also fixes spurious rows in mysql.plugin when installing say only
      the spider plugin with `plugin-load-add=SPIDER=ha_spider.so`:
      
      select * from mysql.plugin;
      name	dl
      spider_alloc_mem	ha_spider.so # should not be here
      spider_wrapper_protocols	ha_spider.so # should not be here
      
      Adapted from part of the reverted commit
      c160a115.
      f0af56be
    • Julius Goryavsky's avatar
      MDEV-32344: IST failed with ssl-mode=VERIFY_CA · 66fafdb9
      Julius Goryavsky authored
      This commit fixes a bug where IST could be rejected in favor of SST
      when ssl-mode=VERIFY_CA and when mariabackup is used. It also contains
      a test and small code simplifications that will make it easier to find
      bugs in the future.
      66fafdb9
    • Yuchen Pei's avatar
      MDEV-28683 Spider: create conn on demand when direct delete · 13896f73
      Yuchen Pei authored
      We do this in 10.4 at the same place where in 10.5+ dml_init() is
      called which does the same thing, among other things.
      13896f73
  2. 06 Dec, 2023 2 commits
    • Oleg Smirnov's avatar
      MDEV-15656 Assertion `is_last_prefix <= 0' failed in QUICK_GROUP_MIN_MAX_SELECT::get_next · a8bd6a98
      Oleg Smirnov authored
      When QUICK_GROUP_MIN_MAX_SELECT is initialized or being reset
      it stores the prefix of the last group of the index chosen for
      retrieving data (last_value). Later, when looping through records
      at get_next() method, the server checks whether the retrieved
      group is the last, and if so, it finishes processing.
      
      At the same time, it looks like there is no need for that additional
      check since method next_prefix() returns HA_ERR_KEY_NOT_FOUND
      or HA_ERR_END_OF_FILE when there are no more satisfying records.
      If we do not perform the check, we do not need to retrieve and
      store last_value either.
      
      This commit removes using of last_value from QUICK_GROUP_MIN_MAX_SELECT.
      
      Reviewer: Sergei Petrunia <sergey@mariadb.com>
      a8bd6a98
    • Thirunarayanan Balathandayuthapani's avatar
      MDEV-29092 FOREIGN_KEY_CHECKS does not prevent non-copy alter from creating invalid FK structure · d5fc34db
      Thirunarayanan Balathandayuthapani authored
      Problem:
      ========
      - InnoDB should have two keys on the same column for the self
      referencing foreign key relation.
      
      Solution:
      =========
      - Allow self referential foreign key relation to work with one
      key.
      d5fc34db
  3. 05 Dec, 2023 6 commits
  4. 04 Dec, 2023 1 commit
  5. 02 Dec, 2023 1 commit
    • Gulshan Kumar Prasad's avatar
      MDEV-32611: Test suite is missing dump option delete-master-logs. · d8e6bb00
      Gulshan Kumar Prasad authored
      Extending the rpl_mysqldump_slave.test to incorporate the
      delete-master-logs option, and this options is alias of
      get binlogs: show master status -> flush logs -> purge binary logs to <new_binlog>
      sequence and this test is derived using the same pattern.
      also we measure the pre and post log state
      on the master following the mysqldump process. Introducing
      assertions to validate the correct state.
      d8e6bb00
  6. 30 Nov, 2023 2 commits
  7. 29 Nov, 2023 4 commits
    • Marko Mäkelä's avatar
      MDEV-31441 BLOB corruption on UPDATE of PRIMARY KEY with FOREIGN KEY · cd79f102
      Marko Mäkelä authored
      row_upd_clust_rec_by_insert(): If we are resuming from a lock wait,
      reset the 'disowned' flag of the BLOB pointers in 'entry' that we
      copied from 'rec' on which we had invoked btr_cur_disown_inherited_fields()
      before the lock wait started. In this way, the inserted record with
      the updated PRIMARY KEY value will have the BLOB ownership associated
      with itself, like it is supposed to be.
      
      Note: If the lock wait had been aborted, then rollback would have
      invoked btr_cur_unmark_extern_fields() and no corruption would be possible.
      
      Reviewed by: Vladislav Lesin
      Tested by: Matthias Leich
      cd79f102
    • Thirunarayanan Balathandayuthapani's avatar
      MDEV-32897 main suite test case prints extra row for metadata_lock_info query · e996f77c
      Thirunarayanan Balathandayuthapani authored
      - Added the parameter stats_persistent=0 for InnoDB engine.
      - Before printing metadata_lock_info query, make sure that
      InnoDB does complete purging.
      
      Reviewed by: Marko Mäkelä
      e996f77c
    • Marko Mäkelä's avatar
      MDEV-32833 InnoDB wrong error message · 47fc64c1
      Marko Mäkelä authored
      trx_t::commit_in_memory(): Empty the detailed_error string, so that
      FOREIGN KEY error messages from an earlier transaction will not be
      wrongly reused in ha_innobase::get_error_message().
      
      Reviewed by: Thirunarayanan Balathandayuthapani
      47fc64c1
    • Daniel Black's avatar
      mallinfo2: include malloc header even if mallinfo undetected · 1fec5012
      Daniel Black authored
      It may be the case that for some reason, -Werror deprecated
      for instance, that mallinfo isn't detected. In this case the
      malloc.h headers won't be included which defined the mallinfo2
      function and its structure.
      
      Re-organise so that either function pulls in the header.
      1fec5012
  8. 28 Nov, 2023 9 commits
  9. 27 Nov, 2023 7 commits
    • Monty's avatar
      Improve reporting from sf_report_leaked_memory() · 83214c34
      Monty authored
      Other things:
      - Added DBUG_EXECUTE_IF("print_allocated_thread_memory") at end of query
        to easier find not freed memory allocated by THD
      - Removed free_root() from plugin_init() that did nothing.
      83214c34
    • Monty's avatar
      MDEV-28566 Assertion `!expr->is_fixed()' failed in bool virtual_column_info::fix_session_expr(THD*) · 06f7ed4d
      Monty authored
      The problem was that table->vcol_cleanup_expr() was not called in case
      of error in open_table().
      06f7ed4d
    • Monty's avatar
      Fixed memory leak introduces by a fix for MDEV-29932 · 08e6431c
      Monty authored
      The leaks are all 40 bytes and happens in this call stack when running
      mtr vcol.vcol_syntax:
      
      alloc_root()
      ...
      Virtual_column_info::fix_and_check_exp()
      ...
      Delayed_insert::get_local_table()
      
      The problem was that one copied a MEM_ROOT from THD to a TABLE without
      taking into account that new blocks would be allocated through the
      TABLE memroot (and would thus be leaked).
      In general, one should NEVER copy MEM_ROOT from one object to another
      without clearing the copied memroot!
      
      Fixed by, at end of get_local_table(), copy all new allocated objects
      to client_thd->mem_root.
      
      Other things:
      - Removed references to MEM_ROOT::total_alloc that was wrongly left
        after a previous commit
      08e6431c
    • Monty's avatar
      Backport my_addr_resolve from 10.6 to get latest bug fixes in. · 8e961191
      Monty authored
      This will enable safemalloc to resolve symbols when compiled with
      __PIE__
      8e961191
    • Monty's avatar
      Do not use MEM_ROOT in set_killed_no_mutex() · dc116541
      Monty authored
      The reason for this change are the following:
      - If we call set_killed() from one thread to kill another thread with
        a message, there may be concurrent usage of the MEM_ROOT which is
        not supported (this could cause memory corruption).
        We do not currently have code that does this, but the API allows this
        and it is better to be fix the issue before it happens.
      - The per thread memory tracking does not work if one thread uses
        another threads MEM_ROOT.
      - set_killed() can be called if a MEM_ROOT allocation fails.  In this case
        it is not good to try to allocate more memory from potentially the same
        MEM_ROOT.
      
      Fix is to use my_malloc() instead of mem_root for killed messages.
      dc116541
    • Monty's avatar
      MENT-1707 Crash at reload_acl_and_cache · 9e424b62
      Monty authored
      The stack function trace for this bug is:
      
      libc
      my_free
      free_root
      acl_reload
      
      The crash happens because acl_memroot gets corrupted.
      
      The issue was that during FLUSH PRIVILEGES we discard the old
      privileges and create new ones. We have protection in place that no
      one can accesses the privileges during this time.
      
      However one short piece of code called during login of a new user, or
      change password, was not properly protected, which could in some very
      rare circumstances case a memory overwrite of a MEMROOT object if
      at the same time another thread calls FLUSH PRIVILEGES.
      
      This it issue is fixed by adding protection around set_user_salt().
      I also added asserts to other code that is using the acl_memroot to
      ensure that it is properly proteced everywhere.
      9e424b62
    • Anel Husakovic's avatar
      MDEV-32168: slave_error_param condition is never checked from the wait_for_slave_param.inc · 18acf97d
      Anel Husakovic authored
      - Record unrecorded tests from `rpl` suite to `engines/funcs` suite
      (done by d8e448ba):
        1) Record test `rpl_row_until` from commit d95fa7e3
        2) Record test `rpl_slave_status` from commit a7d186a1
      
      - Stop only running threads for `engines/funcs.rpl_server_id1.test` that
      is not the same as `rpl.rpl_server_id1.test`
      
      - Reviewer:  <knielsen@knielsen-hq.org>
                   <andrei.elkin@mariadb.com>
      18acf97d
  10. 26 Nov, 2023 1 commit