1. 17 Nov, 2023 3 commits
    • Yuchen Pei's avatar
      MDEV-30014 Spider should not second guess server when locking / unlocking · 6ee83312
      Yuchen Pei authored
      This fixes MDEV-30014, MDEV-29456, MDEV-29667, and MDEV-30049.
      
      The server may ask storage engines to unlock when the original sql
      command is not UNLOCK. This patch makes sure that spider honours these
      requests, so that the server has the correct idea which tables are
      locked and which are not.
      
      MDEV-29456, MDEV-29667, MDEV-30049: a later LOCK statement would, as
      the first step, unlock locked tables and clear the OPTION_TABLE_LOCK
      bit in thd->variables.option_bits, as well as locked_tables_list,
      indicating no tables are locked. If Spider does not unlock because the
      sql command is not UNLOCK, and if after this the LOCK statement fails
      to lock any tables, these indications that no tables are locked
      remains, so a later UNLOCK TABLES; statement would not try to unlock
      any table. Causing later statements requiring mdl locks to hang on
      waiting until lock_wait_timeout (default 1h) has passed.
      
      MDEV-30014: when a LOCK statement tries to lock more than one tables,
      say t2 and t3 as in mdev_30014.test, and t2 succeeds but t3 fails, the
      sql layer would try to undo by unlocking t2, and again, if Spider does
      not honour this request, the sql layer would assume t2 has been
      unlocked, but later actions on t2 or t2's remote table could hang on
      waiting for the mdl.
      6ee83312
    • Yuchen Pei's avatar
      MDEV-29963 MDEV-31357 Spider should clear its lock lists when locking fails · d67dc006
      Yuchen Pei authored
      Spider populates its lock lists (a hash) in store_lock(), and normally
      clears them in the actual lock_tables(). However, if lock_tables()
      fails, there's no reset_lock() method for storage engine handlers,
      which can cause bad things to happen. For example, if one of the table
      involved is dropped and recreated, or simply TRUNCATEd, when executing
      LOCK TABLES again, the lock lists would be queried again in
      store_lock(), which could cause access to freed space associated with
      the dropped table.
      d67dc006
    • Yuchen Pei's avatar
      MDEV-26247 Re-implement spider gbh query rewrite of tables · 1328e629
      Yuchen Pei authored
      Spider GBH's query rewrite of table joins is overly complex and
      error-prone. We replace it with something closer to what
      dbug_print() (more specifically, print_join()) does, but catered to
      spider.
      
      More specifically, we replace the body of
      spider_db_mbase_util::append_from_and_tables() with a call to
      spider_db_mbase_util::append_join(), and remove downstream append_X
      functions.
      
      We make it handle const tables by rewriting them as (select 1). This
      fixes the main issue in MDEV-26247.
      
      We also ban semijoin from spider gbh, which fixes MDEV-31645 and
      MDEV-30392, as semi-join is an "internal" join, and "semi join" does
      not parse, and it is different from "join" in that it deduplicates the
      right hand side
      
      Not all queries passed to a group by handler are valid (MDEV-32273),
      for example, a join on expr may refer outer fields not in the current
      context. We detect this during the handler creation when walking the
      join. See also gbh_outer_fields_in_join.test.
      
      It also skips eliminated tables, which fixes MDEV-26193.
      1328e629
  2. 16 Nov, 2023 3 commits
    • Yuchen Pei's avatar
      05734b34
    • Yuchen Pei's avatar
      MDEV-26247 Clean up spider_fields · 8920cdd7
      Yuchen Pei authored
      Spider gbh query rewrite should get table for fields in a simple way.
      Add a method spider_fields::find_table that searches its table holders
      to find table for a given field. This way we will be able to get rid
      of the first pass during the gbh creation where field_chains and
      field_holders are created.
      
      We also check that the field belongs to a spider table while walking
      through the query, so we could remove
      all_query_fields_are_query_table_members(). However, this requires an
      earlier creation of the table_holder so that tables are added before
      checking. We do that, and in doing so, also decouple table_holder and
      spider_fields
      
      Remove unused methods and fields. Add comments.
      8920cdd7
    • Yuchen Pei's avatar
      MDEV-26247 Remove some unused spider methods · 41172fce
      Yuchen Pei authored
      Two methods from spider_fields. There are probably more of these
      conn_holder related methods that can be removed
      
      reappend_tables_part()
      reappend_tables()
      41172fce
  3. 15 Nov, 2023 3 commits
    • Rex's avatar
      Merge 10.4 into 10.5 · 8b509a5d
      Rex authored
      8b509a5d
    • Marko Mäkelä's avatar
      MDEV-32757 innodb_undo_log_truncate=ON is not crash safe · a0f02f74
      Marko Mäkelä authored
      trx_purge_truncate_history(): Do not prematurely mark dirty pages
      as clean. This will be done in mtr_t::commit_shrink() as part of
      Shrink::operator()(mtr_memo_slot_t*). Also, register each dirty page
      only once in the mini-transaction.
      
      fsp_page_create(): Adjust and simplify the page creation during
      undo tablespace truncation. We can directly reuse pages that are
      already in buf_pool.page_hash.
      
      This fixes a regression that was caused by
      commit f5794e1d (MDEV-26445).
      
      Tested by: Matthias Leich
      Reviewed by: Thirunarayanan Balathandayuthapani
      a0f02f74
    • Tuukka Pasanen's avatar
      MDEV-32689: Remove Ubuntu Bionic from 10.5 · 15bb8acf
      Tuukka Pasanen authored
      Commit Removed Ubuntu Bionic from
      debian/autobake-debs.sh as it's not used
      anymore to build official MariaDB images
      
      REMINDER TO MERGER: This commit should not
      be merged up to 10.6 or forward
      15bb8acf
  4. 14 Nov, 2023 2 commits
  5. 13 Nov, 2023 1 commit
  6. 11 Nov, 2023 2 commits
  7. 10 Nov, 2023 1 commit
  8. 09 Nov, 2023 1 commit
    • Marko Mäkelä's avatar
      MDEV-32737 innodb.log_file_name fails on Assertion `after_apply ||... · e0c65784
      Marko Mäkelä authored
      MDEV-32737 innodb.log_file_name fails on Assertion `after_apply || !(blocks).end in recv_sys_t::clear
      
      recv_group_scan_log_recs(): Set the debug flag recv_sys.after_apply
      after actually completing the log scan.
      
      In the test, suppress some errors that may be reported when
      the crash recovery of RENAME TABLE t1 TO t2 is preceded by
      copying t2.ibd to t1.ibd.
      e0c65784
  9. 08 Nov, 2023 2 commits
  10. 04 Nov, 2023 1 commit
  11. 03 Nov, 2023 1 commit
    • Kristian Nielsen's avatar
      MDEV-32672: Don't hold LOCK_thd_data over commit_ordered · 3c1f324a
      Kristian Nielsen authored
      Partial revert of this commit:
      
        commit 6b685ea7
        Author: Sergei Golubchik <serg@mariadb.org>
        Date:   Wed Sep 28 18:55:15 2022 +0200
      
      Don't hold LOCK_thd_data over run_commit_ordered(). Holding the mutex
      is unnecessary and will deadlock if any code in a commit_ordered
      handlerton call tries to take the mutex to change THD local data.
      
      Instead, set the current_thd for the duration of the call to keep
      asserts happy around LOCK_thd_data.
      Signed-off-by: default avatarKristian Nielsen <knielsen@knielsen-hq.org>
      3c1f324a
  12. 30 Oct, 2023 4 commits
    • Anel Husakovic's avatar
      MDEV-32462: mysql_upgrade -s still checks for non system tables · b06ac9a8
      Anel Husakovic authored
      - Rename files as requested by Vicentiu:
      ```
       mysql_json_mysql_upgrade.test                    -> mysql_upgrade_mysql_json.test
       mysql_json_mysql_upgrade_with_plugin_loaded.test -> mysql_upgrade_mysql_json_with_plugin_loaded.test
       mysql_json_mysql_upgrade_system_tables.test      -> mysql_upgrade_mysql_json_system_tables.test
      ```
      - Related to PR #2790
      - Reviewer: <daniel@mariadb.org>, <vicentiu@mariadb.org>
      b06ac9a8
    • Anel Husakovic's avatar
      MDEV-32462: mysql_upgrade -s still checks for non system tables · 4eb8aeee
      Anel Husakovic authored
      - Prevent opening of any user tables in case `upgrade-system-table`
      option is used.
      - Still there may be uninstalled data types in `mysql` system table so
      allow it to perform.
      - Closes PR #2790
      - Reviewer: <daniel@mariadb.org>, <vicentiu@mariadb.org>
      4eb8aeee
    • Anel Husakovic's avatar
      MDEV-26875: Wrong user in SET DEFAULT ROLE error · ee773753
      Anel Husakovic authored
      - Regression introduced in 957cb7b7
      - Patch 4abb8216 change `mysql.user` to `mysql.global_priv` for
      `add_anonymous.inc`, update `delete_anonymous.inc`.
      - Added test case with `--skip-name-resolve`
      - Add test case with anonymous user
        - Disable this test for windows, assignes current user to anonymous
        user.
      
      Reviewed by: <serg@mariadb.com>
      ee773753
    • Oleksandr Byelkin's avatar
      Make the test more stable · c4143f90
      Oleksandr Byelkin authored
      c4143f90
  13. 28 Oct, 2023 1 commit
  14. 27 Oct, 2023 7 commits
    • Oleksandr Byelkin's avatar
      1cd8a5ef
    • Sergei Petrunia's avatar
      MDEV-32351: Significant slowdown with outer joins: Test coverage · 9bf2e5e3
      Sergei Petrunia authored
      Make ANALYZE FORMAT=JSON print block-nl-join.r_unpack_ops when
      analyze_print_r_unpack_ops debug flag is set.
      
      Then, add a testcase.
      9bf2e5e3
    • Sergei Petrunia's avatar
      ANALYZE FORMAT=JSON: Backport block-nl-join.r_unpack_time_ms from 11.0 +fix MDEV-30830. · 4ed59006
      Sergei Petrunia authored
      Also fix it to work with hashed join (MDEV-30830).
      
      Reviewed by: Monty <monty@mariadb.org>
      4ed59006
    • Igor Babaev's avatar
      MDEV-32351 Significant slowdown for query with many outer joins · 954a6dec
      Igor Babaev authored
      This patch fixes a performance regression introduced in the patch for the
      bug MDEV-21104. The performance regression could affect queries for which
      join buffer was used for an outer join such that its on expression from
      which a conjunctive condition depended only on outer tables can be
      extracted. If the number of records in the join buffer for which this
      condition was false greatly exceeded the number of other records the
      slowdown could be significant.
      
      If there is a conjunctive condition extracted from the ON expression
      depending only on outer tables this condition is evaluated when interesting
      fields of each survived record of outer tables are put into the join buffer.
      Each such set of fields for any join operation is supplied with a match
      flag field used to generate null complemented rows. If the result of the
      evaluation of the condition is false the flag is set to MATCH_IMPOSSIBLE.
      When looking in the join buffer for records matching a record of the
      right operand of the outer join operation the records with such flags
      are not needed to be unpacked into record buffers for evaluation of on
      expressions.
      
      The patch for MDEV-21104 fixing some problem of wrong results when
      'not exists' optimization by mistake broke the code that allowed to
      ignore records with the match flag set to MATCH_IMPOSSIBLE when looking
      for matching records. As a result such records were unpacked for each
      record of the right operand of the outer join operation. This caused
      significant execution penalty in some cases.
      
      One of the test cases added in the patch can be used only for demonstration
      of the restored performance for the reported query. The second test case is
      needed to demonstrate the validity of the fix.
      954a6dec
    • Oleksandr Byelkin's avatar
      fixed typo · 11abc219
      Oleksandr Byelkin authored
      11abc219
    • Marko Mäkelä's avatar
      MDEV-32578 row_merge_fts_doc_tokenize() handles parser plugin inconsistently · 15ae97b1
      Marko Mäkelä authored
      When mysql/mysql-server@0c954c2289a75d90d1088356b1092437ebf45a1d
      added a plugin interface for FULLTEXT INDEX tokenization to MySQL 5.7,
      fts_tokenize_ctx::processed_len got a second meaning, which is only
      partly implemented in row_merge_fts_doc_tokenize().
      
      This inconsistency could cause a crash when using FULLTEXT...WITH PARSER.
      A test case that would crash MySQL 8.0 when using an n-gram parser and
      single-character words would fail to crash in MySQL 5.7, because the
      buf_full condition in row_merge_fts_doc_tokenize() was not met.
      
      This change is inspired by
      mysql/mysql-server@38e9a0779aeea2d197c727e306a910c56b26a47c
      that appeared in MySQL 5.7.44.
      15ae97b1
    • Andrei's avatar
      MDEV-32593 Assertion failure upon CREATE SEQUENCE · 728bca44
      Andrei authored
      A recently added by MDEV-32593 assert conditions are corrected.
      728bca44
  15. 26 Oct, 2023 4 commits
    • Teemu Ollakka's avatar
      MDEV-32282: Galera node remains paused after interleaving FTWRLs · ef7fc586
      Teemu Ollakka authored
      After two concurrent FTWRL/UNLOCK TABLES, the node stays in paused state
      and the following CREATE TABLE fails with
      
        ER_UNKNOWN_COM_ERROR (1047): Aborting TOI: Replication paused on
        node for FTWRL/BACKUP STAGE.
      
      The cause is the use of global `wsrep_locked_seqno` to determine
      if the node should be resumed on UNLOCK TABLES. In some executions
      the `wsrep_locked_seqno` is cleared by the first UNLOCK TABLES
      after the second FTWRL gets past `make_global_read_lock_block_commit()`.
      
      As a fix, use `thd->wsrep_desynced_backup_stage` to determine
      if the thread should resume the node on UNLOCK TABLES.
      
      Add MTR test galera.galera_ftwrl_concurrent to reproduce the
      race. The test contains also cases for BACKUP STAGE which
      uses similar mechanism for desyncing and pausing the node.
      Signed-off-by: default avatarJulius Goryavsky <julius.goryavsky@mariadb.com>
      ef7fc586
    • Sergei Golubchik's avatar
      MDEV-32586 incorrect error about cyclic reference about JSON type virtual column · c9f87b88
      Sergei Golubchik authored
      remove the hack where NO_DEFAULT_VALUE_FLAG was temporarily removed
      from a field to initialize DEFAULT() functions in CHECK constraints
      while disabling self-reference field checks.
      
      Instead, initialize DEFAULT() functions in CHECK explicitly,
      don't call check_field_expression_processor() for CHECK at all.
      c9f87b88
    • Andrei's avatar
      MDEV-32365 detailize the semisync replication magic number error · 9c433432
      Andrei authored
      Semisync ack (master side) receiver thread is made to report
      details of faced errors.
      In case of 'magic byte' error, a hexdump of the received packet
      is always (level) NOTEd into the error log.
      In other cases an exact server level error is print out
      as a warning (as it may not be critical) under log_warnings > 2.
      
      An MTR test added for the magic byte error. For others existing mtr
      tests cover that, provided log_warnings > 2 is set.
      9c433432
    • Oleksandr Byelkin's avatar
      Fix --view-protocol failures · cb4c2713
      Oleksandr Byelkin authored
      cb4c2713
  16. 25 Oct, 2023 2 commits
  17. 24 Oct, 2023 2 commits