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.
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.
Marko Mäkelä
MDEV-40063 Corruption due to race in SET GLOBAL innodb_log_archive=ON

There was a race condition between log_t::write_checkpoint() and
the execution of SET GLOBAL innodb_log_archive=ON (enabling log archiving).
We had wrongly allowed the concurrent execution of log_t::set_archive()
and log_t::write_checkpoint(). The result was that
log_sys.next_checkpoint_no was corrupted. This could have broken
crash recovery.

log_t::write_checkpoint(): When we are releasing log_sys.latch while
durably writing the checkpoint header block, assign log_sys.resize_log
to log_sys.log to inform other threads that a checkpoint is in progress.
Previously, we only did this when innodb_log_archive=ON holds.

log_t::resize_start(): Relax a debug assertion for the logic change.

Tested by: Matthias Leich
Kristian Nielsen
Merge branch '12.3' into 13.0
Sergei Petrunia
Remove un-needed files

Added by
MDEV-39368: Trace replay: add --extra-server support, part 1.

should have been removed by

Revert the --replay-server mtr feature
Daniel Black
MDEV-39585: Support SHUTDOWN command on Windows in bootstrap

Don't perform mysqld_win_initiate_shutdown under --bootstrap when
triggered by SHUTDOWN. With this we don't perform any service
interactions.

Then the shutdown can proceeded without then hard process termination
in mysqld_win_initiate_shutdown. This previously occurred because the
handle_connections_win() was never called in --bootstrap and therefore
startup_complete() was false.

Thanks Vladislav Vaintroub for investigation and providing
implementation guidance.
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.
Kristian Nielsen
Post-merge fixes

Signed-off-by: Kristian Nielsen <[email protected]>
Sergei Golubchik
MDEV-30041 don't set utf8_is_utf8mb3 by default in the old-mode
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.
Sergei Golubchik
Fix RocksDB builds with aocc

Partially revert 526f0765b3f9
Daniel Black
MDEV-39585 mariadb bootstrap fails to perform plugin deinitalization

mariadbd under --bootstrap failed to preform plugin deinitialization.

The sleep(2);exit is removed and replaced to a goto termination label
to perform the same shutdown procedure of the server after all the
connection closing.

To prevent a compile error about char *user being uninitialized
this sql_print_information(ER_DEFAULT(ER_NORMAL_SHUTDOWN)) is moved to
its own block. The memory free did need to occur in the bootstrap mode
too to avoid memory leak errors.

wait_for_signal_thread_to_end(), was previously in close_connections()
however its required too for --bootstrap.
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
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.
Sergei Petrunia
Code cleanup in JSON array-of-object reading, add unit tests.
Thirunarayanan Balathandayuthapani
- Handled other maribackup commands
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
Kristian Nielsen
Merge 10.11 to 11.4

Signed-off-by: Kristian Nielsen <[email protected]>
Sergei Golubchik
MDEV-30041 don't set utf8_is_utf8mb3 by default in the old-mode
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.
Daniel Black
MDEV-35462 Remove obsolete compiler version checks from RocksDB CMakeLists.txt (fix)

-fPIC was erronously removed in 526f0765b3f961803919ec2c47074c5e029acbfb. Replaced with the
POSITION_INDEPENDENT_CODE target property.
Sergei Golubchik
bb fixes
Sergei Golubchik
MDEV-30041 don't set utf8_is_utf8mb3 by default in the old-mode
Marko Mäkelä
MDEV-39862: Add TODO comments about MDEV-36828

This addresses a review comment
by Thirunarayanan Balathandayuthapani
Dave Gosselin
MDEV-25964:  Unexpected bypass of lock

When an uncommitted transaction inserts rows into a table and
another statement locks rows in the same table (SELECT ... FOR UPDATE)
while computing a MIN or MAX, then:
  1. In a Debug build, the server aborts on an assertion
  2. In a Release build, the server returns wrong results
These errors occur because, while reading a group of rows for computing
a MAX, the transaction timeout error was swallowed.

Under the scenario described above and captured in the new test at this
commit, QUICK_GROUP_MIN_MAX_SELECT::next_max() emits a lock timeout error
during QUICK_GROUP_MIN_MAX_SELECT::get_next() but the error was suppressed
if we computed a MIN.

Keep the MAX result when the MIN call succeeded but the MAX result
failed, so the error propagates to the client.
Thirunarayanan Balathandayuthapani
MDEV-39061  mariadb-backup compatible wrapper for BACKUP SERVER

scripts/mariabackup/mariabackup.sh: a drop-in, mariadb-backup
compatible POSIX sh wrapper that drives the server-side BACKUP
SERVER command, so existing mariadb-backup invocations keep working
without changing user scripts.

--backup translates into "BACKUP SERVER TO '<dir>'" over the mariadb
client, forwarding connection options; --parallel=N becomes the "<N> CONCURRENT" clause.
After a successful backup the wrapper writes backup-prepare.cnf into
the target directory, recording the running  server's mariadbd path and
InnoDB layout (page size, data file path, undo tablespaces, checksum algorithm,
log file size). When the server is encrypted it also records how to reload
the key-management plugin  (plugin name, key-file path, algorithm).

--prepare runs mariadbd --bootstrap on the backup with
backup-prepare.cnf as its defaults file, replays the archived redo
over the [recovery_start, recovery_target] window read from
backup.cnf, then replaces the archived log with a freshly built
circular ib_logfile0 so an ordinary server can start on the directory.

--copy-back / --move-back place a prepared backup into the datadir
with cp / mv, create the datadir if missing, refuse a non-empty
datadir unless --force-non-empty-directories is given, and print the
post-restore chown reminder.

wrapper with these options are not supported yet
--incremental backup/prepare,
--apply-log-only,
--rollback-xa,
partial backup (--databases/--tables, which would need server-side backup_include/backup_exclude),
and output streaming/compression/encryption.

--export is accepted but warns and runs a plain recovery.

extra/mariabackup/CMakeLists.txt: install the wrapper as
mariadb-backup-server behind a new WITH_MARIABACKUP_WRAPPER option (OFF by default)

scripts/mariabackup/README.md documents the modes, the unsupported
options, and the backup.cnf / backup-prepare.cnf formats.

include/have_mariabackup_wrapper.inc redirects $XTRABACKUP to the
wrapper so a test opts in by sourcing one file, skipping when the
wrapper, sh, or the mariadb client is unavailable.

include/have_mariabackup_combination.inc runs a test under both the
[OLD] mariadb-backup binary and the [NEW] wrapper
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]>
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]>
Daniel Black
MDEV-39541 mem_pressure::~mem_pressure() causes a crash on bootstrap

Fill in the anomaly shutdown paths of InnoDB to include call to
buf_mem_pressure_shutdown now that MDEV-39585 provides some
proper calls shutdown InnoDB and other plugins during the shutdown
under --bootstrap.

Alternate: destructor attribute on buf_mem_pressure_shutdown would
acheive the same thing and given Linux compilers are capabile of
this. This is possible as mem_pressure is currently implemented
in Linux onny.
Sergei Golubchik
MDEV-30041 don't set utf8_is_utf8mb3 by default in the old-mode
Sergei Petrunia
Fix unittest name: jons_reader -> json_reader
Sergei Golubchik
bb fixes
Marko Mäkelä
MDEV-40070 innodb_log_archive multi-batch recovery crash

recv_sys_t::parse_mmap(): When the current mini-transaction spans two
log files and we run out of memory while attempting to store the parsed
records into recv_sys.pages, the next log file would already have been
closed by recv_sys_t::rewind(). Handle this condition specially.
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.