Home - Waterfall Grid T-Grid Console Builders Recent Builds Buildslaves Changesources - JSON API - About

Console View


Categories: connectors experimental galera main
Legend:   Passed Failed Warnings Failed Again Running Exception Offline No data

connectors experimental galera main
Kristian Nielsen
Merge 11.8 to 12.3

Signed-off-by: Kristian Nielsen <[email protected]>
Raghunandan Bhat
MDEV-39559: Assertion `b` failed in `my_strnncoll_xxxx_nopad_ci`

Problem:
  When verifying a `UNIQUE` constraint over an empty BLOB/TEXT column,
  `Field_blob::cmp(a_ptr, b_ptr)` extracts a NULL data pointer (with
  length 0) from the record slot and forwards it to the charset-level
  comparison, which asserts non-NULL pointers (added in MDEV-35717).

  A zero-length blob is allowed to have a NULL data pointer in its
  record slot; `Field_blob::val_decimal()` already treats (NULL, 0) as
  an empty value. The comparison paths missed that substitution.

Fix:
  - In `Field_blob::cmp(a_ptr, b_ptr)`and
    `Field_blob::key_cmp(key_ptr, max_key_length)`, substitute "" for a
    NULL data pointer before delegating to the comparison.
  - Add a debug assert in each of the above functions to document the
    invariant that a NULL pointer is only valid alongside zero length
    and (NULL, length>0) is invalid.
drrtuy
chore: update DuckDB docs and info.
Kristian Nielsen
Post-merge fix

Signed-off-by: Kristian Nielsen <[email protected]>
Tony Chen
MDEV-39828 Stabilize query_cache_executable_comments counter checks

The test asserted absolute Qcache_inserts/Qcache_hits values but reset them
with FLUSH STATUS which  does not clear those global counters.
The expected values were therefore cumulative from a pristine server, so the
test drifted by a constant offset whenever the mysqld instance was reused with
prior query cache activity (fulltest server reuse, --repeat).

E.g:

```
./build/mysql-test/mysql-test-run.pl --parallel=1 --repeat=2 main.query_cache_executable_comments
```

Use FLUSH GLOBAL STATUS instead, matching every other query cache test
(query_cache.test, query_cache_with_views.test, subselect_cache.test).
This zeroes the SHOW Qcache counters, making each case independent
of server history.

All new code of the whole pull request, including one or several files
that are either new files or modified ones, are contributed under the
BSD-new license. I am contributing on behalf of my employer Amazon Web
Services, Inc.
Kristian Nielsen
Merge branch '12.3' into 13.0
Yuchen Pei
MDEV-24813 Signal full scan to storage engines.

When starting to do a full table/index scan without a WHERE or JOIN
condition, tell the storage engine so and the corresponding
ulong-truncated LIMIT.

Include an innodb implementation: added an innodb switch
table_lock_on_full_scan, so that when the switch is on, on receiving
the full scan signal from the sql layer, if the truncated LIMIT is
ULONG_MAX (likely no LIMIT), attempt to acquire a table lock.

Updated tests that have different results with the switch on.

(Comment and code edited by Sergei Petrunia)

MDEV-24813 Drop low-value table_lock test combinations

The three deadlock_*_race tests cannot reach their DEBUG_SYNC race
under a table lock (it degenerates to a timeout), and the three I_S
tests only restate a lock-mode change already covered
by innodb_full_scan.test.

- Addressed review comments
Jan Lindström
MDEV-38870 : Galera test failure on galera.MDEV-38201

Test changes only. Moved wait condition where node should
disconnect from cluster because it has become inconsistent.
After that next FLUSH HOST based on timing could return
not supported or timeout.
Kristian Nielsen
Merge branch '11.8' into 12.3
Pekka Lampio
MDEV-38386 Fix incomplete cleanup in Galera MTR tests failing under --repeat

A number of Galera MTR tests pass on the first run but fail on a second
--repeat iteration, because server, cluster or filesystem state leaks
across runs and the test does not restore a clean starting state.

Fix the cleanup (or force a fresh cluster) in the affected tests. Each
fix was verified with --repeat=2 --force.

1. Stale async-slave GTID position (11 tests)

  RESET SLAVE [ALL] does not clear gtid_slave_pos. As the master does
  RESET MASTER in cleanup, on the next run the slave considers the
  events already applied and skips them, so the replicated tables never
  appear. Clear the position with SET GLOBAL gtid_slave_pos = "".

2. Leftover binlog GTID state from trailing cleanup (1 test)

  Trailing DROP TABLE / mtr.add_suppression statements ran after the
  .inc's reset master and re-populated node_2's binlog. gtid_binlog_state
  keeps the latest seqno per (domain, server_id) pair, so a stray
  0-2-<n> survived into the next run and broke the state comparison.
  Reorder the cleanup and reset node_2's binlog last.

