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
Vladislav Vaintroub
x
Daniel Bartholomew
bump the VERSION
Alexey Botchkov
MDEV-37262 XMLTYPE: validation.
Dave Gosselin
MDEV-39715: semijoin nest under a FULL JOIN triggers assertion

When an IN-subquery in the ON clause of a JOIN to a FULL JOIN nest
becomes a semijoin, the new semijoin nest is placed inside the FULL JOIN
nest.  Normally that enclosing nest would be flattened, but a FULL
JOIN nest is not flattenable, so the semijoin nest remains.

check_interleaving_with_nj used to skip sj-nests when updating
counters, so every semijoin inner table also bumped the enclosing
nest's counter.  With two inner tables and two FULL JOIN tables, the
enclosing nest's counter went to 4 against a limit of 3 and the
assertion fired.

Count the semijoin nest as one child of its parent.  Bump the semijoin
nest's own counter on each semijoin inner table, and only bump the
parent once the semijoin nest is fully placed.  restore_prev_nj_state
is changed the same way for backtracking.
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.
Andrei Elkin
High priority MDL_BACKUP_BLOCK_COMMIT_RPL

When the standard request of MDL_BACKUP_COMMIT is not granted to a worker
it first searches for a possible grantee that is a parallel slave
worker and if there exist one with greater commit order the request
type is escalate to the highest which is re-submitted.

To the changes in sql_base.cc,
note there also exist a request of the highest (new) type at time of
Xid_apply_log_event::do_record_gtid which is a committing phase of
slave transaction when it is executing an implicit statement.
It must be able to bypass any waiting lock by backup process even
without yet knowing whether the transaction is going to be enrolled
into a pending to commit slave group. When later it turns out
not the case the strong MDL_STATEMENT requested lock would've been
already relinquished.

Tested with previous commit's  refined and extended BASE's
  rpl.parallel_backup, rpl.rpl_parallel_backup_worker_retry
and new added
  rpl.rpl_parallel_backup_waits_worker_retry

Todo:
According to Svoj's review, this patch still needs
removing the slave specific code from the MDL.
That is changes in MDL_context::acquire_lock().

Probably
ha_commit_trans() would call first
    try_acquire_lock_impl()
when it returns empty ticket a part of the added to acquire_lock
Teammate-Aware Escalation Check would be invoked just to compute
`has_teammate` and when that is true to call the whole BASE version
of MDL_context::acquire_lock() having the highest type of request.
Vladislav Vaintroub
1
Vladislav Vaintroub
x
Dave Gosselin
MDEV-39713: Propagate dep_tables for FULL JOIN with constant ON

A FULL JOIN with a constant ON expression did not encode
the outer table dependency in the on_expr because the
constant references no tables.  The enclosing nest's
dep_tables, however, still carries that dependency, so
propagate it.
Sergei Golubchik
Merge branch '10.11' into 11.4
Sergei Golubchik
strengthen safe() in wsrep_sst_common, just in case
Monty
Set blob pointer to null with bzero()

This is to avoid storing a pointer into an unaligned address.
Vladislav Vaintroub
MDEV-39719 Fix memory allocation errors on Windows ARM64 CI

