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
Alessandro Vetere
MDEV-41844 Test innodb.buf_pool_resize_pcur_restore is flaky

The procedure read_into_first_new_block() requires that the page of a
table is read into the first block that a buffer pool grow adds. While
history exists, the purge coordinator runs once per second. It reads
undo log pages, and purge_truncation_callback() reads the header page
of each rollback segment. On a slow builder, these reads can take the
first new block in all 5 attempts.

Stop purge for the duration of the test with FLUSH TABLES ... FOR
EXPORT on a separate connection. A read view does not stop these reads.
Remove the wait for purge between the two cases, because purge is
stopped.

purge_sys_t::stop() waits only for the purge coordinator. Runs of
purge_truncation_callback() that the coordinator submitted before can
still read pages after FLUSH TABLES ... FOR EXPORT returns. Add the
debug keyword purge_stop_wait_truncation, which makes
purge_sys_t::stop() also wait for these runs, and set it in the test.

Assisted-by: Claude:claude-opus-5-5
Sergei Golubchik
MDEV-41480 Failed ADD PARTITION with a #mysql50# partition name removes the table

mysql_write_frm(WFRM_WRITE_SHADOW) declared a local `error` shadowing
the function-level one, so a failed ha_create_partitioning_metadata()
returned success and ALTER continued to install the shadow frm.

Assisted-by: Claude:claude-5.5-opus
Thirunarayanan Balathandayuthapani
MDEV-42037 Assertion failure bpage->oldest_modification() when ALTER TABLE … DISCARD TABLESPACE races with the page cleaner

Problem:
=======
The page cleaner holds the latch of a dirty page while
buf_flush_space() has released buf_pool.mutex. DISCARD TABLESPACE
meanwhile runs buf_flush_remove_pages(), which removes the page from
buf_pool.flush_list without taking the page latch. When the cleaner
resumes, buf_flush_discard_page() asserts oldest_modification()

Solution:
========
buf_flush_discard_page(): remove the page from the flush list only if
oldest_modification() is nonzero. Always release the latch and free
the page, and return whether it was freed.
Elena Stepanova
MDEV-42198 Options from MTR opt files are added multiple times

Options from .opt files of included files were appended every time
the file was sourced, so they got repeated once per include path.
It caused unnecessary server restarts, and too long server command
lines lead to startup failures on Windows.

Now each file caches only its own .opt options plus an ordered list
of the files (itself and everything it sources) whose options apply,
each file listed once. The test's options are assembled from that list.
Options of included files still precede those of the including file.

Assisted-by: Claude:claude-opus-5-5
Sergei Golubchik
MDEV-41029 AddressSanitizer: use-after-poison - "install soname ha_rocksdb"

rocksdb tried to modify a read-only sysvar (ignore_db_dirs). It was
kind of fine on startup, even if hackish, but at INSTALL PLUGIN time
it meant violating the contract, read-only sysvar cannot be modified
at run-time.

let's ignore any ill-conceived attempts to modify ignore_db_dirs
at run-time. as a result, if RocksDB is installed with INSTALL PLUGIN
command, new #rocksdb directory will not be excluded from SHOW DATABASES
list until server restart.
liufeng
MDEV-33843: Server crash via XPath unary minus recursion

Analysis:
The stack overrun check added by MDEV-33843 is executed only in
my_xpath_parse_OrExpr(). The XPath grammar rule

  UnaryExpr ::= '-' UnaryExpr

recurses directly in my_xpath_parse_UnaryExpr(), so a path made of many
'-' tokens consumes one stack frame per token without any limit and
overruns the thread stack. UPDATEXML() and EXTRACTVALUE() parse the path
in fix_fields(), therefore any user who can run a SELECT can terminate
the server with

  SELECT UPDATEXML(NULL, REPEAT('-', 100000), 1);

Before this patch the statement makes the backend exit with SIGSEGV
(exit status 139) and the client reports "Lost connection to server
during query". The equivalent parenthesized expression is already
rejected with ER_STACK_OVERRUN_NEED_MORE because it re-enters
my_xpath_parse_OrExpr().

Fix:
Run check_stack_overrun() at the entry of my_xpath_parse_UnaryExpr(),
as my_xpath_parse_OrExpr() does, and add a regression case to
mysql-test/main/xml that expects ER_STACK_OVERRUN_NEED_MORE.

