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
Sergei Golubchik
find pcre2.h in a non-default location

for macos builder
Jan Lindström
MDEV-39483 : Hang on mariabackup SST

This regression was caused by commit 794b1d0ec5c
Binlog-in-engine: New binlog implementation integrated in InnoDB.
Mariabackup request BACKUP STAGE BLOCK_COMMIT MDL-lock
using m_bs_con connection. Because we have wsrep,
write_galera_info is called using mysql_connection.
Note that m_bs_con and mysql_connection are different
connections. In write_galera_info write_current_binlog_file
is called and FLUSH BINLOG LOGS is executed. In reload_acl_and_cache
MDL_BACKUP_START MDL-lock is requested. Because we already
have conflicting MDL-lock for BLOCK_COMMIT in different THD
it has to wait. This wait ends on timeout and backup fails
causing mariabackup SST to fail and node will not join the cluster.

Fixed by using same connection for write_galera_info as for
BACKUP STAGE BLOCK_COMMIT i.e. m_bs_con.
rusher
[misc] Use SSL port for MaxScale TLS connections in tests
rusher
[misc] Use ssl_port for MaxScale connections in unittest TLS setup
Oleksandr Byelkin
Merge branch 'bb-10.11-release' into bb-11.4-release
rusher
Add MaxScale container logs output on test failure
rusher
[misc] Remove SKIP_MAXSCALE from test_conn_str and adjust connection string for MaxScale environment
Oleksandr Byelkin
Merge branch 'bb-10.11-release' into bb-11.4-release
Jan Lindström
MDEV-39429 : Galera test failures on 12.3
kolzeeq
[misc] Use SSL port for MaxScale TLS connections in tests
Mert Baran
MDEV-23987 Make udf_example.c portable and warning-free

Replace the bzero/strmov macro shim with direct memset()/strcpy()
calls and simplify the include block: always include <my_global.h>,
<my_pthread.h>, the standard C headers actually used, and <mysql.h>.
This removes the "bzero" redefinition warning triggered by the
previous STANDARD-vs-non-STANDARD ifdef split.

Fix the result-length computation in lookup() and reverse_lookup():
strcpy() returns the destination pointer, so the original
"strcpy(result, ...) - result" expression always evaluated to 0,
making both functions return empty strings.

Raise initid->max_length to 15 in lookup() and to 255 in
reverse_lookup(), and switch the dotted-quad path to snprintf. In
reverse_lookup()'s hostname copy, clamp the copy length to
initid->max_length - 1 so the NUL terminator fits.

Document avgcost, avg2, is_const and check_const_len in the header
comment block and add their CREATE/DROP FUNCTION examples.
rusher
[misc] Add MaxScale detection via @@maxscale_version variable +  maxscale-tag parameter to CI workflow.
Monty
MDEV-37070  Implement table options to enable/disable features

Added ADAPTIVE_HASH_INDEX=DEFAULT|YES|NO table and index option to InnoDB.
The table and index options only have an effect if InnoDB adaptive hash
index feature is enabled.

- Having the ADAPTIVE_HASH_INDEX TABLE option set to NO will disable
  adaptive hash index for all indexes in the table that do not have
  the index option adaptive_hash_index=yes.
- Having the ADAPTIVE_HASH_INDEX TABLE option set to YES will enable the
  adaptive hash index for all indexes in the table that do not have
  the index option adaptive_hash_index=no.
- Using adaptive_hash_index=default deletes the old setting.
- One can also use OFF/ON as the options. This is to make it work similar
  as other existing options.
- innodb.adaptive_hash_index has been changed from a bool to an enum with
  values OFF, ON and IF_SPECIFIED. If IF_SPECIFIED is used, adaptive
  hash index is only used for tables and indexes that specify
  adaptive_hash_index=on.
- The following new options can be used to further optimize adaptive hash
  index for an index (default is unset/auto for all of them):
  - complete_fields:
    - 0 to the number of columns the key is defined on (max 64)
  - bytes_from_incomplete_field:
    - This is only usable for memcmp()-comparable index fields, such as
      VARBINARY or INT. For example, a 3-byte prefix on an INT will
      return an identical hash value for 0‥255, another one for 256‥511,
      and so on.
    - Range is min 0 max 16383.
  - for_equal_hash_point_to_last_record:
    - Default is unset/auto, NO points to the first record, known as
      left_side in the code; YES points to the last record.
      Example: we have an INT column with the values 1,4,10 and bytes=3,
      will that hash value point to the record 1 or the record 10?
      Note: all values will necessarily have the same hash value
      computed on the big-endian byte prefix 0x800000, for all of the
      values 0x80000001, 0x80000004, 0x8000000a. InnoDB inverts the
      sign bit in order to have memcmp()-compatible comparison.