3. Cluster-global, one-time or time-window state (11 tests)

  The wsrep GTID domain seqno is cluster-global and is not reset by
  reset master (nor by a mid-test SST rejoin); error-log contents,
  warning-flood suppression timers and one-time bootstrap behaviour are
  likewise not restored by in-test cleanup. Force a fresh cluster with
  include/force_restart.inc.

4. Leftover filesystem artifacts (1 test)

  mariabackup refuses to back up into a non-empty target directory, so
  the leftover target dirs from the previous run made the backup fail
  silently and the expected log messages never appeared. Remove the
  target directories in cleanup.
Dave Gosselin
MDEV-39207:  mark test as not_embedded

Test fails on embedded CI because original not_embedded flag was not preserved
Daniel Black
MDEV-31209 Queries with window functions do not obey KILL / max_statement_time

Window functions run in a loop in
Frame_cursor::compute_values_for_current_row which can include a large
number of rows.

Adjust this function to check for the current thd being killed by only
every 256 rows, so as not to destroy any CPU pipelining or similar.
Kristian Nielsen
Post-merge fixes

Signed-off-by: Kristian Nielsen <[email protected]>
Kristian Nielsen
Document the correct use of replication terminology

Signed-off-by: Kristian Nielsen <[email protected]>
Dave Gosselin
MDEV-39952:  Skip binlog_in_engine tests that need mariabackup

Several tests in the binlog_in_engine suite run the mariabackup
binary but did not check that it was built.  When the server is
built with WITH_MARIABACKUP=OFF, the test runner leaves the
mariabackup command empty and these tests fail instead of being
skipped.

Add include/have_mariabackup_binary.inc, which skips the test when
the binary is not available, and source it from the affected tests.
Unlike have_mariabackup.inc, it does not also require socat or nc,
because these tests copy the backup to a local directory rather than
streaming it.
Andreas Schwab
MDEV-39925: Fix error reporting in create_libaio

The io_setup function in libaio returns a negated errno value on error,
but strerror expects a normal errno value.
Fariha Shaikh
MDEV-39928 Fix GitLab CI centos9 job failure

The centos9 job uses yum-builddep -y mariadb-server to install build
dependencies, but the mariadb-server source package has been removed
from CentOS Stream 9 repositories. Replace with explicit installation of
the required build dependencies.

All new code of the whole pull request, including one or several files
that are either new files or modified ones, are contributed under the
BSD-new license. I am contributing on behalf of my employer Amazon Web
Services, Inc.
Marko Mäkelä
MDEV-39862 innodb_log_archive=ON corruption after modifying file parameters

log_t::set_buffered(), log_t::set_write_through(): If a log file switch
with innodb_log_archive=ON is in progress, ignore a
SET GLOBAL statement that would attempt to modify
innodb_log_file_buffering or innodb_log_file_write_through.

This prevents the log from becoming corrupted. The problem was that we
would close log_sys.log.m_file that pointed to the latest log file and
then reopen a second handle to the previous log file, which
log_sys.resize_log.m_file is already pointing to. As a result, log records
would be written to the wrong log file, causing the log to be corrupted.

The statements SET GLOBAL innodb_log_file_buffering and
SET GLOBAL innodb_log_file_write_through will also be ignored when a
SET GLOBAL innodb_log_file_size operation is in progress on a
circular-format log (ib_logfile0). The statements will have an effect
when InnoDB is holding only one log file open, which should be most
of the time. These statements have no effect when the log file is
mapped to persistent memory.

Whether a requested change took place can be checked by executing
a statement like the following:
SELECT @@GLOBAL.innodb_log_file_buffering;

Tested by: Saahil Alam
Yuchen Pei
[fixup] Move tests requiring an example plugin from sys_vars.session_track_system_variables_basic to a separate test

A follow up to 1f56d9c3feeeca82661cbe57cb628207c8b186f8. This restores
test coverage when the example plugin is not built.
Dave Gosselin
MDEV-39952:  Skip tests that need mariabackup

Skips tests that require mariabackup if mariabackup was not
built (WITH_MARIABACKUP=OFF).

Backport of the same MTR change from 12.3 but applied to
additional tests.
Dave Gosselin
MDEV-38669:  ASAN fail in Item_func_collect::add during ST_COLLECT

st_collect read past the end of its input because it assumed
that the input was a valid geometry.  Check that the length of the
input is at least long enough to possibly contain a valid geometry.
Dave Gosselin
MDEV-38158:  Incorrect query result