Reduce the default max size from 8TB to 128GB. on ARM64, allocating
multiple huge areas (like CI does, for multiple processes) can result in
exhaustion of internal kernel memory. Presumably non-paged pool, used
for page translation tables (this info is provided by AI, can't verify).
Vladislav Vaintroub
y
ParadoxV5
MDEV-6589: Remove `have_debug_sync` requirement

The test for `rpl.rpl_parallel_mdev6589` required
`include/have_debug_sync.inc` but did not use `@@debug_sync`
(besides RESETting it during cleanup). It uses `MASTER_GTID_WAIT()`.
Vladislav Vaintroub
x
Vladislav Vaintroub
x
Vladislav Vaintroub
x
bsrikanth-mariadb
MDEV-39412: parse error reading tabs in ranges

Note:
while reading from information_schema.optimizer_context one level of unescaping
is already done i.e. (\\t becomes \t or \\\\t becomes \\t)

w.r.t the MDEV, there are 2 problems: -

1.
When reading from the sql script file, json parser is not able to parse
the range value in json_read_value() from json_lib.c
"ranges": [
            "(b\t\t\t\t\t\t) <= (b) <= (b???????)"
          ],
mainly the \t\t stuff, and hence a warning.
It also stops loading the context into memory.
Since, a new table is created with empty data, and without context,
we get Impossible WHERE noticed after reading const tables

2.
There is unescaping call being made in read_string() from sql_json_lib.cc
while parsing of the context. With this \\t was becoming \t.
However, print_range() from opt_range.cc already does escaping of the values.
The value "b\t\t\t" was in fact produced as "\b\\t\\t\\t".
Later, we try to compare range values from the query and the context.

Here a mismatch is found because, in one case there is escaping,
and in the other case escaping got removed.

Solution
========
Since, there are 2 levels of unescaping being performed, 1. during sql
parse of the context from information_schema, and 2. during
read_string. So, we need to have 2 levels of escaping.

First is done in the dump_mrr_info_calls() - here
json_escape_to_string() is used.

Second is done at the end of store_optimizer_context(), for the entire
opt_context. Here a newly introduced function escape_json_for_sql_literal()
is used which does escaping only for backslash, and single quote.
Sergei Golubchik
Merge branch '11.4' into 11.8
Rex Johnston
MDEV-39492 Parallel Query: Study how to create worker threads

Introduces parallel_worker_threads variable to control the number
of worker threads created by a parallel execution query.

2 new files, sql_parallel_workers.h sql_parallel_workers.cc which
contain structures for the creation, management and deletion of
parallel worker threads (pwt_ in the name).  Main management
class created in the stack in JOIN::exec, implemented for the
top level select.

Current parallel_worker_thread_func sleeps for 10 seconds, generates
a warning, signals the main thread, sleeps 10 seconds, signals the
main thread again, sets it's finished flag and cleans it's THD.

The main thread loops through worker threads, looking for finished
thread and cleans them up if they have finished.
It then waits for a signal, then processes it's message queue.

Threads are registed in server_threads, so are visible in
information_schema.processlist and the show processlist command.

We check that a kill query on a parallel worker is passed onto it's
manager and the query is properly aborted, and that a kill connection
is handled properly in parallel_worker.test.

Review input 1: cleanup earlier

Do cleanup before we've finished sending the result to the client.
This way, one can see the errors (and eventually warnings) marshalled
back to the main thread and returned to the user:

MariaDB [test]> set parallel_worker_threads=10;
Query OK, 0 rows affected (0.001 sec)

MariaDB [test]> select seq from seq_1_to_10;
ERROR 4103 (HY000): Argument to the worker_busted_function() function does not belong to the range [0,1]
Oleksandr Byelkin
make resalt the same for different platforms
ParadoxV5
Fix operator typo in `||` chain

There is a `,` breaking the chain; it will make the sub-chain
after it ignore any failure from the sub-chain before it.

This change was originally **unsolicitedly** suggested by Gemini;
that is, I did not activate Gemini nor provide any prompt,
but rather the CI-triggered Gemini comment came to me like junk mail.
By verifying the bot output and creating this patch independently
*without AI assistance*, I confirm I understand the change and
can claim its authorship and responsibility,
and *I remain have never provided AI-generated code*.

Co-authored-by: gemini-code-assist <[email protected]>
Pekka Lampio
MDEV-37990: redundant Table map events in binlog

This patch modifies how a Galera slave node writes Table map events to
binary log. Now a Galera slave does not write duplicate Table Map
events to binary log.
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
Vladislav Vaintroub
x
Yuchen Pei
MDEV-15621 [refactor] Partitioning cleanup

change p_column_list_val::fixed to a bool
remove redundant end label in partition_info::fix_column_value_functions
Arcadiy Ivanov
MDEV-39723, MDEV-39724: fix `hp_key_cmp()` blob packlength

`hp_key_cmp()` hardcoded `packlength=4` for the record side of blob
segment comparison. This is wrong when `Field_blob_key` preserves
the original blob subtype's packlength (1-4) via
`set_pack_length(blob_handler->length_bytes())`.

Use `seg->bit_start` (the actual packlength) instead. Update comments
in `hp_key_cmp()` and `hp_make_key()` to document the asymmetry
between record-side format (packlength-byte length prefix) and
key-side format (always 4-byte normalized length from `hp_make_key()`).
PranavKTiwari
Added logic for virtual column.
Pekka Lampio
MDEV-37990: redundant Table map events in binlog

This patch modifies how a Galera slave node writes Table map events to
binary log. Now a Galera slave does not write duplicate Table Map
events to binary log.
ParadoxV5
MDEV-20122: Remove `Master_info::is_demotion`

MDEV-20122 introduced this field, but it was never actually used.
`CHANGE MASTER TO master_demote_to_slave=…` only uses the parser
field `LEX_MASTER_INFO::is_demotion_opt` and is not recorded in
either `@@master_info_file` or `@@relay_log_info_file`,
as it takes effect during CHANGE MASTER rather than during replication.
ParadoxV5
Fix operator typo in `||` chain

There is a `,` breaking `Table_map_log_event::write_data_body()`’s
`||` chain.
This “comma operator” still connects the expressions,
but if a step in the first sub-chain fails,
the code will disregard the failure and continue with the second half-chain.

This change was originally **unsolicitedly** suggested by Gemini;
that is, I did not activate Gemini nor provide any prompt,
but rather the CI-triggered Gemini comment came to me like junk mail.
By verifying the bot output and creating this patch independently
*without AI assistance*, I confirm I understand the change and
can claim its authorship and responsibility,
and *I remain have never provided AI-generated code*.

Co-authored-by: gemini-code-assist <[email protected]>
Vladislav Vaintroub
1
Sergei Golubchik
Merge branch '10.6' into 10.11
ParadoxV5
MDEV-6589: Remove `have_debug_sync` requirement

The test for `rpl.rpl_parallel_mdev6589` required
`include/have_debug_sync.inc` but did not use `@@debug_sync`
(besides RESETting it during cleanup). It uses `MASTER_GTID_WAIT()`.
Yuchen Pei
MDEV-15621 Auto add RANGE COLUMNS partitions by interval

Allow auto partitioning by interval in PARTITION BY RANGE COLUMNS

PARTITION BY RANGE COLUMNS (col_name)
INTERVAL interval [AUTO]
(
  PARTITION partition_name VALUES LESS THAN (value)
  [, PARTITION partition_name VALUES LESS THAN (value) ... ]
)

where

- col_name is the name of one column of type DATE or DATETIME
- at least one partition is supplied
- INTERVAL interval is a time interval

When performing DML on such a table, it will first add partitions
by the specified interval until the partition covers the current time.

Partition addition will not cause an implicit commit like DDL normally
does.

The partitions are named pN.

Otherwise the table behaves exactly the same as a normal RANGE COLUMNS
partitioned table.
Yuchen Pei
MDEV-15621 Auto add RANGE COLUMNS partitions by interval

Allow auto partitioning by interval in PARTITION BY RANGE COLUMNS

PARTITION BY RANGE COLUMNS (col_name)
INTERVAL interval [AUTO]
(
  PARTITION partition_name VALUES LESS THAN (value)
  [, PARTITION partition_name VALUES LESS THAN (value) ... ]
)

where

- col_name is the name of one column of type DATE or DATETIME
- at least one partition is supplied
- INTERVAL interval is a time interval

When performing DML on such a table, it will first add partitions
by the specified interval until the partition covers the current time.

Partition addition will not cause an implicit commit like DDL normally
does.

The partitions are named pN.

Otherwise the table behaves exactly the same as a normal RANGE COLUMNS
partitioned table.
Dave Gosselin
all table names, aliases, view names, etc are now lowercase
Arcadiy Ivanov
MDEV-39732: fix row-based replication of DELETE on HEAP blob tables

`handler::ha_delete_row()` calls `binlog_log_row()` AFTER
`delete_row()` returns. For HEAP blob tables, `heap_delete()` was
freeing continuation chains immediately, overwriting chain records
with free-list `del_link` pointers. The zero-copy pointers in the
record buffer (used by the binlog to read blob data) became dangling,
causing corrupted replication events.

**Fix**: split the blob free path by table type:

- **Internal temporary tables** (`share->internal`): free chains
  immediately via `hp_free_blobs()` — these are never binlogged.

- **User-created MEMORY tables**: defer the free by saving chain
  head pointers into `HP_INFO::pending_blob_chains` (one per blob
  column, allocated once at `heap_open_from_share()`). The flush
  runs on the next mutating operation (`heap_write`, `heap_update`,
  `heap_delete`) or on `heap_reset`/`heap_close`.

`heap_clear()` (TRUNCATE) invalidates `has_pending_blob_free`
without flushing, since the HP_BLOCK tree is already destroyed.

Also fixes `hp_free_blobs()` to skip zero-length blobs (avoids
chasing a NULL chain pointer) and `heap_update()` to NULL the
chain pointer slot for unchanged zero-length blobs (prevents
stale SQL-layer pointers from being misread as chain heads).