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-11.8-release' into bb-12.3-release
Daniel Bartholomew
bump the VERSION
Hemant Dangi
MDEV-39721: wsrep_notify.cc: reject shell-unsafe characters in joiner-supplied member fields

Issue:
wsrep_notify_status() interpolated members[i].name() (the peer's
wsrep_node_name) and members[i].incoming() verbatim into a command
string that is then executed via 'sh -c' by wsp::process. A peer
joining the cluster with shell metacharacters in its wsrep_node_name
or wsrep_node_incoming_address caused arbitrary commands to run on
every cluster member that had wsrep_notify_cmd configured.
MDEV-39413 introduced safe() for the same threat class in the SST
scripts but did not cover the C++ wsrep_notify path.

Solution:
Validate each substituted field against a narrow whitelist before
interpolating. Node name allows alnum and -_. ; node address
additionally allows :[]/ for host:port and [ipv6] forms. On bad
input the notification is skipped with an error log instead of
forwarding the unsafe value to sh -c.
Vladislav Vaintroub
CI - Fix Github Actions warning, bump actions/checkout version
Oleksandr Byelkin
Merge branch 'bb-12.3-release' into bb-13.0-release
Vladislav Vaintroub
improve MTR bootstrap performance on slow disk

use --debug-no-sync to workaround slow disk flush.
On Github actions Windows ARM64, this alone cuts the test time from
ca 55 min to ca 45 min.
Georgi (Joro) Kodinov
MDEV-39718: Produce Markdown plugin API documentation

Implemented a cmake utility macro to generate markdown documentation
for the plugin API headers.
Fixed some doxygen comment mistakes in these.
Daniel Black
MDEV-33170: ASAN errors upon CONVERT TABLE TO PARTITION with query cache

The ALTER TABLE.. CONVERT TABLE TO invalided the table cache of the
previously normal table that was moved and which left the query cache refering
to a removed table by the time it was invalidated after the ALTER.

Let's invalidate the query cache at the beginning of the fast path for
all variants of the ALTER TABLE (partitioning).

This prevents a use after free ASAN error that was previous there when the
query_cache_invalidate was use on the source table that was freed from the
table cache.

Alternates considered:
* A query cache invalidate early CONVERT_IN and leave the
  fast_end_partition invalidate - still results in ASAN assertion.
* A fast_end_partition with an argument to skip QC clear -
  seemed to treat this special ALTER TABLE too specially.

Review: Sanja Byelkin
Sergei Golubchik
Merge branch '10.11' into 11.4
Sergei Golubchik
strengthen safe() in wsrep_sst_common, just in case
Marko Mäkelä
fixup! 2a7950aa1cfdd4bb212eec4317b7bea4e24c830b

FIXME: Sometimes we have both a hard-linked ib_*.log and ib_logfile101
with identical contents.
PranavKTiwari
MDEV-28610 : Assertion  marked_for_read() failed upon range select with virtual column in index.

Fix read_set propagation for virtual columns during keyread
The keyread initialization path was populating  using , which internally uses the non-recursive index marking path. This only marks direct index fields and does not resolve dependencies of virtual/generated columns.
As a result, when a covering index contained a virtual column, its dependent base columns could be missing from , leading to  assertions during virtual column evaluation.
Replace the call with , which uses the recursive read-marking path and correctly propagates virtual/generated column dependencies into  during keyread setup.
Oleksandr Byelkin
Merge branch '11.8' into 12.3
PranavKTiwari
Added code change.
Alexey Botchkov
Progress on 26.05.26.
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.

5. Encryption threads use fil_crypt_threads_cond for two different purposes:
waiting for encryption work and waiting for IOPS allocation. When
fil_crypt_return_iops() or fil_crypt_realloc_iops() broadcasts after
releasing IOPS, it wakes ALL threads including those correctly waiting
for work, causing spurious wakeups and CPU waste.

6. 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:
=========
1. Implement timed wait with exponential backoff when space ==
fil_system.space_list.end() (applies to both default_encrypt_list and
space_list iteration when no acquirable spaces are found):
- First timeout: 5 seconds
- Subsequent timeouts: (timed_wait_count + 1) * 5 seconds
  (10s, 20s, 40s, 60s)
- After 5 consecutive timeouts (~135 seconds total), continue with
60-second timed waits to ensure threads periodically recheck for
state changes without requiring explicit signals
- Timeout counter resets to 0 when woken by signal (config change,
new tablespace) or when work is found

2. Move IOPS allocation from before tablespace search to after finding a
space that needs rotation. If allocation fails, set recheck=true to
skip waiting and immediately try next space.

3. Introduce separate condition variable fil_crypt_iops_cond specifically
for IOPS allocation synchronization to prevent spurious wakeups:

