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
fix sporadic galera test failures

* query @@datadir before audit is enabled, not directly before reading
  the log. just in case cat gets the log before SELECT is flushed.
* wait for a table to be dropped
Rucha Deodhar
MDEV-36653: main.mysql_upgrade-28915 test case timeout

Analysis:
Leaving 'event_scheduler=ON' with a 1-second interval creates a background
loop that constantly hits mysql.event with MDL_SHARED_WRITE locks.

Fix:
Turn 'GLOBAL event_scheduler=OFF' right before running upgrade. This drains
the background worker threads and drops the shared locks so the
upgrade can acquire its exclusive lock and finish instantly.
forkfun
MDEV-38061 Assertion `args[0]->decimal_precision() < 22' in Item_func_round::fix_arg_hex_hybrid

Item_name_const forwarded type_handler() to the wrapped value but not
decimal_precision(), so a hex literal wrapped in NAME_CONST reported the
generic precision instead of its own. Forward decimal_precision() too.
Sergei Golubchik
MDEV-40362 #mysql50# mixes up with table names in the table cache and on disk

1.
Only allow #mysql50# prefix on table names that
can not be decoded from a file name to a table name.
It is an error to put this prefix on a name that can be accessed
as a valid table name without a prefix. Use `t1` not `#mysql50#t1`,
use `a-b` not `#mysql50#a@002db`.

2.
Don't allow creation of new tables with the #mysql50# prefix.

Except when in SQLCOM_ALTER_DB_UPGRADE - main.upgrade test runs
ALTER DATABASE `#mysql50#mysqltest-1` UPGRADE DATA DIRECTORY NAME;
This command moves tables from the old db name to the new db name,
and some of these tables also have old #mysql50# names.