When setup_copy_fields() needs to copy a non-aggregate function value,
it doesn't construct an Item_copy directly.  Instead, it calls
Type_handler::create_item_copy, which is a kind of factory.  The base
Type_handler::create_item_copy returns Item_copy_string.  Some type
handlers override it, like timestamp and fixed binary.  However, the
numeric type handlers (e.g., float, double, int, decimal) did not, so
they fell through to that base and got Item_copy_string.

A SELECT that aggregates will copy each non aggregate function value
into a temporary table through an Item_copy object, whose concrete
type is chosen by the create_item_copy method on the value's type
handler.  For numeric types that method returned Item_copy_string,
which stores the value as text.  A FLOAT keeps only FLT_DIG
significant digits as text, too few to reproduce its 24 bit mantissa,
so the copied value differed from the original.  With one row per
group, CAST(c1 AS FLOAT) - MIN(CAST(c1 AS FLOAT)) returned a large
number instead of zero.

Add Item_copy_real with Item_copy_float and Item_copy_double variants
that keep the value as a double, the same way Item_cache_real does, and
let the float and double type handlers create them.  This mirrors the
existing copy items for timestamp and fixed binary types.
Fariha Shaikh
MDEV-39931 Fix main.socket_conflict failure when running as root

The test directly executes $MYSQLD via --exec, bypassing MTR's automatic
--user=root injection. In GitLab CI containers where tests run as root,
mariadbd refuses to start and the test fails.

Skip the test when running as root, matching the existing approach used
by the related main.bad_startup_options test.

All new code of the whole pull request, including one or several files
that are either new files or modified ones, are contributed under the
BSD-new license. I am contributing on behalf of my employer Amazon Web
Services, Inc.
Thirunarayanan Balathandayuthapani
MDEV-39963  InnoDB system tablespace autoshrink fails when the tail  extent is an empty XDES_FREE_FRAG extent

Problem:
========
- The InnoDB system tablespace fails to autoshrink even when it is
almost entirely free. Defragmentation reports success but no
space is reclaimed, and the log shows the high-water mark pinned
at the end of the file.

fsp_traverse_extents(): when locating the last used extent,
descends from the end of the tablespace and treats an extent
as reclaimable only when it is XDES_FREE, or the descriptor-page
extent (XDES_FREE_FRAG with two used pages).
Every other XDES_FREE_FRAG extent stops the scan.

An XDES_FREE_FRAG extent with zero used pages can legitimately
exist on disk in tablespaces written by server versions between
commit 0b47c126e31 (MDEV-13542) and commit 7737f15f874 (MDEV-31333).
In that window fsp_free_page() evaluated xdes_get_n_used()
before clearing the freed page's XDES_FREE_BIT, so freeing the
last used page of a fragment extent left the empty extent on the
FSP_FREE_FRAG list instead of moving it to FSP_FREE.
7737f15f874 restored the correct ordering, but pre-existing
data files may still carry such extents.

Such an empty extent is logically identical to XDES_FREE, but
fsp_traverse_extents() mistook it for a used extent, pinned
last_used_extent at end-of-file, and the shrink reclaimed nothing.

Solution:
========
fsp_traverse_extents(): Treat an XDES_FREE_FRAG extent with no used
pages (n_used == 0) the same as XDES_FREE
Rucha Deodhar
MDEV-34723: NEW and OLD in a trigger as row variables

Implementation:
NEW and OLD represent the entire table row. So it can be thought of as
list of Item_trigger_field. When we are in a trigger and NEW or OLD is
encountered, create Item_trigger_row object with same constructor as
Item_trigger_field, it will also be used later while creating
Item_trigger_field objects. Populate the m_fields list while
fixing fields. Create a corresponding instruction sp_instr_set_trigger_row
which will be used to set the values
Kristian Nielsen
Merge 10.11 to 11.4

Signed-off-by: Kristian Nielsen <[email protected]>
Yuchen Pei
MDEV-39805 MDEV-39790 signal EOF in "unordered" partition index scans

This is a follow-up fix to MDEV-39535
96531691c18ebea4993454ee9d355e60ad9bea07 and MDEV-20195
8721a00dd38dc0aa1514a3b5ca8c95c6e94af1c9.

In those two fixes we added check for m_part_spec.start_part ==
NO_CURRENT_PART_ID (a typical sign of EOF) in
ha_partition::handle_unordered_prev and
ha_partition::handle_unordered_next respectively. However, because of
MDEV-37330 496aecf9251e3d74b83285f4e787daa9d8c37ae4, we skip a call to
handle_unordered_scan_next_partition inside these functions on
EOF (error == HA_ERR_END_OF_FILE and we have run out of partitions to
scan), whereas prior to MDEV-37330
496aecf9251e3d74b83285f4e787daa9d8c37ae4, it would call
handle_unordered_scan_next_partition which sets
m_part_spec.start_part= NO_CURRENT_PART_ID.