The same statement then returns the regular stack-overrun error and the
server stays alive. main.xml passes.
Jan Lindström
MDEV-40212 galera_duplicate_primary_value stalls on single applier

Failure:
- The test needs two write sets applied concurrently by two
  appliers on node 1, but never sets wsrep-slave-threads, so it
  defaults to 1.
- lock_wait_wsrep_kill's debug sync parks the applier thread
  itself on WAIT_FOR wsrep_after_kill_continue; with only one
  applier, the second write set has no free thread, and WAIT_FOR
  wsrep_after_kill_reached_2 blocks until --debug-sync-timeout
  (300s).
- The timeout does not fail the test, so it reports pass without
  ever reaching the concurrent brute-force state MDEV-31658 added
  it to cover.

Fix:
- Set wsrep-slave-threads=2 on node 1, so the two independent
  write sets apply concurrently, matching what the test is meant
  to exercise.

Assisted-by: Teemu Ollakka <[email protected]>
Assisted-by: https://mariadb.org/governance/governance-ai-policy/
Alexey Yurchenko
MDEV-35940, MDEV-35964 reenable MTR tests

As MDEV-35940, MDEV-35964 have been fixed, reenable tests disabled
because of them
Elena Stepanova
MDEV-41085 Enable MTR tests on Windows: rpl suite

rpl.rpl_row_mysqlbinlog fails because apparently the client command
line on Windows cannot interpret the literal cp932 string which is
passed to it. Since the point of the test is not how the original
INSERT happens, but how it further works while replaying the binlog,
it should be acceptable to insert a hex-encoded value
Marko Mäkelä
MDEV-41813 OPTIMIZE TABLE makes tables grow

PageBulk::init(): Add a parameter for a hint page number, so that we will
try to allocate adjacent pages for the index.

After this change, the innodb_alter_copy_bulk=ON code path may actually
produce smaller files than the legacy code path.

Based on mysql/mysql-server@a3e2dbddec48ec229484bdf082b8c2f34ccf8c0b

Reviewed by: Thirunarayanan Balathandayuthapani
Vladislav Vaintroub
MDEV-30836 MTR hangs on Windows after warnings in the log at shutdown

Follow-up to the MDEV-30836 fix. With --force, parse_protocol()
returned 1 after a worker reported WARNINGS, so the manager went on
reading from the socket of that worker. A worker that was told to
exit with BYE sends WARNINGS and exits, and does not send anything
more.

On Windows Perl, non-blocking reads do not work, so the manager could
block in that read. It then never handled the results of the other
workers, and mtr hung after the last test.

Return 2 for such a worker, as for the other cases where the worker
needs no response, to continue with the next ready socket. The closed
socket is handled later, when it becomes readable.

A worker that was not told to exit also sends WARNINGS, before it
restarts servers or after a test with side effects, and then goes on
to send TESTRESULT. Keep reading from it, as before. The manager
remembers the workers it said BYE to.

Assisted-by: Claude:claude-sonnet-5-5
Sergei Golubchik
MDEV-41946 CONNECT: table option value used as printf format string, crash in ha_connect::GetRealString

For partitioned tables GetRealString() and FileExists() substituted
the partition name into FILE_NAME (and other options) by passing the
option value to snprintf() as the format string.

Replace the first "%s" with the partition name and copy the rest
literally, as already done for SRCDEF.

Assisted-by: Claude:claude-opus-5-5
Jan Lindström
MDEV-42139 fix spurious wakeup in gu_debug_sync_wait()

In galera_3nodes.galera_join_with_cc_X this let a waiter on the
"process_primary_configuration" sync point disappear from
wsrep_debug_sync_waiters between a wait_condition.inc poll and the
test's own follow-up SELECT, producing an empty result instead of the
point name.

Test now requires Galera library 26.4.29 where fix for
spurious wakeup in gu_debug_sync_wait() is.
Sergei Golubchik
MDEV-41504 COM_FIELD_LIST Integer Underflow Leading to Heap Over-read

reject COM_FIELD_LIST packets without a table name / wildcard separator.
Otherwise the wildcard started one byte past the packet end and its
length wrapped to UINT_MAX.