3.
Also don't allow to create such databases, views, partitions,
subpartitions, sequences, triggers.
Sergei Golubchik
MDEV-40409 ST_GeomFromText stack overrun on deeply nested GeometryCollection
forkfun
MDEV-38061 Assertion `args[0]->decimal_precision() < 22' in Item_func_round::fix_arg_hex_hybrid

Item_name_const forwarded type_handler() to the wrapped value but not
decimal_precision(), so a hex literal wrapped in NAME_CONST reported the
generic precision instead of its own. Forward decimal_precision() too.
Rucha Deodhar
MDEV-36653: main.mysql_upgrade-28915 test case timeout

Analysis:
Leaving 'event_scheduler=ON' with a 1-second interval creates a background
loop that constantly hits mysql.event with MDL_SHARED_WRITE locks.

Fix:
Turn 'GLOBAL event_scheduler=OFF' right before running upgrade. This drains
the background worker threads and drops the shared locks so the
upgrade can acquire its exclusive lock and finish instantly.
Sergei Golubchik
MDEV-40470 GRANT PROXY with empty password incorrectly checks grantor's privileges

empty password and empty plugin name don't mean "authentication
was not specified", they mean "empty authentication was specified"
bsrikanth-mariadb
MDEV-40383:innodb_gis.point_basic fails on replay

There are 2 problems: -
1. The REPLACE statement that is recorded doesn't store the
  value of geometry type field correctly.
2. The table definition that got recorded has fields with non-null constraint,
  and no default value is specified.
  Also, the "REPLACE INTO" statement that gets stored in the context,
  doesn't have any value specified for these non-null fields.

Solution is to: -
1. Store all the non-numeric values in HEX, when using REPLACE INTO
  statement.
2. Instead of storing only the column values that were projected in the
  query, store all the column values into the recorded REPLACE INTO
  statement.

Implementation details: -
1. Modify the format_and_store_row() method in filesort.cc, to accept an
  argument that tells whether to store non-numeric vales in hex or the
  default string type. The value of new argument is by default false,
  but is set to TRUE, when recording a const row for base tables.
  The default value of FALSE is used when mysql.[table|column|index]_stats
  table is used in the REPLACE INTO statement.
2. From join_read_const(), and join_read_system() methods in sql_select.cc,
  re-read the const row for all the fields in the table. After the row
  is read, restore the table->read_set to the value that was before.
Rucha Deodhar
MDEV-17943: Unfortunate error code/message upon SET DEFAULT ROLE FOR

Analysis:
Wrong error code

Fix:
Used the correct error code
Rex Johnston
MDEV-17846 Wrong result with grouping select from merged derived table

When a grouping select referring to a derived table has an outer
reference within it's select list, that outer reference isn't
properly fixed.  It isn't added to
outer_context->select_lex->inner_refs_list for later resolution during
JOIN::prepare.  As it is not fixed, the Item pointer arrays associated
with the temporary table filled during the join process are now incorrect
and we end up with an incorrect join->outer_ref_cond evaluation and
potentially a wrong result.
Rucha Deodhar
MDEV-31477: Inconsistent handling while fetching values in json

Analysis:
When we get value in json_value(), if any error occurs while scanning the
json, it is not reported. Only true is returned.
Fix:
Report error along with returning true (error)
Sergei Golubchik
MDEV-40395 MyISAM/Aria silently truncate extensions from filenames, if too long

* move all common fn_format flags that mi_create/maria_create use
  into one single #define.
* simplify (MY_APPEND_EXT is redundant and MY_REPLACE_EXT does nothing
  when no . is present in the filename)
* use MY_SAFE_PATH everywhere (return NULL if too long)
* set my_errno= ENAMETOOLONG on too long
* abort mi_create/maria_create if returned NULL
forkfun
Update HeidiSQL to 12.20, update libfmt to 12.2.0, fix galera_sst_mariabackup_lost_found.test (forgotten semicolon)
forkfun
Merge branch 10.6 into 10.11
Sergei Golubchik
post-merge fixes

* restore result=NULL after free (to prevent double-free)
* remove DBUG_EVALUATE_IF again
* remove useless 'stop slave'
* restore charset encoding in mysqltest.{test,result}
* correct error for unparseable BINLOG data is ER_SYNTAX_ERROR now
Rucha Deodhar
MDEV-23500: Assertion `!is_set() || (m_status == DA_OK_BULK && is_bulk_op())'
failed in Diagnostics_area::set_ok_status upon multi-table update

Analysis:
When NULL field from internal temporary table is copied to
NOT-NULL so there is error about truncation  but this error is not
reported so we get the failure.