Example:
CREATE TABLE t1 (a int primary key, b varchar(100), c int,
index (b) adaptive_hash_index=no, index (c))
engine=innodb, adaptive_hash_index=yes;

Notable changes in InnoDB
- btr_search.enabled was changed from a bool to a ulong enum to be
  able to handle options OFF, ON and IF_SPECIFIED. ulong is needed
  to compile with MariaDB enum variables.
- To be able to find all instances where btr_search.enabled was used
  I changed all code to use btr_search.get_enabled() when accessing
  the value and used btr_search.is_enabled(index) to test if AHI is
  enabled for the index.
- btr_search.enable() was changed to always take two parameters,
  resize and value of enabled. This was needed as enabled can now
  have values OFF (0), ON (1), and IF_SPECIFIED (2).
- store all AHI-related options in per-index dict_index_t::ahi
  bit-packed 32-bit atomic field dict_index_t::ahi::enabled_fixed_mask
  - static assertions and debug assertions ensure that all options fit
    into the 32-bit field
  - packing details:
    - enabled, adaptive_hash_index (first 2 bits)
    - fields, complete_fields (7 bits)
    - bytes, bytes_from_incomplete_field (14 bits)
    - left, ~for_equal_hash_point_to_last_record (1 bit)
    - have_fields, fields set flag (1 bit)
    - have_bytes, bytes set flag (1 bit)
    - have_left, left set flag (last 1 bit)
    - 5 bits spare after have_left
  - manipulation of the bit-packed field avoids usage of branches or
    conditional instructions to minimize the performance impact of
    the new options
- in btr_search_update_hash_ref() apply the per-index AHI options
  using bit-masking to override internal heuristic values with user
  preferences
- add innodb.index_ahi_option test:
  - test a combination of per-table and per-index AHI options
  - use a stored procedure which checks if AHI is used during a burst of
    index lookups checking delta in adaptive_hash_searches InnoDB
    monitor variable
  - test that the maximum number of fields per (secondary) index is 64
    (32 PK + 32 secondary key columns)
  - test that crash recovery retains table/index metadata
  - test AHI with partitioned tables
  - verify that changing AHI preferences for table/index is instant DDL
  - boundary checks for complete_fields and bytes_from_incomplete_field
- add innodb.index_ahi_option_debug test:
  - test debug builds with index_ahi_option_debug_check debug variable
    enabled to verify that the proper per-index AHI options are applied
    during index lookups
  - test that "illegal" per-index AHI options are non-destructive and
    just lead to automatic parameter clamping and possibly no AHI usage
  - test toggling global AHI status with concurrent AHI access

Visible user changes:
- select @@global.adaptive_hash_index will now return a string instead
  of 0 or 1.

Other notable changes:
- In sql/create_options.cc:
  - In function set_one_value() avoid reading after the end of the
    current string.

Co-authored-by: Monty <[email protected]>
Co-authored-by: Marko Mäkelä <[email protected]>
Co-authored-by: Alessandro Vetere <[email protected]>
Co-authored-by: Thirunarayanan Balathandayuthapani <[email protected]>
Sergei Golubchik
MDEV-39512 SIGSEGV in ha_sphinx::create on TRUNCATE regression

dd_recreate_table() had NULL create_info->option_struct.
Let's get it from the table share.
Thirunarayanan Balathandayuthapani
MDEV-34358  Encryption threads consume CPU when no work available

Problem:
--------
1. Encryption threads busy-wait when no work is available. When reaching
fil_system.space_list.end(), fil_crypt_return_iops() is called with
wake=true, causing pthread_cond_broadcast() to wake all threads
unnecessarily, leading to CPU waste.

2. Tablespaces with CLOSING/STOPPING flags (set during DDL operations)
are skipped during iteration. Since DDL completion doesn't wake
encryption threads, these spaces may never be encrypted if threads
sleep indefinitely.

3. For default_encrypt_list iteration, when spaces exist but none are
acquirable, threads need to wake others for
cooperative retry, but this case was not distinguished from
fil_system.space_list.end().

4. IOPS are allocated before searching for tablespaces, wasting resources
during iteration when no I/O occurs.