Assisted-by: Claude:claude-opus-5-5
Alexey Yurchenko
MDEV-41851 register cache manager with SAVEPOINT handler list

MDEV-41851 happens because by the time SAVEPOINT is called there
exists no connection cache manager yet and it does not care to
create one. As a result the cache manger is lazily created later
but is missing from the SAVEPOINT's handler list and thus is not
fired on ROLLBACK TO SAVEPOINT keeping the event in the cache
which in turn is replicated on subsequent COMMIT and applied on
the replicas.
Make sure to create cache manager in wsrep_register_binlog_handler()
if it does not yet exist.
Vladislav Vaintroub
MDEV-42049 MTR server-cert.pem has no DNS SAN, fails on OpenSSL 4.1

OpenSSL 4.1 no longer matches a host name against the subject CN when
the certificate has no DNS subjectAltName. Re-sign server-cert.pem with
subjectAltName=DNS:localhost, and add it to generate-ssl-certs.sh.

main.ssl_7937, main.ssl_system_ca and rpl.rpl_ssl1 fail with
OpenSSL 4.1 without this change.

The SHA1 fingerprint changes. main.ssl_fp (11.4+) must be updated when
merging up: F1:D0:08:AF:A1:D2:F4:15:79:B4:39:06:41:F4:20:96:F1:90:A9:65
-> AE:F0:29:15:F1:9E:A0:A0:69:FB:83:20:B9:30:E3:DE:2F:25:2C:37

Assisted-by: Claude:claude-sonnet-5-5
Jan Lindström
MDEV-42000 : galera.galera_restart_on_unknown_option fails

Problem was that test uses unknown Galera option. Server does
2-phase check for options. In first phase unknown options are
ignored and Galera SST/IST is started. In second phase
options are checked again now that we have Galera it detects
that provided option is unknown and tries to interrupt SST/IST
and disconnect wsrep and server using unireg_abort().

However, if Galera library has reached to IST receiver there
was no way to interrupt IST and mariadbd gets stuck in
unireg_abort() during wsrep disconnect. This issue has
been fixed on Galera library. For this test case we need
to just verify that Galera library version contains fix
for SST/IST interrupt i.e. at least 26.4.29.
Alexey Botchkov
MDEV-41430 auth_pam_tool leaves zombie processes.

As the auth_pam_tool claims root privileges, the mariadbd can't kill
it if it hangs.
So instead of sending the SIGKILL to the auth_pam_tool we set the
alarm() there so it kills itself after the timeout.
The alarm counter is hardcoded to 100 seconds so the authentication
can be halted even if the connect_timeout allows it to be longer.
The auth_pam.c now calls the waitpid() without the WNOHANG, so it waits
for the auth_pam_tool to return. If the PAM module aggressively resets
the alarm or handles the SIGALARM the pam_auth() can hang forever.
Jan Lindström
MDEV-40211 galera_connect.inc sleeps one second on each invocation

Failure:
- galera_connect.inc sleeps 1 second, unconditionally, before every
  connect, as a 2015 workaround for a node racing its own join/IST
  against another node's concurrent join (MDEV-7178).
- ~700 tests in the galera/wsrep suites go through this include, so
  the blind sleep costs roughly that many seconds in a full run,
  whether or not any node is still joining.

Fix:
- Replace the sleep with include/galera_wait_ready.inc after
  connecting, polling the actual wsrep_ready state instead of
  guessing a fixed delay. galera_wait_ready.inc is the existing,
  already widely used helper for this, so this reuses it rather
  than adding a new check.
- Add a $galera_no_wait_ready opt-out for a node that is expected
  to join a non-Primary component and so never becomes ready;
  galera_pc_weight.test isolates node_1 before connecting node_3,
  so node_3 needs it.
- The ready check itself must not wait on causality: a test can
  legitimately connect a second session to a node whose applier is
  stuck behind a local lock (galera_lock_table.test does, via LOCK
  TABLES), and wsrep_sync_wait would otherwise block the check's own
  first query on that same stuck applier. Set it to 0 for the check
  and restore it from the global value afterward, without reading it
  back first, since even a bare SELECT of the session variable hits
  the same wait.