Fix:
Return the error state.
forkfun
MDEV-39380 Assertion `arg2_int >= 0' failed in Item_func_additive_op::result_precision

A 0xHHHH / b'..' literal keeps its hex_hybrid type through COALESCE/IF/CASE/...,
but was evaluated, sized and stored as a string, so it behaved differently from
a bare literal (10+COALESCE(0x31) gave 11, not 59).

Type_handler_hex_hybrid now implements the numeric side to match the bare
literal: val_int/val_real/val_decimal read bytes as a hybrid, Item_decimal_precision
returns the integer precision, Item_save_in_field stores like the bare literal.
The traditional type merge keeps the hybrid through a typeless NULL (as for BIT),
and Item_hybrid_func_fix_attributes attributes it binary/unsigned.
Vladislav Vaintroub
MDEV-24245 REPAIR/OPTIMIZE on ARCHIVE table corrupts blob/text data

pack_row() and unpack_row() both used record_buffer. After unpack_row(),
blob field pointers in record[0] reference data stored in record_buffer.
When pack_row() then writes the new packed row into the same record_buffer,
it overwrites the blob data that those pointers still reference. Subsequent
Field_blob::pack() calls follow the stale pointers and read corrupted data.

This only matters in the optimize/repair loop where the same handler reads
then writes each row. Normal INSERT has no prior unpack_row() on the same
handler.

Fix: in the optimize loop, before writing, copy blob data out of
record_buffer (the same approach already used by get_row_version2),so that
blob pointers no longer reference record_buffer when pack_row() overwrites it.

Free the temporary blob buffer after the loop.
Oleksandr Byelkin
MDEV-38722 server crash hp_rec_key_cmp

In an extended set operation (select_unit_ext, used when EXCEPT ALL or
INTERSECT ALL is present) the HEAP unique index is released once, at
the node pointed to by union_distinct, assuming every operation after
it is a plain UNION ALL that can be unfolded.  That does not hold for a
trailing EXCEPT ALL: select_unit_ext::send_data() still calls
find_unique_row() for it (only the UNION ALL branch checks
is_index_enabled), so it dereferenced the already released index and
the server crashed in hp_rec_key_cmp().

optimize_bag_operation() now postpones the index release past such a
trailing EXCEPT ALL, so the index is available while it is executed.

Keeping the index alive uncovered a second problem.  A leading
INTERSECT that stays inline in the extended operation (instead of being
materialized in a derived table) left the rows that did not match every
INTERSECT operand in the temporary table.  select_unit::send_eof()
removes them for a materialized subsequence, but the select_unit_ext
override did not, so once the crash was gone the following operations
counted those stale rows and produced a wrong multiset.

select_unit_ext::send_eof() already scans the temporary table (to reset
the duplicate counter, to fold INTERSECT ALL counters, or to unfold),
so the filtering of the non-matching INTERSECT records is done inside
those loops (guarded by the filter_intersect flag) and the table is
still scanned only once.

Co-Authored-By: Claude Opus 4.8 (1M context) <[email protected]>
Rucha Deodhar
MDEV-23500: Assertion `!is_set() || (m_status == DA_OK_BULK && is_bulk_op())'
failed in Diagnostics_area::set_ok_status upon multi-table update

Analysis:
When NULL field from internal temporary table is copied to
NOT-NULL so there is error about truncation  but this error is not
reported so we get the failure.

Fix:
Return the error state.
Mohammad Tafzeel Shams
MDEV-40504: Fix memory leak in mariabackup incremental copy

ibx_copy_incremental_over_full() : Replace die() with
proper error handling to avoid memory leaks when RocksDB
backup directory operations fail.
Sergei Golubchik
MDEV-40484 ambiguous view frm parsing when username includes \n

escape user and host names in view frm

