1. 23 Nov, 2021 2 commits
    • Julius Goryavsky's avatar
      MDEV-26915: SST scripts do not take log_bin_index setting into account · 2f51511c
      Julius Goryavsky authored
      Currently, SST scripts assume that the filename specified in
      the --log-bin-index argument either does not contain an extension
      or uses the standard ".index" extension. Similar assumptions are
      used for the log_bin_index parameter read from the configuration
      file. This commit adds support for arbitrary extensions for the
      index file paths.
      2f51511c
    • Julius Goryavsky's avatar
      MDEV-26064: mariabackup SST fails when starting with --innodb-force-recovery · b9525997
      Julius Goryavsky authored
      If the server is started with the --innodb-force-recovery argument
      on the command line, then during SST this argument can be passed to
      mariabackup only at the --prepare stage, and accordingly it must be
      removed from the --mysqld-args list (and it is not should be passed
      to mariabackup otherwise).
      
      This commit fixes a flaw in the SST scripts and add a test that
      checks the ability to run the joiner node in a configuration that
      uses --innodb-force-recovery=1.
      b9525997
  2. 21 Nov, 2021 1 commit
    • Igor Babaev's avatar
      MDEV-26470 "No database" selected when using CTE in a subquery of DELETE statement · 114e18b8
      Igor Babaev authored
      This bug led to reporting bogus messages "No database selected" for DELETE
      statements if they used subqueries in their WHERE conditions and these
      subqueries contained references to CTEs.
      The bug happened because the grammar rule for DELETE statement did not
      call the function LEX::check_cte_dependencies_and_resolve_references() and
      as a result of it references to CTEs were not identified as such.
      
      Approved by Oleksandr Byelkin <sanja@mariadb.com>
      114e18b8
  3. 20 Nov, 2021 3 commits
  4. 17 Nov, 2021 3 commits
    • Vladislav Vaintroub's avatar
      MDEV-27075 mysql_upgrade_service.exe - using uninitialized memory 'defaults_file' · 81d7adb1
      Vladislav Vaintroub authored
      Remove section that was trying to rename default-character-set to character-set-server
      
      This seems to be an old workaround for some upgrade warning, which did not
      work for some time already, because the ini filename was not initialized.
      81d7adb1
    • Eugene Kosov's avatar
      MDEV-26747 improve corruption check for encrypted tables on ALTER IMPORT · ed0a224b
      Eugene Kosov authored
      fil_space_decrypt(): change signature to return status via dberr_t only.
      Also replace impossible condition with an assertion and prove it via
      test cases.
      ed0a224b
    • Igor Babaev's avatar
      MDEV-26825 Bogus error for query with two usage of CTE referring another CTE · 8f24f5fe
      Igor Babaev authored
        This bug affected queries with two or more references to a CTE referring
      another CTE if the definition of the latter contained an invocation of
      a stored function that used a base table. The bug could lead to a bogus
      error message or to an assertion failure.
        For any non-first reference to CTE cte1 With_element::clone_parsed_spec()
      is called that parses the specification of cte1 to construct the unit
      structure for this usage of cte1. If cte1 refers to another CTE cte2
      outside of the specification of cte1 then With_element::clone_parsed_spec()
      has to be called for cte2 as well. This call is made by the function
      LEX::resolve_references_to_cte() within the invocation of the function
      With_element::clone_parsed_spec() for cte1.
        When the specification of a CTE is parsed all table references encountered
      in it must be added to the global list of table references for the query.
      As the specification for the non-first usage of a CTE is parsed at a
      recursive call of the parser the function With_element::clone_parsed_spec()
      invoked at this recursive call should takes care of appending the list of
      table references encountered in the specification of this CTE cte1 to the
      list of table references created for the query. And it should do it after
      the call of LEX::resolve_references_to_cte() that resolves references to
      CTEs defined outside of the specification of cte1 because this call may
      invoke the parser again for specifications of other CTEs and  the table
      references from their specifications must ultimately appear in the global
      list of table references of the query.
        The code of With_element::clone_parsed_spec() misplaced the call of
      LEX::resolve_references_to_cte(). As a result LEX::query_tables_last used
      for the query that was supposed to point to the field 'next_global' of the
      last element in the global list of table references actually pointed to
      'next_global' of the previous element.
        The above inconsistency certainly caused serious problems when table
      references used in the stored functions invoked in cloned specifications
      of CTEs were added to the global list of table references.
      8f24f5fe
  5. 16 Nov, 2021 2 commits
  6. 11 Nov, 2021 2 commits
  7. 09 Nov, 2021 5 commits
  8. 08 Nov, 2021 3 commits
  9. 05 Nov, 2021 1 commit
    • Andrei Elkin's avatar
      MDEV-26833 Missed statement rollback in case transaction drops or create temporary table · 561b6c7e
      Andrei Elkin authored
      When transaction creates or drops temporary tables and afterward its statement
      faces an error even the transactional table statement's cached ROW
      format events get involved into binlog and are visible after the transaction's commit.
      
      Fixed with proper analysis of whether the errored-out statement needs
      to be rolled back in binlog.
      For instance a fact of already cached CREATE or DROP for temporary
      tables by previous statements alone
      does not cause to retain the being errored-out statement events in the
      cache.
      Conversely, if the statement creates or drops a temporary table
      itself it can't be rolled back - this rule remains.
      561b6c7e
  10. 04 Nov, 2021 1 commit
  11. 03 Nov, 2021 1 commit
  12. 02 Nov, 2021 3 commits
  13. 01 Nov, 2021 2 commits
    • Jan Lindström's avatar
      MDEV-23328 Server hang due to Galera lock conflict resolution · ea239034
      Jan Lindström authored
      * Fix error handling NULL-pointer reference
      * Add mtr-suppression on galera_ssl_upgrade
      ea239034
    • Marko Mäkelä's avatar
      MDEV-26949 --debug-gdb installs redundant signal handlers · 026984c3
      Marko Mäkelä authored
      There is a server startup option --gdb a.k.a. --debug-gdb that requests
      signals to be set for more convenient debugging. Most notably, SIGINT
      (ctrl-c) will not be ignored, and you will be able to interrupt the
      execution of the server while GDB is attached to it.
      
      When we are debugging, the signal handlers that would normally display
      a terse stack trace are useless.
      
      When we are debugging with rr, the signal handlers may interfere with
      a SIGKILL that could be sent to the process by the environment, and ruin
      the rr replay trace, due to a Linux kernel bug
      https://lkml.org/lkml/2021/10/31/311
      
      To be able to diagnose bugs in kill+restart tests, we may really need
      both a trace before the SIGKILL and a trace of the failure after a
      subsequent server startup. So, we had better avoid hitting the problem
      by simply not installing those signal handlers.
      026984c3
  14. 30 Oct, 2021 2 commits
  15. 29 Oct, 2021 3 commits
    • Alexander Barkov's avatar
      MDEV-24901 SIGSEGV in fts_get_table_name, SIGSEGV in ib_vector_size, SIGSEGV... · 059797ed
      Alexander Barkov authored
      MDEV-24901 SIGSEGV in fts_get_table_name, SIGSEGV in ib_vector_size, SIGSEGV in row_merge_fts_doc_tokenize, stack smashing
      
      strmake() puts one extra 0x00 byte at the end of the string.
      The code in my_strnxfrm_tis620[_nopad] did not take this into
      account, so in the reported scenario the 0x00 byte was put outside
      of a stack variable, which made ASAN crash.
      
      This problem is already fixed in in MySQL:
      
        commit 19bd66fe43c41f0bde5f36bc6b455a46693069fb
        Author: bin.x.su@oracle.com <>
        Date:   Fri Apr 4 11:35:27 2014 +0800
      
      But the fix does not seem to be correct, as it breaks when finds a zero byte
      in the source string.
      
      Using memcpy() instead of strmake().
      
      - Unlike strmake(), memcpy() it does not write beyond the destination
        size passed.
      - Unlike the MySQL fix, memcpy() does not break on the first 0x00 byte found
        in the source string.
      059797ed
    • sjaakola's avatar
      MDEV-23328 Server hang due to Galera lock conflict resolution · db50ea3a
      sjaakola authored
      Mutex order violation when wsrep bf thread kills a conflicting trx,
      the stack is
      
                wsrep_thd_LOCK()
                wsrep_kill_victim()
                lock_rec_other_has_conflicting()
                lock_clust_rec_read_check_and_lock()
                row_search_mvcc()
                ha_innobase::index_read()
                ha_innobase::rnd_pos()
                handler::ha_rnd_pos()
                handler::rnd_pos_by_record()
                handler::ha_rnd_pos_by_record()
                Rows_log_event::find_row()
                Update_rows_log_event::do_exec_row()
                Rows_log_event::do_apply_event()
                Log_event::apply_event()
                wsrep_apply_events()
      
      and mutexes are taken in the order
      
                lock_sys->mutex -> victim_trx->mutex -> victim_thread->LOCK_thd_data
      
      When a normal KILL statement is executed, the stack is
      
                innobase_kill_query()
                kill_handlerton()
                plugin_foreach_with_mask()
                ha_kill_query()
                THD::awake()
                kill_one_thread()
      
              and mutexes are
      
                victim_thread->LOCK_thd_data -> lock_sys->mutex -> victim_trx->mutex
      
      This patch is the plan D variant for fixing potetial mutex locking
      order exercised by BF aborting and KILL command execution.
      
      In this approach, KILL command is replicated as TOI operation.
      This guarantees total isolation for the KILL command execution
      in the first node: there is no concurrent replication applying
      and no concurrent DDL executing. Therefore there is no risk of
      BF aborting to happen in parallel with KILL command execution
      either. Potential mutex deadlocks between the different mutex
      access paths with KILL command execution and BF aborting cannot
      therefore happen.
      
      TOI replication is used, in this approach,  purely as means
      to provide isolated KILL command execution in the first node.
      KILL command should not (and must not) be applied in secondary
      nodes. In this patch, we make this sure by skipping KILL
      execution in secondary nodes, in applying phase, where we
      bail out if applier thread is trying to execute KILL command.
      This is effective, but skipping the applying of KILL command
      could happen much earlier as well.
      
      This also fixed unprotected calls to wsrep_thd_abort
      that will use wsrep_abort_transaction. This is fixed
      by holding THD::LOCK_thd_data while we abort transaction.
      Reviewed-by: default avatarJan Lindström <jan.lindstrom@mariadb.com>
      db50ea3a
    • Jan Lindström's avatar
      MDEV-25114: Crash: WSREP: invalid state ROLLED_BACK (FATAL) · c8b39f7e
      Jan Lindström authored
      Revert "MDEV-23328 Server hang due to Galera lock conflict resolution"
      
      This reverts commit 29bbcac0.
      c8b39f7e
  16. 28 Oct, 2021 6 commits