Solution:
---------
1. Implement timed wait with exponential backoff (5s -> 10s -> 20s -> 40s
-> 60s, max 5 attempts) for fil_system.space_list iteration. After
~135 seconds, switch to indefinite wait. This periodically rechecks
for spaces that become available after DDL completes.

2. Use indefinite wait for default_encrypt_list iteration since other
threads will retry and wake when needed.

3. fil_space_t::next(): Add default_encrypt_list flag to distinguish between
the two iteration modes. Wake other threads only
when this flag is true (spaces exist but unacquirable).

4. Move IOPS allocation from before tablespace search to after finding a
space that needs rotation.

5. Handle wake logic explicitly at call site based on default_encrypt_list flag.

rotate_thread_t changes
------------------------
- default_encrypt_list (bool): Indicates if default_encrypt_list has unacquirable spaces
- timed_wait_count (uint8_t): Counts consecutive timeouts for exponential backoff
- sleep_timeout_ms (uint16_t): Current timeout in ms (5s -> 60s max)
- wait_for_work(): Implements timed/indefinite wait based on iteration mode
- increase_sleep_timeout(): Doubles timeout up to 60s
- reset_sleep_timeout(): Resets timeout to 5s and clears count
rusher
[misc] Add TEST_MAXSCALE_TLS_PORT fallback for ssl_port environment variable
rusher
[misc] Check use_ssl option when determining MaxScale SSL port
rusher
[misc] update CI
ayush-jha123
MDEV-38010: Master & relay log info files ignore trailing garbage in numeric lines

This patch fixes an issue where Int_IO_CACHE::from_chars stops parsing at the
first invalid character but fails to consume the remainder of the line. This
caused trailing garbage on a numeric field (like Master_Port) to be interpreted
as the value for the subsequent field.

The fix introduces a strict validation helper is_string_blank_or_empty which
ensures that only whitespace or control characters follow the parsed numeric
value. The init_*_from_file functions now zero-initialize variables, perform
error checking immediately after string conversion, and safely reject files with
trailing garbage.

The test master_info_numeric_validation has been updated to use --move_file
for robust backup and restoration of the master.info file.
Georgi (Joro) Kodinov
MDEV-39456: Describe the external contributions process in more details

Added a new .md document describing the community contribution process.
Added a reference to it from the CONTRIBUTING.md.
rusher
[CI] Add matrix entry that builds against latest C/C 3.3 branch

The CI normally builds against the libmariadb submodule pinned in the
parent tree. Add an additional matrix entry (Ubuntu, MariaDB 11.4) that
overrides the submodule to the tip of the C/C 3.3 branch before cmake,
so we get early signal on upstream changes (e.g. CONC-812) instead of
discovering them only when the submodule pointer is bumped.

The override is keyed off matrix.libmariadb-branch and is a no-op for
all existing matrix entries (no behavior change for default builds).
rusher
[misc] Fix operator precedence in IS_MAXSCALE_ENV macro
Thirunarayanan Balathandayuthapani
MDEV-34358: Add debug status variables to verify encryption thread wait behavior

Added debug-only status variables Innodb_encryption_timed_waits
and Innodb_encryption_indefinite_waits to track encryption thread
wait types, enabling verification that threads use timed wait with
exponential backoff instead of busy-waiting when idle.

The counters are incremented in rotate_thread_t::wait_for_work()
and exposed via SHOW STATUS in debug builds only. Also added a
debug sync point 'rotate_only_2_timed_waits' to reduce the timed
wait threshold from 5 to 2 for faster testing of the indefinite
wait transition.
Sergei Golubchik
MDEV-32745 followup for 7828fb475b0

* add a test for new --cat_file feature
* fix off-by-one error in --cat_file lines limit
* fix broken INCLUDE_DIRECTORIES in extra/
* fix typos
* remove mtr-specific workaround from the tool, solve it in the test
* remove dead code
* fixed memory leak in mariadb-migration-config-file [client-server] section
* fixed memory leak in mariadbd --character_set_server=xxx
  (execution time for main.mariadb-migrate-config-file went down
  from 150s to 2s)
* moved tool header to the tool dir
* avoid tripple-initialization of plugins
* disable tool builds in ASAN builds (because of RocksDB)
rusher
[misc] Add matrix entry that builds against latest C/C 3.3 branch
Thirunarayanan Balathandayuthapani
MDEV-34358  Detect config changes during encryption iteration