So in this patch we restore setting m_part_spec.start_part to
NO_CURRENT_PART_ID to signal EOF.
drrtuy
chore: TPC-H automation and packaging section update in README.
Marko Mäkelä
MDEV-39862: Add TODO comments about MDEV-36828

This addresses a review comment
by Thirunarayanan Balathandayuthapani
Thirunarayanan Balathandayuthapani
MDEV-39963  InnoDB system tablespace autoshrink fails when the tail  extent is an empty XDES_FREE_FRAG extent

Problem:
========
- The InnoDB system tablespace fails to autoshrink even when it is
almost entirely free. Defragmentation reports success but no
space is reclaimed, and the log shows the high-water mark pinned
at the end of the file.

fsp_traverse_extents(): when locating the last used extent,
descends from the end of the tablespace and treats an extent
as reclaimable only when it is XDES_FREE, or the descriptor-page
extent (XDES_FREE_FRAG with two used pages).
Every other XDES_FREE_FRAG extent stops the scan.

An XDES_FREE_FRAG extent with zero used pages can legitimately
exist on disk in tablespaces written by server versions between
commit 0b47c126e31 (MDEV-13542) and commit 7737f15f874 (MDEV-31333).
In that window fsp_free_page() evaluated xdes_get_n_used()
before clearing the freed page's XDES_FREE_BIT, so freeing the
last used page of a fragment extent left the empty extent on the
FSP_FREE_FRAG list instead of moving it to FSP_FREE.
7737f15f874 restored the correct ordering, but pre-existing
data files may still carry such extents.

Such an empty extent is logically identical to XDES_FREE, but
fsp_traverse_extents() mistook it for a used extent, pinned
last_used_extent at end-of-file, and the shrink reclaimed nothing.

Solution:
========
fsp_traverse_extents(): Treat an XDES_FREE_FRAG extent with no used
pages (n_used == 0) the same as XDES_FREE
Sergei Golubchik
MDEV-40065 bundled command-line clients don't always enforce length limits on server results

replace strmov/strxmov with strnmov, strmake, or my_snprintf
Kristian Nielsen
Merge 11.4 to 11.8

Signed-off-by: Kristian Nielsen <[email protected]>
Kristian Nielsen
Fix inconsistent terminology

Signed-off-by: Kristian Nielsen <[email protected]>
Marko Mäkelä
MDEV-39971: generate_option_list may invoke pclose(nullptr)

call_mariadbd(): Remove the redundant and potentially harmful call
of my_pclose(f) when my_popen() failed. At least in some versions
of GNU libc the function pclose(3) is declared with
__attribute__((nonnull)).

Fixes up commit 7828fb475b00d4211ba8ce1ec6e9a1b06e0fc39b (MDEV-32745)
Kristian Nielsen
Merge 12.3 to 13.0

This patch to mysqldump is only merged partially:

  commit 666ff1db3669a02025ae33d2cd1dfd263095c18d
  Author: Monty <[email protected]>
  Date:  Fri May 15 16:39:35 2026 +0300

      MDEV-39519 Change mariadb-dump to use SHOW REPLICA STATUS instead of SHOW SLAVE STATUS

The functionality for --dump-slave cannot be merged as the underlying
functionality was removed in this commit:

  commit 21c940d5996d9a72324642a92b8bd20f71de5590
  Author: ParadoxV5 <[email protected]>
  Date:  Thu Dec 4 21:22:20 2025 -0700

      MDEV-37146 mariadb-dump: Replace SHOW SLAVE STATUS usage with information_schema.SLAVE_STATUS

Signed-off-by: Kristian Nielsen <[email protected]>
Vladislav Vaintroub
Appveyor CI - use VS2026 image

Also, remove before_build logic trying to determine if newer commit on the
same branch exists. This takes a lot of time on outdated repos.

The same effect can be done by reducing the clone_depth to 1.
It will fail if newer commits exist, and is actually prefered - the amount
of pushes grew significantly in last time, thus fail-faster is a better
strategy to reduce build queue length.
Dave Gosselin
MDEV-36891:  std::make_pair compiler note

Construct the pair in place with emplace_back to silence the build
note.
Kristian Nielsen
Merge 13.0 to main

Signed-off-by: Kristian Nielsen <[email protected]>
PranavKTiwari
MDEV-22943: Assertion 'marked_for_read()' failed in Field_varstring::val_str on CHECKSUM TABLE

use_all_stored_columns() cleared read_set bits for all generated
columns, including persistent generated columns.

This caused stored generated columns to be accessed without being
marked for read, leading to a marked_for_read() assertion during
CHECKSUM TABLE EXTENDED.

Only exclude non-stored virtual generated columns from read_set.