- fil_crypt_threads_cond: Used in wait_for_work() for waiting when no
tablespaces need encryption. Signaled when settings change, new
tablespaces are created, or thread count changes.

- fil_crypt_iops_cond (NEW): Used in fil_crypt_alloc_iops() for waiting
when IOPS limit is reached. Signaled when IOPS are returned via
fil_crypt_return_iops(), released via fil_crypt_realloc_iops(), or
when srv_n_fil_crypt_iops is increased.

4. 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::timed_wait_count (uint8_t):
Counts consecutive timeouts for exponential backoff

rotate_thread_t::wait_for_work(): Implements timed/indefinite
wait strategy

rotate_thread_t::settings_version: To compare the
existing fil_crypt_settings_version to restart the
encryption from the beginning
Oleksandr Byelkin
Merge branch '12.3' into 13.0
Dave Gosselin
MDEV-39746: Segmentation fault with FULL JOIN

When an 'inner' table of a FULL JOIN sat inside a nest that was
itself the left side of an enclosing FULL JOIN,
make_outerjoin_info skipped that embedding while building the
outer join scope chain and left the inner table's first_upper
unlinked.  When make_join_select later pushed an ON condition to
that table, add_found_match_trig_cond walked off the broken
chain and dereferenced NULL.

Fix make_outerjoin_info to set first_upper for a tab that
carries its own outer join scope (first_inner == tab) when its
immediate embedding did not link it.  Point first_upper at the
nested_join->first_nested of the first enclosing outer join nest
the embedding walk reaches.

The same query exposed a second bug.  The outermost FULL JOIN's right
operand was a nested join rather than a single base table.  The parser
places the nest on the right when the outermost FULL JOIN's ON is the
last one written, because the parser keeps the outermost FULL JOIN
pending until its ON arrives, and the inner FULL JOINs reduce first
into a nest that becomes the right operand.
alloc_full_join_duplicate_filters allocates the fj_dups filter on a
JOIN_TAB carrying JOIN_TYPE_FULL | JOIN_TYPE_RIGHT, so with the
FULL|RIGHT bits on the nest, which is never a JOIN_TAB, no filter was
allocated and the null complement pass never fired.  The unmatched
rows from the right side were never emitted, producing a result with
fewer rows than the SQL:2016 standard requires.

Add swap_full_join_sides, called from rewrite_full_outer_joins
when a FULL JOIN survives simplify_joins with a leaf on the left
and a nested join on the right.  FULL JOIN is symmetric on its
operands, so swapping does not change query semantics; after the
swap the leaf carries the FULL|RIGHT bits and the rescan target
is a single base table.
Mohammad Tafzeel Shams
MDEV-38305: Expose adaptive hash index statistics in ANALYZE FORMAT=JSON

Expose InnoDB's Adaptive Hash Index (AHI) statistics through ANALYZE
FORMAT=JSON output to provide query-level visibility into AHI usage
and effectiveness. This allows DBAs and developers to monitor how well
the adaptive hash index is serving their workloads on a per-query basis.

The r_ahi_stats object (nested inside r_engine_stats) now reports four
key metrics: ahi_searches (successful AHI lookups), ahi_searches_btree
(AHI misses requiring B-tree fallback), ahi_rows_added (rows inserted
into AHI), and ahi_pages_added (pages indexed by AHI).

- btr_ahi_inc_searches(): Increment counter when AHI lookup succeeds.
- btr_ahi_inc_searches_btree(): Increment counter when AHI lookup fails
  and falls back to B-tree search.
- btr_ahi_inc_rows_added(): Increment counter when rows are added to
  the adaptive hash index structure.
- btr_ahi_inc_pages_added(): Increment counter when new pages are
  indexed by AHI.
- btr_cur_t::search_leaf(): Call btr_ahi_inc_searches() on successful
  AHI hit and btr_ahi_inc_searches_btree() on AHI miss to track search
  outcomes at the point where AHI is utilized.
- trace_engine_stats(): Output r_ahi_stats object with all four AHI
  counters in JSON format when any AHI activity is detected during query
  execution.
- ha_handler_stats: Added ahi_searches, ahi_searches_btree, ahi_rows_added,
  and ahi_pages_added fields to track per-query AHI statistics.
- ahi_stats.test: Comprehensive verification of AHI statistics reporting
  across different scenarios: insufficient accesses (no AHI build),
  threshold triggering (AHI construction), heavy warmup (full AHI
  utilization), and disabled AHI (verify zero statistics).
- check_ahi_status.inc: Reusable include file for executing queries with
  configurable warmup repetitions and extracting AHI statistics from
  ANALYZE FORMAT=JSON output using JSON path expressions.