Problem:
=======
When innodb_encrypt_tables or innodb_encryption_rotate_key_age is
changed during encryption thread iteration, threads continue with
stale configuration values, potentially missing tablespaces that
should be encrypted or rotated under the new settings.

Solution:
========
Added atomic version counter fil_crypt_settings_version that is
incremented whenever innodb_encrypt_tables or
innodb_encryption_rotate_key_age changes. Encryption threads capture
the version at iteration start and check for changes during iteration.
If config changed, threads immediately restart iteration from the
beginning to ensure complete coverage with new settings.

fil_crypt_settings_version: Atomic counter to track the
innodb_encrypt_tables or innodb_encryption_rotate_key_age changes

rotate_thread_t::settings_version: To compare the
existing fil_crypt_settings_version to restart the
encryption from the beginning
sjaakola
MDEV-34784 unhandled FK dependency with DML vs DDL

Certain DDL statements (e.g. ALTER TABLE) require innodb table lock
on tables having foreign key constraint reference to the table
under DDL execution. This dependency is not added in write set
key information. However, tables being referenced to will be added
in the key information, so the table locking domain of DDL is only
partially recorded.

One harmful consequence of this missing dependency information happens
when a DML modifies a FK child table's row, which has NULL in the FK
referencing column. In such situation, the FK reference cannot be followed
during DDL execution, and there will be no FK parent table keys recorded
in the write set. Parallel applying (or multi-master access) of such DML
and DDL on the FK parent table will cause applying conflicts.

This  scenario is presented in a new mtr test added in this commit.
The commit has a fix for the DDL FK dependency handling by adding all FK
child table names in the write set key information.
The commit has also fixes for innodb lock0lock.cc error logging to report
lock connflicts of table and record locks correctly.
sjaakola
MDEV-34784 unhandled FK dependency with DML vs DDL

Certain DDL statements (e.g. ALTER TABLE) require innodb table lock
on tables having foreign key constraint reference to the table
under DDL execution. This dependency is not added in write set
key information. However, tables being referenced to will be added
in the key information, so the table locking domain of DDL is only
partially recorded.

One harmful consequence of this missing dependency information happens
when a DML modifies a FK child table's row, which has NULL in the FK
referencing column. In such situation, the FK reference cannot be followed
during DDL execution, and there will be no FK parent table keys recorded
in the write set. Parallel applying (or multi-master access) of such DML
and DDL on the FK parent table will cause applying conflicts.

This  scenario is presented in a new mtr test added in this commit.
The commit has a fix for the DDL FK dependency handling by adding all FK
child table names in the write set key information.
The commit has also fixes for innodb lock0lock.cc error logging to report
lock connflicts of table and record locks correctly.
Sergei Golubchik
find pcre2.h in a non-default location

for macos builder
rusher
[misc] add maxscale testing to CI
rusher
[misc] add maxscale testing to CI
rusher
[misc] add maxscale testing to CI
  • codbc-jammy-amd64: build linux-connector_odbc failed -  stdio
  • codbc-jammy-amd64-deb: test install failed -  stdiokernelwarnings (7)
  • codbc-linux-amd64-asan: build linux-connector_odbc failed -  stdio
  • codbc-linux-amd64-msan: build linux-connector_odbc failed -  stdio
  • codbc-linux-amd64-ubsan: build linux-connector_odbc failed -  stdio
  • codbc-sles12-amd64: build linux-connector_odbc failed -  stdiowarnings (6)
rusher
[misc] Skip tests when running in MaxScale environment
Sergei Golubchik
find pcre2.h in a non-default location

for macos builder
Sergei Golubchik
MDEV-32745 followup for 7828fb475b0

* add a test for new --cat_file feature
* fix off-by-one error in --cat_file lines limit
* fix broken INCLUDE_DIRECTORIES in extra/
* fix typos
* remove mtr-specific workaround from the tool, solve it in the test
* remove dead code
* fixed memory leak in mariadb-migration-config-file [client-server] section
* fixed memory leak in mariadbd --character_set_server=xxx
  (execution time for main.mariadb-migrate-config-file went down
  from 150s to 2s)
* moved tool header to the tool dir
* avoid tripple-initialization of plugins
* disable tool builds in ASAN builds (because of RocksDB)
* compilation failure on x86 (signedness)
Sergei Golubchik
cleanup: sphinx tests

run sphinx tests even if no sphinx is installed
require installed sphinx per-test, not for the whole suite,
in case there are tests that can run without it