Assisted-by: https://mariadb.org/governance/governance-ai-policy/
Jan Lindström
MDEV-41926 : galera_mdev_31517 times out: mariadbd gets stuck

Wrong variable name in the configuration leads to
unireg_abort() during wsrep disconnect. However, if
Galera library has reached to IST receiver there was no
way to interrupt IST and mariadbd gets stuck in unireg_abort()
during wsrep disconnect. This issue has been fixed on Galera
library. For this test case we need to just verify that
Galera library version contains fix for SST/IST interrupt
i.e. at least 26.4.29.
Hemant Dangi
MDEV-42091: --prepare must not trust plugin_dir from backup-my.cnf

Issue:
backup-my.cnf is part of the backup/transfer directory and can arrive over
an untrusted channel (e.g. a Galera SST stream). --prepare honored its
plugin_dir value as-is, letting whoever supplied the backup redirect
plugin loading to a directory of their choosing.

Solution:
Pass the joiner's own, locally-resolved --plugin-dir on the --prepare
command line: it wins over whatever backup-my.cnf says, regardless of
content, unless the user already chose one explicitly via
inno-apply-opts, which takes priority as a deliberate local choice.
Resolve it by asking the joiner's own mariadbd, which is config- and
compiled-default-aware, falling back to a plain config lookup if that's
unavailable. Add a regression test driving the real SST joiner script
directly: deliver a backup stream whose backup-my.cnf claims an
attacker-chosen plugin_dir, and confirm that directory is never
referenced.
Elena Stepanova
MDEV-42200 main.mysqlbinlog_stmt_compressed depends on previous tests
xnervwang
MDEV-41940 sys.ps_setup_reload_saved() leaves session sql_log_bin disabled after an error

sys.ps_setup_reload_saved() saves @@sql_log_bin and sets sql_log_bin =
0, but restores it only at the end of the procedure. On an error, its
EXIT HANDLER raises SQLSTATE 90001 without restoring sql_log_bin,
leaving the calling session with sql_log_bin = 0. Keep the saved value
in a local variable, as the fix for MDEV-42005 does, and restore it in
the handler when sql_log_bin differs from it. A caller that may not
set sql_log_bin fails at SET sql_log_bin = 0; the handler then leaves
sql_log_bin alone, so that caller still gets error 90001.
Vladislav Vaintroub
Do not attempt to resolve addresses that getnameinfo debug injections fake

The injections overwrite the lookup result anyway, but the real lookup
of the reserved 192.0.2.0/24 test addresses can be slow, and on Linux
without DNS fails with a temporary error. Skip it, and use a helper
skip_dns() in the tests that did not yet use getnameinfo_error_noname.