in fact, there is no reason to write any field as is, unescaped,
so let's remove FILE_OPTIONS_STRING in the next release
forkfun
Update HeidiSQL to 12.20, fix galera_sst_mariabackup_lost_found.test (lacked semicolon)
Rucha Deodhar
MDEV-22675: Assertion `offset < table->s->reclength' failed in dump_leaf_key

Analysis:
The reclength depends on the size of each field of the temporary table plus
the null_bytes. Since null_bytes is 0 (because we’re in non-strict mode and
the source table fields can never be null), there is no need to keep track
of null values. Hence the total record length is just the sum of the sizes
of both fields. The second field will always have size 0 because its value
will always be an empty string. Hence it starts exactly where the first
field ends which equal to reclength. Hence the assertion failure.

Fix:
If pack_length() is 0 (which means the size of field is 0) so assigning the
result as empty string directly, the assertion is not valid in that case.
Rex Johnston
MDEV-17846 Wrong result with grouping select from merged derived table

When a grouping select referring to a derived table has an outer
reference within it's select list, that outer reference isn't
properly fixed.  It isn't added to
outer_context->select_lex->inner_refs_list for later resolution during
JOIN::prepare.  As it is not fixed, the Item pointer arrays associated
with the temporary table filled during the join process are now incorrect
and we end up with an incorrect join->outer_ref_cond evaluation and
potentially a wrong result.
Oleksandr Byelkin
MDEV-38722 server crash hp_rec_key_cmp

In an extended set operation (select_unit_ext, used when EXCEPT ALL or
INTERSECT ALL is present) the HEAP unique index is released once, at
the node pointed to by union_distinct, assuming every operation after
it is a plain UNION ALL that can be unfolded.  That does not hold for a
trailing EXCEPT ALL: select_unit_ext::send_data() still calls
find_unique_row() for it (only the UNION ALL branch checks
is_index_enabled), so it dereferenced the already released index and
the server crashed in hp_rec_key_cmp().

optimize_bag_operation() now postpones the index release past such a
trailing EXCEPT ALL, so the index is available while it is executed.

Keeping the index alive uncovered a second problem.  A leading
INTERSECT that stays inline in the extended operation (instead of being
materialized in a derived table) left the rows that did not match every
INTERSECT operand in the temporary table.  select_unit::send_eof()
removes them for a materialized subsequence, but the select_unit_ext
override did not, so once the crash was gone the following operations
counted those stale rows and produced a wrong multiset.

select_unit_ext::send_eof() already scans the temporary table (to reset
the duplicate counter, to fold INTERSECT ALL counters, or to unfold),
so the filtering of the non-matching INTERSECT records is done inside
those loops (guarded by the filter_intersect flag) and the table is
still scanned only once.

Co-Authored-By: Claude Opus 4.8 (1M context) <[email protected]>
Sergei Golubchik
UBSAN warning:

sql/table.h:237:16: runtime error: load of value 4, which is not a valid value for type 'bool'

the warning was about uninitialized `bool in_field_list`
let's initialize the whole ORDER when it's allocated.
Rucha Deodhar
MDEV-25099: Inconsistent error upon updating read-only table with
ROW_FORMAT=COMPRESSED

Analysis:

Warning level is incorrect
Fix:
Changed to correct warning level
Sergei Golubchik
MDEV-25813 ASAN errors in err_conv / field_unpack upon multi-UPDATE causing ER_DUP_ENTRY

InnoDB always frees allocated in record[0] blobs even
when reading into record[1].
Let's read into record[0] for consistency.
Jan Lindström
MDEV-40056 - Galera Dynamic Variables Susceptible to RCEs

Make check stronger and require OpenSSL version > 1.1.1
for test case.
Vladislav Vaintroub
MDEV-25817 proxy protocol: successful login does not reset connect errors

With proxy protocol thd_set_peer_addr() runs twice (proxy host, then the
real client from the proxy header). Connect errors are accounted against
the real client, but check_connection() incorrectly uses condition on the
proxy host's count, rather than real client's address.

Fix: reset both the proxy host, and real client's connect errors on
successful connection.

Added tests for incomplete handshake, and reset behavior,
under proxy protocol, for both real client errors, and proxy host errors.
Sergei Golubchik
MDEV-30942 MSAN_OPTIONS=poison_in_dtor=1 causes failures in free_root()

Materialized_cursor included MEM_ROOT where it itself (Materialized_cursor)
was allocated. Materialized_cursor inherits from Server_side_cursor,
and Server_side_cursor::operator delete frees this mem_root.

This offends MSAN with poison_in_dtor, because when Materialized_cursor
is destroyed, MEM_ROOT is poisoned and Server_side_cursor::operator delete
accesses memory it really shouldn't.

Fix:
* MEM_ROOT is moved into Server_side_cursor. Materialized_cursor is
  the only class inheriting from it, so nobody is affected.
* operator delete is replaced with a function cdestroy() which
  saves the MEM_ROOT, deletes the object, then frees the root.
* cannot close() from ~Materialized_cursor anymore, main_mem_root
  should be copied before the destruction
forkfun
Update HeidiSQL to 12.20, update libfmt to 12.2.0, fix galera_sst_mariabackup_lost_found.test (forgotten semicolon)
Sergei Golubchik
MDEV-40426 CONNECT writes unvalidated data from remote server into fixed-len buffer

use size-bounded scanf formats
Sergei Golubchik
cleanup: main.drop test
Sergei Golubchik
MDEV-40360 CONNECT REST can pass arguments to curl via HTTP parameter

tell curl to not try to interpret url as a parameter