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
Oleksandr Byelkin
Merge branch 'bb-12.3-release' into bb-13.1-release
Sergei Golubchik
MDEV-42025 Unauthenticated handshake converts an unbounded CLIENT_CONNECT_WITH_DB database name

cut the database name to SAFE_NAME_LEN+1 characters before converting
it, a longer name is invalid anyway and stays invalid after the cut.

Assisted-by: Claude:claude-opus-5-5
Sergei Golubchik
MDEV-39596 Unexpected "No database selected" error for a CALL inside an anonymous block

For name1.name2() the PATH loop searches CURRENT_SCHEMA for a
package name1. In an anonymous block without a current database
resolve_current_schema() called copy_db_normalized(), which raised
ER_NO_DB_ERROR. But without a current schema there is no package
to find, name1.name2 can only be schema.routine.

Skip the unresolvable CURRENT_SCHEMA in an anonymous block, as it is
done outside of stored programs. Unqualified names never get here
without a current database, make_sp_name() and
Create_qfunc::create_func() reject them first.

Assisted-by: Claude:claude-opus-5-5
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
Oleksandr Byelkin
Merge branch 'bb-11.8-release' into bb-12.3-release
Oleksandr Byelkin
Merge branch 'bb-11.4-release' into bb-11.8-release
Sergei Golubchik
MDEV-40543 Assertion `opt->value.str' failed in append_create_options on ALTER TABLE ... REORGANIZE PARTITION

partition syntax is printed from the parsed option list, which
contains =DEFAULT (NULL value) entries. Skip them, like frm writer does.

Assisted-by: Claude:claude-opus-5-5
Sergei Golubchik
MDEV-39822 MHNSW index returns wrong results for M >= 128

* number of neighbors is stored in a byte
* nodes have 2*M neighbors on the layer 0
=> M cannot be larger than 127
Marko Mäkelä
MDEV-40935: Infinite loop in SET GLOBAL innodb_log_archive

log_t::set_archive(): Ensure that a log checkpoint will be written
even if no dirty pages exist in the buffer pool. This was reproduced
with an intermittent livelock during the test innodb.log_file_size_online.
Jan Lindström
MDEV-41737 Galera async replica SQL thread stops instead of retrying

When a parallel replication worker on a Galera node loses local
certification, the SQL thread stops instead of retrying the event group.

- rpt_handle_event(): call wsrep_after_statement() only when the apply
  succeeded. On a wsrep deadlock error without a MariaDB error, raise
  ER_LOCK_DEADLOCK so the failure is retryable.
- retry_event_group(): ignore the wsrep_after_statement() result. The
  error is reset right after.
- Add a debug sync point and the test galera.MDEV-41737.

Assisted-by: Claude:claude-4.6-sonnet
Oleksandr Byelkin
Merge branch 'bb-10.11-release' into bb-11.4-release
Oleksandr Byelkin
MDEV-41258 Crash in Item_func_nextval on prepared re-execution

Sequence prelocking entries were matched across re-executions by
db.str/table_name.str pointer identity, aliasing memory on the TABLE's
own mem_root. Once the owning table was closed and reopened, those
pointers went stale, leaving a dangling duplicate entry that still got
opened and crashed.
Fix: match entries by owning TABLE_LIST and position, deep-copied onto
the statement's own arena.

The relink was gated by has_prelocking_list, which stays true forever
once a trigger is involved, so it silently stopped running after the
first execution for such statements.
Fix: moved it into its own function, called unconditionally per table,
keeping the original gating, scoped to DML statements only.

A stale entry's linked_table pointer could survive its owner's open
being skipped, or a mid-statement open_tables() backoff
(close_tables_for_reopen()), leaving open_table()'s backlink write to
land on freed memory.
Fix: clear it in TABLE_LIST::reinit_before_use() and in
close_tables_for_reopen().

set_parameters() overwrote lex->default_used from each execution's own
bound parameters only, losing a literal DEFAULT written in the
statement text itself.
Fix: also record default_used at prepare time and OR it in.

A mid-execute_loop() reprepare() swaps in a freshly re-parsed lex,
losing "EXECUTE ... USING DEFAULT" already folded into default_used by
set_parameters() for this execution.
Fix: save that bit before reprepare() and OR it back in afterwards.

Assisted-by: Claude:claude-opus-5-5
Oleksandr Byelkin
Merge branch 'bb-10.11-release' into bb-11.4-release
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
Oleksandr Byelkin
Merge branch '10.11' into 11.4
Oleksandr Byelkin
Merge branch 'bb-11.8-release' into bb-12.3-release
Oleksandr Byelkin
MDEV-41258 Crash in Item_func_nextval on prepared re-execution

Sequence prelocking entries were matched across re-executions by
db.str/table_name.str pointer identity, aliasing memory on the TABLE's
own mem_root. Once the owning table was closed and reopened, those
pointers went stale, leaving a dangling duplicate entry that still got
opened and crashed.
Fix: match entries by owning TABLE_LIST and position, deep-copied onto
the statement's own arena.

The relink was gated by has_prelocking_list, which stays true forever
once a trigger is involved, so it silently stopped running after the
first execution for such statements.
Fix: moved it into its own function, called unconditionally per table,
keeping the original gating, scoped to DML statements only.

A stale entry's linked_table pointer could survive its owner's open
being skipped, or a mid-statement open_tables() backoff
(close_tables_for_reopen()), leaving open_table()'s backlink write to
land on freed memory.
Fix: clear it in TABLE_LIST::reinit_before_use() and in
close_tables_for_reopen().

set_parameters() overwrote lex->default_used from each execution's own
bound parameters only, losing a literal DEFAULT written in the
statement text itself.
Fix: also record default_used at prepare time and OR it in.

A mid-execute_loop() reprepare() swaps in a freshly re-parsed lex,
losing "EXECUTE ... USING DEFAULT" already folded into default_used by
set_parameters() for this execution.
Fix: save that bit before reprepare() and OR it back in afterwards.

Assisted-By: Claude Opus 5.5 <[email protected]>
Oleksandr Byelkin
Merge branch 'bb-10.11-release' into bb-11.4-release
Pekka Lampio
MDEV-38999 followup: close two more stale-read gaps, strengthen tests

Review of the original fix surfaced two further ways a transaction
could skip a causal wait it still needed, plus gaps in the test
coverage for the fix overall.

1. wsrep_has_changes(thd) - used to detect "this transaction already
  holds locks, so stop re-waiting" - only reflects writes (appended
  certification keys / binlog cache content). A locking read (SELECT
  ... FOR UPDATE / LOCK IN SHARE MODE) takes InnoDB row locks without
  appending any certification key, so it stayed invisible to this
  check: a transaction that opened with such a read, then later ran a
  statement whose wsrep_sync_wait bit was configured, would still
  attempt a fresh causal wait - the same self-deadlock risk the
  original fix exists to avoid, reached via a path it didn't cover.
  Fixed with a new THD member, wsrep_trx_locking_read_done, set by
  wsrep_sync_wait() whenever the statement just waited for was a
  locking SELECT, checked alongside wsrep_has_changes(thd) in
  wsrep_must_sync_wait(), and reset at the same points the transaction
  boundary already resets equivalent per-transaction state (trans_begin,
  trans_commit[_implicit], trans_rollback[_implicit]).

2. wsrep::client_state::sync_wait_gtid_ caches "already performed a
  causal wait for this top-level command" for the lifetime of one
  dispatch_command() cycle. Inside a stored procedure CALL, that cycle
  spans every statement in the procedure body - sp_instr_stmt::execute()
  runs each one via mysql_execute_command() directly, with none of the
  wsrep before/after-command handling that would otherwise reset the
  cache between statements. A later read inside the same CALL could
  therefore see the stale cache from an earlier read in the same CALL
  and skip its own wait - the original bug's symptom, via a different
  gate. Fixed by ignoring the cache for a stored procedure's own
  top-level statements, identified by thd->spcont set and
  thd->in_sub_stmt clear. This is deliberately NOT extended to trigger
  or function bodies (thd->in_sub_stmt == SUB_STMT_TRIGGER/
  SUB_STMT_FUNCTION): those execute nested inside another statement
  that may already hold locks of its own, so forcing a wait there
  reintroduces the self-deadlock risk the first fix avoids - caught by
  galera_var_replicate_aria_on.test, whose BEFORE INSERT trigger began
  timing out under an earlier, broader version of this change that
  bypassed the cache for any thd->spcont.

Test changes:

- galera_MDEV-38999_locks.test now takes its lock with SELECT ... FOR
  UPDATE instead of an UPDATE, so it actually exercises the
  wsrep_trx_locking_read_done gap above rather than a case
  wsrep_has_changes(thd) already covered. Its final convergence check
  no longer assumes the closing COMMIT succeeds - it genuinely
  conflicts with node_1's write to the same row and may be BF-aborted
  - and instead waits for node_2 to match whatever row count node_1
  ends up with.
- galera_MDEV-38999_autocommit.test's closing ROLLBACK assertion is no
  longer tolerant of ER_LOCK_WAIT_TIMEOUT; after the after_command_
  after_result() fix it must always succeed cleanly.
- galera_MDEV-38999_sp.test (new) exercises the stored-procedure
  staleness fix directly: a CALL whose second SELECT must still time
  out despite an earlier, successful SELECT in the same CALL.
- galera_MDEV-38999_qcache.test (new) covers sql_cache.cc's own,
  independent wsrep_must_sync_wait()/wsrep_sync_wait() call site: a
  cached read hit before this transaction's first write must still
  wait, same as an uncached one.
- The repeated applier-pause/resume/debug_sync boilerplate shared by
  these tests is factored into galera_mdev38999_{init,cleanup,
  pause_applier,wait_applier_paused,resume_applier}.inc.

Assisted-by Claude AI
Sergei Golubchik
MDEV-40847 Server crash on EXPLAIN EXTENDED or CREATE VIEW of a deeply nested JSON_TABLE

* check the stack in Json_table_nested_path::print(), it recurses
  once per NESTED PATH level
* don't save a view definition if printing it failed
* don't push the EXPLAIN EXTENDED note if printing it failed

Assisted-by: Claude:claude-opus-5-5
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
Sergei Golubchik
MDEV-42070 handlersocket crashes after open_index with huge number of return fields

alloca() sizes in do_exec_on_index() and cmd_find_internal() depend
on client-controlled counts (return fields, filters) bounded only by
the request line length.

* make DENA_ALLOCA_ALLOCATE always use malloc
* free key_buf/filter_buf on the early "filterblob" return

Also, a huge statement id in open_index or IN list length in exec
resized a vector to 4G elements, aborting on std::bad_alloc.
Limit both to 1024.

Assisted-by: Claude:claude-opus-5-5
Oleksandr Byelkin
Merge branch 'bb-12.3-release' into bb-13.1-release
Sergei Golubchik
MDEV-41432 CONVERT TABLE ... TO PARTITION does not check privileges on the table it moves in

The table being moved in got grant.privilege copied from the
partitioned table, so check_grant() verified ALTER, DROP on it against
the wrong database. Run check_access() on its own database instead.

Assisted-by: Claude:claude-opus-5-5
Oleksandr Byelkin
Merge branch 'bb-11.4-release' into bb-11.8-release
Oleksandr Byelkin
Merge branch 'bb-11.4-release' into bb-11.8-release
Marko Mäkelä
MDEV-42009: Set GLOBAL innodb_log_file_size=ON is not crash safe

log_t::header_rewrite(): Before setting log_sys.archive=true,
ensure that any garbage entries at the end of the file will be
zeroed out so that they cannot be mistaken for newer records.
On Linux and Microsoft Windows we will attempt a shortcut for
writing zeroes, before falling back to log_file_t::write().
Sergei Petrunia
Followup: fix versioning.delete_history in MDEV-39226: Push whole multi-table ...
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/
Sergei Golubchik
MDEV-41491 parsec ASAN crash on manually modified mysql.global_priv table

the server didn't invoke auth plugin's preprocess_hash() for empty
passwords, thus it didn't check whether empty passwords were acceptable
and plugin's auth() method reliance on the binary hash being correctly
preprocessed was broken.
Sergei Golubchik
MDEV-41630 ST_IsValid crashes on polygons with many rings
Marko Mäkelä
MDEV-40935: Assertion os_file_set_size() failed during shutdown

os_file_set_size(): Consistently handle EINTR also after server
shutdown has been initiated. This will avoid a crash when an
innodb_log_archive=ON log file needs to be created or extended
during shutdown. This only affects the posix_fallocate(2) or
Linux fallocate(2) code path; if the file is being extended by
regular writes, we will retry in case of EINTR.

On Microsoft Windows, there is no clear documentation what would happen
if the process is being terminated while SetFilePointerEx() or
SetEndOfFile() are in progress.
Oleksandr Byelkin
Merge branch 'bb-11.8-release' into bb-12.3-release
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.
Oleksandr Byelkin
Merge branch 'bb-11.4-release' into bb-11.8-release
Marko Mäkelä
MDEV-41395 fixup: GCC 16 -Wstringop-overflow

fil_system_t::default_encrypt_next(): Dereference the iterator only once
to avoid a confusing and bogus -Wstringop-overflow by GCC 16.2.0.
Daniel Black
MDEV-41870: segfault on bootstrap (SLES 15.7)

SLES 15.7 earlier had a liburing 2.1 version. MariaDB
packages are build with the version bumped 2.9. As ABI
incompatable elements are compiled into MariaDB because
of inlined functions, we need to explictly bump the
dependency to include the 2.9 version of liburing.

This is for both the server, and mariadb-backup if configured.
Oleksandr Byelkin
new CC 3.3
Susil
MDEV-41995 galera.MDEV-40727 result file has latin1 instead of utf8mb4

The four SHOW CREATE TABLE outputs in galera/r/MDEV-40727.result record
DEFAULT CHARSET=latin1 COLLATE=latin1_swedish_ci. That is the server
default on 10.11 and 11.4, but not on 11.8, where the tables that the
test creates get utf8mb4 / utf8mb4_uca1400_ai_ci. The test therefore
fails on 11.8.

The merge of 11.4 into 11.8 (62b26c2f7cb8) brought in the 10.11/11.4
version of the result file. Use the utf8mb4 version, which 12.3 and
later already have.

Co-Authored-By: Claude Sonnet 5.5 <[email protected]>