Assisted-by: Claude:claude-sonnet-5-5
Sergei Golubchik
MDEV-41123 bool show_role_grants(THD *, const char *, ACL_USER_BASE *, char *, size_t): Assertion `pair' failed

GRANT to a role that exists in memory but has no row in
mysql.global_priv took the "new role" path and called acl_insert_role(),
adding a second ACL_ROLE with the same name to acl_roles. DROP ROLE then
removed one of them, while user role_grants kept pointing to the other,
whose grant pair was already gone.

Reject the mismatch between the table and memory with
ER_PASSWORD_NO_MATCH, like replace_user_table() already does for users.

Also, remove repeatable role hash lookups, one is enough.

Assisted-by: Claude:claude-opus-5-5
Thirunarayanan Balathandayuthapani
MDEV-41336 CHECK TABLE EXTENDED crashes with innodb_force_recovery=3

Problem:
=========
  After a restart where purge has not run (When
innodb_force_recovery=3), purge_sys.head and purge_sys.tail are both
unset (trx_no=0). trx_lists_init_at_db_start() calls
purge_sys.clone_oldest_view<true>(), which clamped end_view to that
0, so end_view.m_low_limit_id became 0 and changes_visible()
returned false for every transaction id. end_view therefore
claimed that no history had been purged, although undo log records
purged before the restart may already have been freed and reused.

CHECK TABLE EXTENDED relies on end_view to decide whether an old
version's undo log record is still available. It followed the roll
pointer of a purged transaction into a reused undo page and
trx_undo_rec_get_pars() hit the assertion

Solution:
========
In purge_sys_t::clone_oldest_view<true>(), clamp end_view only if
purge has a known position (head.trx_no/tail.trx_no is nonzero).
Otherwise keep the oldest view as is, so that the undo log records
that purge is allowed to remove are reported as
DB_MISSING_HISTORY rather than being read.
Vladislav Vaintroub
mysql_client_test: accept a lost connection after a rejected proxy header

Follow-up to MDEV-39564, MDEV-39576 and MDEV-41691.

For some malformed headers the server closes the connection with bytes
still unread (v1 with a NUL or over 107 bytes, v2 with length 0). That
sends a TCP reset, which can make the client drop the error and report
CR_SERVER_LOST. Seen once, not reproduced. Accept it in those cases
only.

Assisted-by: Claude:claude-sonnet-5-5
Andreas Schnederle-Wagner
MDEV-41751 A FULLTEXT index added later misses rows when the first one was added to an empty table

When ALTER TABLE rebuilds a table with a hidden FTS_DOC_ID column, as
when adding the first FULLTEXT index or rebuilding a table that has
one, prepare_inplace_alter_table_dict() sets DICT_TF2_FTS_ADD_DOC_ID on
the new table, so that row_merge_build_indexes() assigns new FTS_DOC_ID
values; it clears the flag when it is done. Since MDEV-23805,
inplace_alter_table() skips that phase when the table is empty, so the
flag stayed set in the cached table definition until the table was
loaded again, for example after a restart. A FULLTEXT index added
before that without a rebuild got new document IDs instead of the
FTS_DOC_ID of the rows, and searches on it did not find the rows that
existed when it was created.

Do not set the flag when inplace_alter_table() skips that phase, that
is, when ha_alter_info->mdl_exclusive_after_prepare is set.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
Hemant Dangi
MDEV-42122: check_port() must verify the listener is our own

Issue:
wait_for_listen() asks check_port() whether a process named
socat/nc/netcat is listening on the expected port, but passes no PID
to match against, so check_port() accepts any process with that name
anywhere on the system. On a busy host running many concurrent SSTs,
an unrelated process can transiently hold the same port number, and
wait_for_listen() then reports "ready" even though this invocation's
own listener never came up.

Solution:
When check_port() isn't given a specific PID to match, verify that a
candidate process found by name and port is this script's own
process or a descendant of it, rather than accepting any same-named
process. Existing callers that already pass a known PID are
unaffected.
Sergei Golubchik
MDEV-41520 Unescaped XID bytes in SESSION_TRACK_TRANSACTION_CHARACTERISTICS

* always print gtrid and bqual in hex
* don't try to be smart to print as few fields as possible
  - it was broken and could skip bqual, but still print formatID
* don't try to predict how many bytes it'll take. Print into a local
  buffer, then memcpy. Robust and costs just one memcpy.
xnervwang
MDEV-42005 sys.diagnostics(), sys.ps_trace_thread() and sys.ps_trace_statement_digest() leave session sql_log_bin disabled

sys.diagnostics(), sys.ps_trace_thread(), and
sys.ps_trace_statement_digest() save @@sql_log_bin in @log_bin before
disabling binary logging, but calls to ps_setup_save(),
ps_setup_reload_saved(), and statement_performance_analyzer() overwrite
that saved value with 0. The trace procedures hit this when
in_auto_setup or in_auto_enable is TRUE; diagnostics() hits it whenever
the PERFORMANCE_SCHEMA engine is listed as supported, including with
performance_schema=OFF.

The three procedures now save the value in a local v_log_bin variable.
The new sysschema.pr_ps_trace_thread test and added cases in
sysschema.pr_diagnostics and sysschema.pr_ps_trace_statement_digest
check @@sql_log_bin before and after a successful call.
Sergei Golubchik
CONNECT: CSV table discovery does not check the FILE privilege

connect_assisted_discovery() checks the FILE privilege before reading
the file for FMT, DBF, XML, INI, VEC, REST, JSON and BSON tables, but
not for CSV, so a user without FILE could make CSVColumns() open and
parse any file.

Add TAB_CSV to the list.

Assisted-by: Claude:claude-opus-5-5
Elena Stepanova
MDEV-41085 Enable MTR tests on Windows: rpl suite

rpl.rpl_read_old_relay_log_info fails because the test overrrides
relay-log.info with the Linux-style ./slave-relay-bin.000001,
while Windows uses the format with backslashes, .\slave-relay-bin.000001
Hemant Dangi
MDEV-41158: authenticate the mariabackup SST backup-data stream too

Issue:
The joiner's per-transfer secret was only generated for
ssl-mode=VERIFY_*, and checked only on the small GTID stage: the
backup-data stage itself was accepted unauthenticated, letting any
TCP peer reaching the SST port supply a backup --prepare then runs.

Solution:
Generate the secret unconditionally and require it on the backup-data
stream too, built in lockstep with the existing encrypt/decompress/
progress wrapping so the check can't be silently skipped by it. Add
sst-mariabackup-allow-unauthenticated-donor for rolling upgrades,
failing closed on invalid values; VERIFY_*'s own pre-existing secret
check is unaffected by it. Add a regression test covering the
authenticated pipeline with that wrapping active.
Kristian Nielsen
Fix corrupt query string in mysqltest embedded

The mysqltest --send command re-used the same buffer for the query string to
send to each connection thread. This caused a race where a following --send
could overwrite the query before the first connection thread had time to
copy out the string, resulting in executing a corrupt query.

Instead, allocate a new string for each --send and free it in the connection
thread.

This was seen as a sporadic failure in --embeded-server in test
innodb.temp_truncate_freed_race (and probably others).

Signed-off-by: Kristian Nielsen <[email protected]>
Pekka Lampio
MDEV-38999: Galera - stale reads in explicit transactions

wsrep_must_sync_wait() skipped a statement's causal wait unconditionally
once a multi-statement transaction was open, regardless of which
wsrep_sync_wait bit was configured - so later statements could run
against a view no fresher than whatever BEGIN itself happened to check.
A timed-out wait's error also stayed sticky until commit/rollback,
breaking ROLLBACK itself.

Fix: only skip the wait once the transaction has made its first write or
locking read (SELECT ... FOR UPDATE/LOCK IN SHARE MODE, including via a
stored procedure CALL, autocommit statements, and UNION) - after that,
re-waiting risks a self-deadlock against the local applier. Clear a
timed-out wait's error immediately instead of leaving it sticky.

Tests: galera_MDEV-38999*.test cover the bitmask gap, the self-deadlock
risk, stored-procedure/UNION/autocommit locking reads, and the query
cache's independent wait path.

Assisted-by Claude AI
Jan Lindström
MDEV-42140 require galera >= 26.4.29 in galera_wsrep_schema_detached

Add a galera library version check and the resulting .result line.
Requires a galera library with the MDEV-42140 IST allowlist fix.

Assisted-by: Claude:claude-4.6-sonnet
Elena Stepanova
MDEV-42202 perfschema.relaylog fails when run after other replication tests

The test checks file I/O instrumentation accumulated since server
startup, so it relied on getting freshly started servers. With
duplicate options removed, mtr may now reuse servers left by
a previous replication test, and the test sees binary/relay log
files and statistics from it.

Restart both servers at the beginning of the test, removing
binary and relay logs while the servers are down. RESET MASTER
and RESET SLAVE are not sufficient, as performance schema keeps
instances of files deleted by them, and a restart opens a new
binary log anyway.

Assisted-by: Claude:claude-opus-5-5
Elena Stepanova
MDEV-41085 Enable MTR tests on Windows: rpl suite

rpl.rpl_change_master_long_channel_name fails on Windows because it
expects a 252-character name (base name, excluding the path) to be
valid; on Windows the whole path is limited to 260 characters, so
252-character name already fails
Jan Lindström
MDEV-42141 tolerate ER_NO_SUCH_TABLE in GCF-1018B's reap

wsrep_sync_wait=0 lets node_2's DELETE run before node_1's CREATE
TABLE replicates, so the first iteration of the test's 500-iteration
INSERT/DELETE loop can legitimately race a not-yet-existing t1. The
--error list on node_2's reap did not accept ER_NO_SUCH_TABLE, even
though it already tolerates other non-deterministic races (lock wait,
deadlock, duplicate key) for the same reason, matching the pattern
used for the same race in GCF-1060 (MDEV-41923).