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
Jan Lindström
Merge remote-tracking branch 'upstream/4.x' into galera-26.4.28
Fariha Shaikh
MDEV-39153 Fix sporadic main.change_master_default mismatch

The test used "restart_abort:" in the expect file, which MTR never
recognized. It fell through to the else branch, deleted restart_opts,
and started the server with defaults (heartbeat_period=60 instead of 0).

Replace restart_abort with direct --exec $MYSQLD calls.

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.
Aleksey Midenkov
WITHOUT_ABI_CHECK followup

Followup for b337e14440b as info_src takes time too.
info_src does not make much sense without ABI check.
forkfun
Merge branch '11.4' into '11.8'
Alexander Barkov
MDEV-40009 SIGSEGV in Sql_path::from_text

Problem:
- The string passed to Sql_path::from_text() could be in
  various character sets, returned by Item::val_str_ascii(),
  which is not necessarily utf8mb3.
- While the code in Sql_path::from_text() was written in the way
  that "str" was considered to be in utf8mb3.
- As as result, cs->charset() in this line:
    auto len = cs->charlen(curr, end);
  could return a negative value and the whole loop got stuck.

Changes:
- Fixing Sys_var_path::from_item() to use val_str() instead of val_str_ascii(),
  to get the original value from "item", without any conversion.
- Moving the conversion code inside Sql_path::from_text().
Teemu Ollakka
MDEV-36926 Support building against Asio 1.14.1 through 1.38.0

Make the provider build across all current Asio releases and against
any Asio in the supported range, not just the bundled copy.

CMake (cmake/asio.cmake):
* Add GALERA_CUSTOM_ASIO_PATH to build against an out-of-tree Asio.
* Lower the minimum version to 1.14.1 to match the bundled copy and
  drop the upper bound, so newer Asio is compiled rather than rejected
  at configure time.

Source: Asio 1.33.0 enables ASIO_NO_DEPRECATED by default and removes
a batch of long-deprecated APIs. Fix the breakages, guarded by
ASIO_VERSION < 103300 to stay compatible with older versions:
* io_context replaces the removed io_service typedef (via a native_type
in AsioIoService::Impl); post()/reset() -> asio::post()/restart().
* basic_waitable_timer::expires_from_now() -> expires_after().
* asio::ip::address::from_string() -> asio::ip::make_address(); include
  asio/version.hpp so the guard is evaluated correctly.
* The removed resolver::query/resolver::iterator give way to the
  resolve(host, service[, flags]) overload; the resolve helpers now
  return the first resolved endpoint directly, simplifying callers.

Replace the remaining boost::bind uses with lambdas: Boost 1.74.0 no
longer injects boost::bind's placeholders into the global namespace,
so the unqualified usage failed to compile (seen with Asio 1.30.2).

Add scripts/test_asio_versions.sh: builds and runs the unit tests
against the bundled copy and the latest patch of every released Asio
major.minor from 1.14 to 1.38. The whole range passes.
Yuchen Pei
MDEV-40168 wip

works:

SET SESSION debug = '+d,test_invisible_index,test_completely_invisible';
create table t1 (c int, j json, key idx ((CAST(j->'$.tags' AS CHAR(6) ARRAY))))engine=innodb;
SHOW CREATE TABLE t1;
Table Create Table
t1 CREATE TABLE `t1` (
  `c` int(11) DEFAULT NULL,
  `j` longtext CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT NULL CHECK (json_valid(`j`))
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_uca1400_ai_ci
show index from t1;
Table Non_unique Key_name Seq_in_index Column_name Collation Cardinality Sub_part Packed Null Index_type Comment Index_comment Ignored
t1 1 invisible1 1 invisible1 A 0 NULL NULL YES BTREE NO
t1 1 idx 1 DB_MVI_1 NULL NULL NULL NULL YES FULLTEXT NO
set @old_innodb_ft_aux_table=@@global.innodb_ft_aux_table;
set global innodb_ft_aux_table='test/t1';
insert into t1 values (1, '{"tags": ["1", "abcde", "34567"]}');
SELECT * FROM INFORMATION_SCHEMA.INNODB_FT_INDEX_CACHE;
WORD FIRST_DOC_ID LAST_DOC_ID DOC_COUNT DOC_ID POSITION
34567 1 1 1 1 2
abcde 1 1 1 1 1
DROP TABLE t1;
set global innodb_ft_aux_table=@old_innodb_ft_aux_table;
Aleksey Midenkov
MDEV-39063 Server crashes at Item_func_lastval and Item_func_setval with CTE alias

Pure aliases are not handled properly by Item_func_lastval::val_int()
and Item_func_setval::val_int().

This is followup fix for MDEV-33985 where it missed similar cases for
LASTVAL() and SETVAL().

add_table_to_list() does not create MDL request for pure aliases,
i.e. when there is no table_list->db set or TL_OPTION_ALIAS was
set. When the expression is not inside CTE the case with empty db is
handled by:

  else if (!lex->with_cte_resolution && lex->copy_db_to(&db))
    DBUG_RETURN(0);

So, table_list gets current database name and the query is failed with
ER_NO_SUCH_TABLE error.

The fix adds the case of is_pure_alias() check for val_int() methods
and fails it with ER_NOT_SEQUENCE2 error.

Note: semantics for TL_OPTION_ALIAS cannot be based on empty db, only
parser can set TL_OPTION_ALIAS as resolve_references_to_cte() relies
on TL_OPTION_ALIAS after copy_db_to().
Otto Kekäläinen
Make Galera compatible with OpenSSL 4.0

OpenSSL 4.0 made several X509 getters const-correct, now return const
pointers. However, the corresponding mutating functions still require
non-const arguments.

Add const_cast where needed to satisfy the type system on OpenSSL 4.0
while remaining compatible with OpenSSL 1.x and 3.x, where the getters
return mutable pointers.

Grepping for OpenSSL API calls, no other files in the repository seem to
use these APIs, so the change is complete and fully backwards-compatible.

Related: https://jira.mariadb.org/browse/MDEV-40655
Alexander Barkov
MDEV-40790 SELECT INTO row_type_of.field crashes the server

The server crashed on DBUG_ASSERT on a SELECT into:
- a `ROW TYPE OF table1` field variable
- a `ROW TYPE OF cursor1` field variable

Fix:

- Adding a class my_var_sp_row_field_by_name
- Adding a method sp_rcontext::set_variable_row_field_by_name()
- Fixing the DBUG_ASSERT
ParadoxV5
Test for MDEV-39788

MDEV-39788 found that the recent refactor on the `main` (now 12.3)
branch missed the (inconsistent) detail that, unlike `relay-log.info`,
`master.info`’s line count _includes_ the line-count line itself.

This commit extends and simplifies the test
`rpl.rpl_read_new_relay_log_info` to `main.rpl_new_info` so it
* Checks this detail to remind future changes of this type of mistake.
* Covers `@@master_info` as well.
* Covers the refactor’s buggy format as a downgrade/revert test.

While here, this commit also includes a new-format version
of MDEV-38020’s test to double as the value read check.

Reviewed-by: Brandon Nesterenko <[email protected]>
Teemu Ollakka
Fix fragile branch name parsing
Daniel Black
MDEV-39803 RPM dependencies missing from MariaDB-server-galera package

RPM dependencies where not included in cpack build due to incorrect
component name.

Corrects a103be381b38

Becase the wsrep_info plugin installs as a plugin, it overrites the
cpack_rpm server-galera PACKAGE_DEPENDS.

As such make the cmake/plugin.cmake only sets the PACKAGE_DEPENDS if
not already set. This allows plugin to override automatic REQUIRES,
fine-tuning their own dependencies
Alexander Barkov
MDEV-40639 Open SYS_REFCURSOR crash, if many cursors inside a function

Problem:

If:
- A routine A() opened a SYS_REFCURSOR with a function B() in the SELECT list
- The function B() also opened some SYS_REFCURSORs

Then reallocation of the cursor array THD::m_statement_cursors could happen
during the execution of B(), so all sp_cursor_array_element pointers inside
sp_instr_copen_by_ref::exec_core() of routine A() became invalid.

Fix:

Chaging the data type of sp_cursor_array:
- from Dynamic_array<sp_cursor_array_element>
- to Dynamic_array<sp_cursor_array_element*>

So now only reallocations of the array of cursor pointers happen,
while sp_cursor_array_element instances always stay on their originally
allocated memory positions.

Note:
sp_cursor_array_element instances are allocated using the standart C++ "new"
and deleted using the standard C++ "delete". Using a MEM_ROOT does not
seem to be relevant here.
ParadoxV5
MDEV-39788: Remove added line in `master.info` format

The line-count lines in `master.info` and `relay-log.info`
have been inconsistent (off by one) since their introduction.
MDEV-37530 “fixed” this with its common code merger by chance,
changing `master.info` to use `relay-log.info`’s line-count definition.
This change, howëver, affected backward compatibility,
as `master.info` now expects an ignored MySQL-only line
where the first `key=value` option, `master_use_gtid`, is.

Since this legacy text-based format has limitations that make
it due for replacement, only code reüsablility is valuable,
and its consistency does not outweigh its compatibility.
Therefore, this commit solves this problem without reverting code by:
* Changing the writing code to be compatible with both interpretations
  (albeit inconsistent with the reading code)
* Adding a shim entry to `master.info`’s list
  to emulate prior versions’ reading behaviour
  * Although this solution can only restore upgrade compatibility with
    versions 10.0+, versions before MariaDB 10 have long been EOL.

While here, this commit also fixes code and
comments that contradict the actual effect.

[P.S.] The test for this regression is pushed to 10.11 in PR #5147.

Reviewed-by: Brandon Nesterenko <[email protected]>
Rex Johnston
PQ: tidyup, answer some questions
Teemu Ollakka
MDEV-36926 Print the selected Asio version at configure time

Add REPORT_ASIO_VERSION() to cmake/asio.cmake, which locates the
asio/version.hpp of the Asio actually picked (custom path, system, or
bundled), decodes ASIO_VERSION and prints "Using Asio version
<major>.<minor>.<patch>" so the configure output shows which Asio the
build resolved to.
Teemu Ollakka
MDEV-36926 Always use asio::io_context in AsioIoService::Impl

asio::io_context exists in all supported Asio versions (1.14.1+), so
drop the ASIO_VERSION < 103300 guards that fell back to the deprecated
asio::io_service typedef for the include and native_type.
Daniel Bartholomew
bump the VERSION
Fariha Shaikh
MDEV-39459 Fix bad sync pattern for chain replication MTR tests

In chain replication (1->2->3), syncing only server_3 after
save_master_gtid on server_1 does not guarantee server_2 has committed,
because server_2's binlog dump thread can send events to server_3 before
commit_ordered() completes on server_2.

Fix affected rpl tests by syncing server_2 before server_3, and update
result files accordingly.

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.
Oleksandr Byelkin
MDEV-40173 RPM conflicts on /usr/lib64/security

The move of the install location of pam files in MDEV-37197
(34aac090f2acc1a4b5850810fe41370c19659d55) resulted in different
install locations on different RPM distros.

Correct the RPM packaging to ignore the path of the pam files
(but not the pam files themselves).
Rex Johnston
MDEV-39492 PQ: abort_worker() could awake a THD the worker had destroyed

Separating pwt_worker_base out of pwt_worker dropped the assignment that
nulls the worker's thd on its way out. The exit path used to capture the
pointer and clear the member while holding LOCK_worker, then tear the THD
down from the local copy; after the split it kept a local for the detach but
left the member pointing at the THD it went on to destroy.

The hole survived because nothing reached abort_worker(). Its only caller is
the cleanup_old_workers path, which needs init_parallel_workers() to fail
after at least one worker thread is already running, and no test could
produce that. Add a DBUG injection that fails the last worker as if its
thread could not be created: the last one so that the maximum number are
running when the teardown aborts them, and before create_thread() rather
than after, because cleanup_thread_create closes that worker's tables and
destroys its THD, which is only safe while it has no thread of its own.

This commit was prepared with Claude Code: it found the dropped assignment
while evaluating the TODO tags added by the three preceding commits, traced
which readers depended on it, wrote the injection point and the test, and
confirmed by reverting the fix that the test reproduces the crash.
Daniel Black
Remove no_valgrind_without_big.inc from *C* include dir

The identical file is in mysql-test/include where it is used.
Hemant Dangi
MDEV-37015: Add parameterized tests for binlog-open error handling

Issue: several binlog-open error paths crash the server or silently
report success instead of failing. RESET MASTER and SET GLOBAL
binlog_checksum can each crash on certain reopen failures, and RESET
MASTER can report success without ever having reopened the binlog.

Solution: add parameterized fault-injection tests across the open paths
and trigger contexts to reproduce these and other inconsistencies, with
strict assertions, and write up the findings in a gap report.
Rex Johnston
PQ WIP, make the engine declining to execute in parallel are rare thing

... by extending our checks to catch
locking read, ROW_FORMAT=REDUNDANT, a descending clustered key,
and a discarded tablespace during optimize/make_join_info.
Add optimizer trace bits and peices.
Daniel Black
MDEV-39813 ST_GeomFromGeoJSON does not control recursion depth

Using stack_p wasn't a portable concept in 12.3 when JSON
parsing got unlimited depth. To let ST_GeomFromGeoJSON was
already a recursive function, needed because object order of "type"
may be after the "geometries", but with json_engine_t no longer
enforcing the depth, some stack checking was required.

Use the check_stack_depth function to allow excessively deep
GeoJSON objects to error.

As this is cleaned up the gis-json test can be enabled.

The exceeding stack depth is moved to lotofstack.test.
Jan Lindström
Bump version to 26.4.28
Aleksey Midenkov
MDEV-38854 Assertion table->vers_write fails upon ODKU into table with versioned column

In MDEV-25644 vers_check_update() sets vers_write to false in case it
returns false. It is ok for UPDATE but is not correct for ODKU is bulk
insert requires vers_write on next tuple.

The fix return vers_write value back when vers_check_update() and
related vers_insert_history_row() are done in ODKU.
Alexey (Holyfoot) Botchkov
MDEV-39654 No warning after CAST( AS xmltype).

Warning added.
drrtuy
chore: renaming, extra docs and bump DuckDB to gamma.
Georgi (Joro) Kodinov
MDEV-40661: mysql_upgrade.test not stable on a busy server

The cleanup of the old connection goes on in the background.
It can take longer on a busy server and this triggers the active sessions
warning in DROP user.
Stablizied the test by disabling the warnings.
forkfun
Merge branch '11.8' into '12.3'
Alexey (Holyfoot) Botchkov
MDEV-39683 Numeric aggregates should end up with an error for xmltype.

Appropriate xxx_fix_length_and_dec() added to the Type_handler_xmltype.
Prathamesh Hukkeri
MDEV-40122: `+DEFAULT` is not a valid value for master_heartbeat_period

MDEV-28302 changed the grammar for master_heartbeat_period to accept
DEFAULT (via num_or_default), while MDEV-38454 added an opt_plus to
allow numeric values with an explicit `+` sign.  The combination made
the rule `opt_plus num_or_default`, which also accepted `+DEFAULT`,
equivalent to `= DEFAULT`.

Move the opt_plus under num_or_default's definition, so that `+` may
only precede a numeric literal, and DEFAULT is a separate alternative.
Now `master_heartbeat_period= +DEFAULT` is a syntax error again, while
`= +45` and `= DEFAULT` are both accepted.
Sergei Petrunia
MDEV-40738: main.cte_update_delete missing DROP VIEW v1, refers to wrong MDEVs.

Fix the testcase.
Jan Lindström
Bump Galera version to 26.4.28
Alexey Yurchenko
MDEV-38920 ensure EVS install timeout stays between suspect and inactive

The view-install timeout must satisfy
  suspect_timeout < install_timeout < inactive_timeout
with at least one keepalive (retrans) period between neighbours. In particular
install_timeout below suspect_timeout causes a view install to be abandoned
before a silent node can even be suspected, which can drive an otherwise
healthy majority to non-primary.

The ordering cannot be enforced strictly - old configurations must still
start - so:
(a) if install_timeout is outside [suspect+retrans, inactive-retrans],
    set it to (suspect_timeout + inactive_timeout)/2;
(b) log a warning if that overrides an explicitly configured install_timeout;
(c) log a warning if (inactive_timeout - suspect_timeout) < 2*retrans_period,
    i.e. the window is too narrow.

Implemented in gcomm::evs::Proto::sanitize_install_timeout(). It is invoked
from the Proto constructor (config load) and from set_param() whenever
suspect/inactive/keepalive/install timeouts change at runtime, so a runtime
reconfiguration cannot re-introduce install_timeout < suspect_timeout.
The helper does not touch timers (state is S_CLOSED during construction).
callers reset T_INSTALL when it adjusts the value.
ParadoxV5
[WIP] MDEV-39583 Replace the slave-side graceful self-KILL with the master-side COM_QUIT handing in Semi-Synchronous Replication

Client-side connections, including those of replication slaves,
send a `COM_QUIT` signal to the server when they close.
Masters’ Binlog Dump Thread ignore this, but before MDEV-32385,
Semi-Sync Ack Receivers did not expect this and errored.

A Semi-Sync slave’s workaround of this issue is starting
*another* connection just to `KILL` the Binlog Dump Thread.
This solution is only wasteful, inconsistent with Async,
but also led to a whac-a-mole on covering edge cases.

This commit extends MDEV-32385’s `COM_QUIT` handing to stop the Binlog
Dump Thread, and remove the error-prone slave self-`KILL` mechanism.
`@@rpl_semi_sync_slave_kill_conn_timeout` is now deprecated
because this commit deleted the procedure this variable adjusts.

> [!Caution]
> STOP SLAVE no longer immediately aborts the master-side
> Binlog Dump Thread if the thread is waiting for Binlog content.
> *This is a limitation of the base (Async) replication system.*

Since Semi-Sync and Async now both have this limitation, this commit
does not interfere with it as it is unrelated to the self-`KILL` design.
Instead, this commit updates the test
`rpl.rpl_semi_sync_ssl_stop` to work around this problem.
It also generalizes this test for both SSL and non-SSL replication.
forkfun
Merge branch '10.11' into '11.4'
Daniel Black
MDEV-39113 MSAN/ADDR addr2line stack resolver detrimental

MSAN/ASAN test environment, the addr2line was so high in memory
utilization that it was the pick of the OOM killer to resolve the OOM
situation. Once this occurred there wasn't a saved core or gdb backtrace
of the core to resolve the issue.

To resolve this, make stack-trace default to 0 (off) for the addr2line
base implementation under memory sanitizer and address sanitizer.

MariaDB-backup also forces the enabling of stack-trace. Disabling this
unconditionally reduces the risk of a user operational impact if a
lengthy stack trace starting in a mariadb-backup critical locked period.

The mysqld--help test now excludes the stack-trace as its result is
environment dependant. The "Defaults to..." output for suppressed
variables, currently only stack-trace, is excluded.

Since thread-stack is an excluded varable, the ubsan/asan exclusions
from commits dfa6fba9595a and dfa6fba9595a aren't required.