Sergei Golubchik
Merge branch '11.4' into 11.8
Vladislav Vaintroub
update appveyor config

Go back to clone_depth=1.
With the increased amount of pushes, testing old commits only increases
queue
Bill Jin
MDEV-39548 Cleanup MDL_request boilerplate with ACQUIRE_LOCK macro

Add new acquire_lock() overloads on MDL_context that combine MDL_request
initialization and lock acquisition into a single call, returning
MDL_ticket* directly. Convert applicable call sites across the codebase
to use the new ACQUIRE_LOCK macro.

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.
PranavKTiwari
MDEV-28610 : Assertion  marked_for_read() failed upon range select with virtual column in index.
Fix read_set propagation for virtual columns during keyread

The keyread initialization path was populating  using , which internally uses the non-recursive index marking path. This only marks direct index fields and does not resolve dependencies of virtual/generated columns.

As a result, when a covering index contained a virtual column, its dependent base columns could be missing from , leading to  assertions during virtual column evaluation.

Replace the call with , which uses the recursive read-marking path and correctly propagates virtual/generated column dependencies into  during keyread setup.
Vladislav Vaintroub
MDEV-39719 Fix memory allocation errors on Windows ARM64 CI

Do not overload the machine. Huge reservation seem to stress
Windows on ARM64 memory management, so that random OOM can appear
when multiple processes are constantly allocating/deallocating
memory. Reduce number of parallel threads to 2. The  bottleneck
on this machine is disk IO, so it does not reduce total test time.
Marko Mäkelä
Implement compatible copy_file() on macOS
Thirunarayanan Balathandayuthapani
MDEV-34358  Encryption threads consume CPU when no work available

Problem:
========
The InnoDB encryption thread could deadlock with
purge or DML operations when rotating encryption keys.
The encryption thread called fseg_page_is_allocated()
to check if a page was allocated before encrypting it.
This function acquired an exclusive latch (fil_space_t::latch)
on the tablespace to read the allocation bitmap.

However, purge or DML threads could already be holding page
latches while waiting to acquire the same tablespace latch,
creating a lock order violation. Specifically, the encryption
thread would hold the tablespace latch and then try to acquire a
page latch, while purge held a page latch and tried to
acquire the tablespace latch, resulting in a deadlock.

Solution:
=========
fseg_page_is_allocated(): Encryption thread passes an mtr,
allocation bitmap page latch is now correctly held in that mtr
until the caller commits it.

fil_crypt_get_page_throttle(): Use a trylock mechanism to acquire
the tablespace exclusive latch non-blockingly. If the trylock fails,
back off and retry the same page to avoid deadlock.  The bitmap
page S-latch is added to the mtr and held throughout the page read
and encryption operations. Release the tablespace exclusive latch
immediately after the allocation check to minimize contention,
while the bitmap page S-latch remains held in the mtr.
Sergei Golubchik
fix plugins.feedback_os_release failure on sles-1600

just the comment at the beginning of its /etc/os-release
is already more than 256 bytes
Georgi (Joro) Kodinov
MDEV-39718: Produce Markdown plugin API documentation

Implemented a cmake utility macro to generate markdown documentation
for the plugin API headers.
Fixed some doxygen comment mistakes in these.
Alexey Botchkov
fix to the XMLTYPE.
Vladislav Vaintroub
MDEV-39719 Fix memory allocation errors on Windows ARM64 CI

Do not overload the machine. Huge reservation seem to stress
Windows on ARM64 memory management, so that random OOM can appear
when multiple processes are constantly allocating/deallocating
huge chunks of memory. Thus, reduce number of parallel threads to 2,
and do not run replication tests.
PranavKTiwari
removed inlin.
Marko Mäkelä
InnoDB_backup::fini(): Trim to the same log file size
Alexey Botchkov
Progress report.
        17.04.2026
Sergei Golubchik
Merge branch '10.6' into 10.11
Vladislav Vaintroub
update appveyor config

- Use VS2026 instead of VS2022
- do not try to checkout or build outdated (non-top of the branch)
  commits anymore, go back to clone_depth=1.
  With the increased amount of pushes, building old commits only increases
  queue on CI
Vladislav Vaintroub
MDEV-39719 Fix memory allocation errors on Windows ARM64 CI

Do not overload the machine. Huge reservation seem to stress
Windows on ARM64 memory management, so that random OOM can appear
when multiple processes are constantly allocating/deallocating
memory. Reduce number of parallel threads to 2. The  bottleneck
on this machine is disk IO, so it does not reduce total test time.
Marko Mäkelä
Fix a regression in mtr_t::is_named_space