1. 01 Nov, 2023 2 commits
    • Brandon Nesterenko's avatar
      MDEV-32651: Lost Debug_sync signal in rpl_sql_thd_start_errno_cleared · c341743e
      Brandon Nesterenko authored
      The test rpl.rpl_sql_thd_start_errno_cleared can lose a debug_sync
      signal, as there is a RESET immediately following a SIGNAL. When the
      signal is lost, the sql_thread is stuck in a WAIT_FOR clause until
      it times out, resulting in long test times (albeit still
      successful).
      
      This patch extends the test to ensure the debug_sync signal was
      received before issuing the RESET
      c341743e
    • Alexander Barkov's avatar
      MDEV-32645 CAST(AS UNSIGNED) fails with --view-protocol · 4b65859a
      Alexander Barkov authored
      Item_char_typecast::print() did not print the "binary" keyword
      in such cases:
         CAST('a' AS CHAR CHARACTER SET latin1 BINARY)
      
      This caused a difference in "mtr" vs "mtr --view-protocol"
      4b65859a
  2. 31 Oct, 2023 3 commits
    • Igor Babaev's avatar
      MDEV-32569 Failure when executing PS for query using IN subquery · 9b049266
      Igor Babaev authored
      This patch corrects the fix for MDEV-32369. No Item_direct_ref_to_item
      objects should be allocated at the optimizer phase after permanent
      rewritings have been done.
      
      The patch also adds another test case for MDEV-32369 that uses MyISAM
      with more than one row.
      
      Approved by Rex Johnston <rex.johnston@mariadb.com>
      9b049266
    • Julius Goryavsky's avatar
      galera: disabled tests cleanup · edabb819
      Julius Goryavsky authored
      edabb819
    • Kristian Nielsen's avatar
      MDEV-27436: binlog corruption (/tmp no space left on device at the same moment) · 6fa69ad7
      Kristian Nielsen authored
      This commit fixes several bugs in error handling around disk full when
      writing the statement/transaction binlog caches:
      
      1. If the error occurs during a non-transactional statement, the code
      attempts to binlog the partially executed statement (as it cannot roll
      back). The stmt_cache->error was still set from the disk full error. This
      caused MYSQL_BIN_LOG::write_cache() to get an error while trying to read the
      cache to copy it to the binlog. This was then wrongly interpreted as a disk
      full error writing to the binlog file. As a result, a partial event group
      containing just a GTID event (no query or commit) was binlogged. Fixed by
      checking if an error is set in the statement cache, and if so binlog an
      INCIDENT event instead of a corrupt event group, as for other errors.
      
      2. For LOAD DATA LOCAL INFILE, if a disk full error occured while writing to
      the statement cache, the code would attempt to abort and read-and-discard
      any remaining data sent by the client. The discard code would however
      continue trying to write data to the statement cache, and wrongly interpret
      another disk full error as end-of-file from the client. This left the client
      connection with extra data which corrupts the communication for the next
      command, as well as again causing an corrupt/incomplete event to be
      binlogged. Fixed by restoring the default read function before reading any
      remaining data from the client connection.
      Reviewed-by: default avatarAndrei Elkin <andrei.elkin@mariadb.com>
      Signed-off-by: default avatarKristian Nielsen <knielsen@knielsen-hq.org>
      6fa69ad7
  3. 30 Oct, 2023 2 commits
    • Brandon Nesterenko's avatar
      MDEV-26272: The macro MASTER_INFO_VAR invokes undefined behaviour · e52777f1
      Brandon Nesterenko authored
      Updates to specific replication system variables need to target the
      active primary connection to support multi-source replication. These
      variables use the Sys_var_multi_source_ulonglong type. This class
      uses offsets of the Master_info C++ class to generalize access to
      its member variables.
      
      The problem is that the Master_info class is not of standard layout,
      and neither are many of its member variables, e.g. rli and
      rli->relay_log. Because the class is not of standard layout, using
      offsets to access member variables invokes undefined behavior.
      
      This patch changes how Sys_var_multi_source_ulonglong accesses the
      member variables of Master_info from using parameterized memory
      offsets to “getter” function pointers.
      
      Note that the size parameter and assertion are removed, as they are
      no longer needed because the condition is guaranteed by compiler
      type-safety checks.
      
      Reviewed By:
      ============
      Kristian Nielsen <knielsen@knielsen-hq.org>
      e52777f1
    • Rex's avatar
      MDEV-31995 Bogus error executing PS for query using CTE with renaming of columns · eb8053b3
      Rex authored
      This commit addresses column naming issues with CTEs in the use of prepared
      statements and stored procedures. Usage of either prepared statements or
      procedures with Common Table Expressions and column renaming may be affected.
      
      There are three related but different issues addressed here.
      
      1) First execution issue. Consider the following
      
      prepare s from "with cte (col1, col2) as (select a as c1, b as c2 from t
      order by c1) select col1, col2 from cte";
      execute s;
      
      After parsing, items in the select are named (c1,c2), order by (and group by)
      resolution is performed, then item names are set to (col1, col2).
      When the statement is executed, context analysis is again performed, but
      resolution of elements in the order by statement will not be able to find c1,
      because it was renamed to col1 and remains this way.
      
      The solution is to save the names of these items during context resolution
      before they have been renamed. We can then reset item names back to those after
      parsing so first execution can resolve items referred to in order and group by
      clauses.
      
      2) Second Execution Issue
      
      When the derived table contains more than one select 'unioned' together we could
      reasonably think that dealing with only items in the first select (which
      determines names in the resultant table) would be sufficient.  This can lead to
      a different problem.  Consider
      
      prepare st from "with cte (c1,c2) as
        (select a as col1, sum(b) as col2 from t1 where a > 0 group by col1
          union select a as col3, sum(b) as col4 from t2 where b > 2 group by col3)
        select * from cte where c1=1";
      
      When the optimizer (only run during the first execution) pushes the outside
      condition "c1=1" into every select in the derived table union, it renames the
      items to make the condition valid.  In this example, this leaves the first item
      in the second select named 'c1'.  The second execution will now fail 'group by'
      resolution.
      
      Again, the solution is to save the names during context analysis, resetting
      before subsequent resolution, but making sure that we save/reset the item
      names in all the selects in this union.
      
      3) Memory Leak
      
      During parsing Item::set_name() is used to allocate memory in the statement
      arena.  We cannot use this call during statement execution as this represents
      a memory leak.  We directly set the item list names to those in the column list
      of this CTE (also allocated during parsing).
      
      Approved by Igor Babaev <igor@mariadb.com>
      eb8053b3
  4. 28 Oct, 2023 1 commit
  5. 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
  6. 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
  7. 25 Oct, 2023 2 commits
  8. 24 Oct, 2023 3 commits
  9. 23 Oct, 2023 14 commits
    • Alexander Barkov's avatar
      MDEV-30048 Prefix keys for CHAR work differently for MyISAM vs InnoDB · df72c57d
      Alexander Barkov authored
      Also fixes: MDEV-30050 Inconsistent results of DISTINCT with NOPAD
      
      Problem:
      
      Key segments for CHAR columns where compared using strnncollsp()
      for engines MyISAM and Aria.
      
      This did not work correct in case if the engine applyied trailing
      space compression.
      
      Fix:
      
      Replacing ha_compare_text() calls to new functions:
      
      - ha_compare_char_varying()
      - ha_compare_char_fixed()
      - ha_compare_word()
      - ha_compare_word_prefix()
      - ha_compare_word_or_prefix()
      
      The code branch corresponding to comparison of CHAR column keys
      (HA_KEYTYPE_TEXT segment type) now uses ha_compare_char_fixed()
      which calls strnncollsp_nchars().
      
      This patch does not change the behavior for the rest of the code:
      - comparison of VARCHAR/TEXT column keys
        (HA_KEYTYPE_VARTEXT1, HA_KEYTYPE_VARTEXT2 segments types)
      - comparison in the fulltext code
      df72c57d
    • Alexander Barkov's avatar
      MDEV-31184 Remove parser tokens DECODE_MARIADB_SYM and DECODE_ORACLE_SYM · 09e23708
      Alexander Barkov authored
      Changing the code handling sql_mode-dependent function DECODE():
      
      - removing parser tokens DECODE_MARIADB_SYM and DECODE_ORACLE_SYM
      - removing the DECODE() related code from sql_yacc.yy/sql_yacc_ora.yy
      - adding handling of DECODE() with help of a new Create_func_func_decode
      09e23708
    • Brandon Nesterenko's avatar
      MDEV-32265: seconds_behind_master is inaccurate for Delayed replication · c5f776e9
      Brandon Nesterenko authored
      If a replica is actively delaying a transaction when restarted (STOP
      SLAVE/START SLAVE), when the sql thread is back up,
      Seconds_Behind_Master will present as 0 until the configured
      MASTER_DELAY has passed. That is, before the restart,
      last_master_timestamp is updated to the timestamp of the delayed
      event. Then after the restart, the negation of sql_thread_caught_up
      is skipped because the timestamp of the event has already been used
      for the last_master_timestamp, and their update is grouped together
      in the same conditional block.
      
      This patch fixes this by separating the negation of
      sql_thread_caught_up out of the timestamp-dependent block, so it is
      called any time an idle parallel slave queues an event to a worker.
      
      Note that sql_thread_caught_up is still left in the check for internal
      events, as SBM should remain idle in such case to not "magically" begin
      incrementing.
      
      Reviewed By:
      ============
      Andrei Elkin <andrei.elkin@mariadb.com>
      c5f776e9
    • Sergei Golubchik's avatar
      remove ./mtr --skip-im · 95177551
      Sergei Golubchik authored
      it did nothing for 14 years
      95177551
    • Sergei Golubchik's avatar
      ./mtr --skip-not-found · 78cd45b2
      Sergei Golubchik authored
      New mtr option --skip-not-found makes it to show not found tests
      as skipped
      
      main.a                                   [ skipped ]  not found
      
      (but only if the test was specified with the suite name)
      and not error out early with
      
      mysql-test-run: *** ERROR: Could not find 'a' in 'main' suite
      
      This is useful in buildbot, on builders that generate the list
      of tests dynamically.
      78cd45b2
    • Sergei Golubchik's avatar
      MDEV-32541 Assertion `!(thd->server_status & (1U | 8192U))' failed in... · b00fd50f
      Sergei Golubchik authored
      MDEV-32541 Assertion `!(thd->server_status & (1U | 8192U))' failed in MDL_context::release_transactional_locks
      
      SERVER_STATUS_IN_TRANS_READONLY should never be set without
      SERVER_STATUS_IN_TRANS.
      
      They're set together, must be removed together.
      b00fd50f
    • Sergei Golubchik's avatar
    • Sergei Golubchik's avatar
      MDEV-32500 Information schema leaks table names and structure to unauthorized users · 547dfc0e
      Sergei Golubchik authored
      standard table KEY_COLUMN_USAGE should only show keys where
      a user has some privileges on every column of the key
      
      standard table TABLE_CONSTRAINTS should show tables where
      a user has any non-SELECT privilege on the table or on any column
      of the table
      
      standard table REFERENTIAL_CONSTRAINTS is defined in terms of
      TABLE_CONSTRAINTS, so the same rule applies. If the user
      has no rights to see the REFERENCED_TABLE_NAME value, it should be NULL
      
      SHOW INDEX (and STATISTICS table) is non-standard, but it seems
      reasonable to use the same logic as for KEY_COLUMN_USAGE.
      547dfc0e
    • Sergei Golubchik's avatar
      2eee0e9b
    • Andrei's avatar
      MDEV-31792 Assertion fails in MDL_context::acquire_lock upon parallel... · 1fe4a71b
      Andrei authored
      MDEV-31792 Assertion fails in MDL_context::acquire_lock upon parallel replication of CREATE SEQUENCE
      
      The assert's reason was in missed FL_DDL flagging of CREATE-or-REPLACE
      Query event.
      MDEV-27365 fixes covered only the non-pre-existing table execution branch so
      did not see a possibility of implicit commit in
      the middle of execution in a rollback branch when the being CREATEd
      sequence table is actually replaced.
      The pre-existing table branch cleared the DDL modification
      flag so the query lost FL_DDL in binlog and its parallel execution
      on slave may have ended up with the assert to indicate the query
      is raced by a following in binlog order event.
      
      Fixed with applying the MDEV-27365 pattern.
      An mtr test is added to cover the rollback situation.
      The description test [ pass ] with a generous number of mtr parallel
      reties.
      1fe4a71b
    • Oleksandr Byelkin's avatar
      New CC v3.1 · 5ca941ca
      Oleksandr Byelkin authored
      5ca941ca
    • Alexander Barkov's avatar
      d2d657e7
    • Anthony Ryan's avatar
      MDEV-29914: Fix maridab-upgrade when sql_safe_updates = on is set in my.cnf · babd8336
      Anthony Ryan authored
      Tested multiple major version upgrades with sql_safe_updates enabled, and
      confirmed the issue is resolved.
      
      Reviewer: Daniel Black
      babd8336
    • Alexander Barkov's avatar
      MDEV-32025 Crashes in MDL_key::mdl_key_init with lower-case-table-names=2 · 179424db
      Alexander Barkov authored
      Backporting a part of MDEV-32026 (which also fixed MDEV-32025 in 11.3)
      from 11.3 to 10.4.
      
      The reported crash happened with --lower-case-table-names=2
      on statements like:
      
      ALTER DATABASE Db1 DEFAULT CHARACTER SET utf8;
      ALTER DATABASE `#mysql50#D+b1` UPGRADE DATA DIRECTORY NAME;
      
      lock_schema_name() expects a normalized database name
      and assert if a non-normalized name comes.
      
      mysql_alter_db_internal() and mysql_upgrade_db() get
      a non-normalized database name in the parameter.
      Fixing them to normalize the database name before passing
      it to lock_schema_name().
      179424db
  10. 21 Oct, 2023 1 commit
    • Jan Lindström's avatar
      MDEV-32024 : Galera library 26.4.16 fails with every server version · e913f4e1
      Jan Lindström authored
      Problem was that total order isolation (TOI) is started before
      we know sequence implementing storage engine. This led to
      situation where table implementing persistent storate
      for sequence in case of MyISAM was created on applier causing
      errors later in test execution.
      
      Therefore, in both CREATE SEQUENCE and ALTER TABLE to implementing
      persistent storage we need to check implementing storage engine
      after open_tables and this check must be done in both master
      and applier, because if implementing storage engine is MyISAM
      it does not support rollback.
      
      Added tests to make sure that if sequence implementing storage
      engine is MyISAM or we try to alter it to MyISAM user gets error
      and changes are not replicated.
      Signed-off-by: default avatarJulius Goryavsky <julius.goryavsky@mariadb.com>
      e913f4e1
  11. 20 Oct, 2023 1 commit