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
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
Georgi (Joro) Kodinov
MDEV-39718: Produce Markdown plugin API documentation

Generated the plugin API headers using a shell script.
Fixed some doxygen comment mistakes in the headers.
Added a cmake conveninence target to generate the docs into $BUILD_DIR/docs
Added a main page for the API docs.
Included all of the existing group .md files into the CMake target
Leveraged moxygen 2.1.11's fixes to produce the full API docs in a single go
Removed the list of output .md files from the CMake target and switched to a
stamp file to avoid unnecessary rebuilds of the docs when the list of .md
files changes.
Addressed various review comments.
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.
Sergei Petrunia
Move parallel func declarations from sql_select.cc to sql_parallel_workers.h
Sergei Petrunia
Make compile (todo: sync with comments)
Georgi (Joro) Kodinov
Addendum to MDEV-20749's fix: addressed Kristian's comments on indenting and #ifdef-ing.
Sergei Golubchik
cleanup: ma_hashtbl_init, typos, mutex lock in ma_tls_end()

ma_hashtbl_init with CALLER_INFO was copied from the server, but
never used here (CALLER_INFO wasn't even defined)

the locking the mutex just before destroying is
fundamentally broken, let's not do it.
Alexander Barkov
MDEV-39563 Implement UPDATE ... RETURNING ... INTO
Lawrin Novitsky
ODBC-504 Catalog functions did not snitize parameters(length)

All but SQLTables did not check if name parameters are too long. That
could cause buffer overwlows.
The testcase has been added.
Yuchen Pei
MDEV-40751 Make sure that VEC_FROMTEXT results in a length of multiple of 4
Georgi (Joro) Kodinov
MDEV-39718: Produce Markdown plugin API documentation

Generated the plugin API headers using a shell script.
Fixed some doxygen comment mistakes in the headers.
Added a cmake conveninence target to generate the docs into $BUILD_DIR/docs
Added a main page for the API docs.
Included all of the existing group .md files into the CMake target
Leveraged moxygen 2.1.11's fixes to produce the full API docs in a single go
Removed the list of output .md files from the CMake target and switched to a
stamp file to avoid unnecessary rebuilds of the docs when the list of .md
files changes.
Addressed various review comments.
Marko Mäkelä
MDEV-40756 Incorrect multi-batch recovery of file size

file_name_t::page0_lsn: Keep track of the last applied
recv_sys_t::parse_page0() so that a multi-batch recovery
will not reset the file to a smaller size.

(cherry picked from commit 0c4039bde4cf8ce4f4dd2b161e48a3b318ab38ea)
PranavKTiwari
MDEV-36990: SIGFPE in get_max_range_rowid_filter_elems_for_table
Problem:
A zero-length column (CHAR(0), VARCHAR(0), BINARY(0), VARBINARY(0)) was accepted as a PRIMARY KEY column.  The resulting zero-length key part left ref_length == 0, causing a division by zero in get_max_range_rowid_filter_elems_for_table().

Cause:
init_key_part_spec() rejected a zero-length key part only when the column had NOT_NULL_FLAG.  A PRIMARY KEY column becomes implicitly NOT NULL only later, in the key loop of mysql_prepare_create_table_finalize(), so at validation time the flag is still clear.

Fix:
Reject a zero-length key part also when key.type == Key::PRIMARY. Nullable zero-length columns remain indexable by non-unique and UNIQUE keys.
Marko Mäkelä
Clean up innodb_backup_batch_wait()
Yuchen Pei
MDEV-40751 Make sure that VEC_FROMTEXT results in a length of multiple of 4
Marko Mäkelä
fixup! 293f0166f3c91ab22e25ab4997b452c91a79c1a9
Yuchen Pei
MDEV-40486 [to-squash] Move the new lneght check in Item_func_vec_fromtext::val_str to later

This fixes the crashes mentioned in the parent commit
PranavKTiwari
a
Georg Richter
Changed the error message back to avoid failing tests
Mohammad Tafzeel Shams
MDEV-37467: InnoDB Instant ALTER TABLE is not crash safe

Instant ALTER TABLE metadata record includes externally stored
BLOB metadata. The existing BLOB storage path in
btr_store_big_rec_extern_fields() writes the clustered index record
first, with zero BLOB pointers, and only fills in the BLOB pointers
afterwards. If the server is killed after the mini-transaction that
wrote the (incomplete) metadata record was durably committed, but
before the BLOB pointers were written, the table could become
inaccessible on recovery.

Make metadata BLOB storage crash-safe by writing the BLOB pages and
computing their pointers before the metadata record itself is
inserted or updated, so that the record is always written with
complete BLOB pointers. If the server is killed before the metadata
record is written, the already-written BLOB pages are merely
orphaned, which is safe.

- btr_store_big_rec_metadata():
  New function to store the off-page columns of a metadata record
  ahead of time. Each BLOB page is allocated and linked in its own
  mini-transaction, and the resulting BLOB pointers are written
  directly into the (heap-resident) index entry. On failure, it frees
  any pages it already allocated and resets the pointers to zero.

- btr_free_big_rec_metadata():
  New helper to free the BLOB pages written by
  btr_store_big_rec_metadata() and reset the entry's BLOB pointers
  to zero, used both on failure inside that function and by its
  callers when the metadata record ends up not being written.

- row_ins_clust_index_entry_low():
  For a metadata entry that needs external storage, convert it to a
  big record and call btr_store_big_rec_metadata() (with
  log_free_check() allowed, since no latches are held yet) before
  inserting the record. On failure, free the metadata BLOBs and
  convert the entry back.

- btr_cur_pessimistic_update():
  When updating a metadata record that requires external storage,
  call btr_store_big_rec_metadata() (without log_free_check(),
  since index and page latches are held) before modifying the record,
  and free the temporary big_rec vector via btr_free_big_rec_metadata()
  or dtuple_big_rec_free() on the various failure/success paths.

- btr_cur_optimistic_insert():
  Remove the special-cased jump to convert_big_rec for metadata
  entries, since their BLOBs are now always stored ahead of time by
  the caller; assert that a metadata entry never needs external
  storage at this point.

- innobase_instant_try():
  Since btr_cur_pessimistic_update() now stores metadata BLOBs
  before updating the record, big_rec is always NULL here; assert
  this instead of calling btr_store_big_rec_extern_fields().

- Added test in innodb.instant_alter and innodb.instant_alter_crash
  to test normal working of INSTANT ALTER, crash safety and full table.
Georg Richter
Merge branch '3.3' into 3.4-tmp
  • cc-x-codbc-windows: 'dojob pwd if '3.4' == '3.4' ls win32/test SET TEST_DSN=master SET TEST_DRIVER=master SET TEST_PORT=3306 SET TEST_SCHEMA=odbcmaster if '3.4' == '3.4' cd win32/test if '3.4' == '3.4' ctest --output-on-failure' failed -  stdio
Georg Richter
Cleanup for test: drop my_vector table
Alexander Barkov
MDEV-39563 Implement UPDATE ... RETURNING ... INTO
Sergei Golubchik
MDEV-40445 TLS session resumption

in fact it was already on in the server, so this only
enables statistics to see it in SHOW STATUS, adds tests,
and updates C/C to match.

Assisted-By: Claude:claude-5-opus
PranavKTiwari
MDEV-36438- Added test case mentioned in this MDEV to validate the changes done as part of MDEV-36990
Thirunarayanan Balathandayuthapani
MDEV-40776 Atomic CREATE OR REPLACE silently breaks the foreign key


Problem:
========
Atomic CREATE OR REPLACE renames the original table to a #sql-create- backup
copy, and because such a name is not treated as a temporary name, InnoDB
renamed every constraint of that table, including SYS_FOREIGN.REF_NAME of the
constraints that belong to other tables. Those constraints ended up
referencing the backup copy, which is dropped at the end of the statement, so
the child tables were left with a dangling reference that survived a restart.

Solution:
============
row_rename_table_for_mysql(): Fix this by splitting the two halves of the
constraint renaming. Identifiers that the renamed table owns
(SYS_FOREIGN.ID, FOR_NAME, SYS_FOREIGN_COLS.ID, and REF_NAME of a
self-referencing constraint) keep following the table, so that they cannot
conflict with the constraints of the table that is created under the original
name, while REF_NAME of the constraints of other tables is left pointing to
the original name, so that the newly created table inherits them and is
rejected if it is not compatible with them.

dict_table_rename_in_cache(): Does the same in the data dictionary cache
by detaching the referencing constraints from the backup copy
instead of renaming them, so that dict_load_foreigns() attaches them to
the new table.

As the newly created table can now be a parent table, the tables that
CREATE OR REPLACE drops in order to restore the previous state must be
dropped without foreign key checks, both in drop_open_table() and in
the DDL log recovery (execute_drop_table()).
Marko Mäkelä
fixup! e16b1b4e2739be7bc8e91643b0a71e1f04a1b02f
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.
Georg Richter
Revert "Remove length checks in mthd_stmt_fetch_to_bind, keep only the sentinel"

This reverts commit 47a31a98750fd7c805ba67414c6d3df787ce8b2c.
  • cc-x-codbc-windows: 'dojob pwd if '3.4' == '3.4' ls win32/test SET TEST_DSN=master SET TEST_DRIVER=master SET TEST_PORT=3306 SET TEST_SCHEMA=odbcmaster if '3.4' == '3.4' cd win32/test if '3.4' == '3.4' ctest --output-on-failure' failed -  stdio
sjaakola
MDEV-36677 rsync sst fails with different innodb_log_group_home_dir and datadir

Backported the fix done by Pekka Lampio for mariaDB 11.4 in PR
https://github.com/mariadb-corporation/codership-mariadb-server/pull/543

The PR has a fix for wsrep_sst_rsync script and new mtr test:
galera_3nodes.galera_mdev_36677" to check that the rsync SST method of Galera
works correctly also when the joiner node store InnoDB log files in a dedicated
directory separate from the data dictionary

Note: merging this PR to 11.4 may not be fully functional as there are other
changes in the rsync SST script. Take a look at the original 11.4 PR when merging.
sjaakola
MDEV-38243 Write binlog row events for changes done by cascading FK operations

Fixes according to Kristian Nielsen's review:
* Removed obsolete checks for slave thread
* Supporting slave with old MariaDB version.
  Events logged in cascade operation are additionally flagged with
  the long-standing NO_FOREIGN_KEY_CHECKS_F, so a replica that does
  not understand FK_CASCADE_EVENTS_F still disables foreign key checks
  and  does not re-execute the cascade

Also, thee are now binlog event flags to mark both original and derived
events. This will make it possible for the slave to choose whether to use
the derived events in applying or to execute the cascade operation

There is a new test rpl.rpl_fk_cascade_binlog_row_old_slave, for checking
compatibility with replication slave of old mariadb version
Sergei Golubchik
MDEV-40445 TLS session resumption

* needs no application changes
* connector keeps a hash of connection key -> sessions and resumes
  sessions automatically when applicable
* session key includes everything that affects cert verification
  (because resumed session is not re-verified)
* openssl and gnutls support only, not schannel

Assisted-By: Claude:claude-5-opus
sjaakola
MDEV-38243 Write binlog row events for changes done by cascading FK operations

Refactoring according to Serg's review. In this version, SE/server API now
narrows the SE role to just report the changes done by foreign key cascading,
and server side does most of the work after that.

Added a design document MDEV-38243-design.md
sjaakola
MDEV-38243 Write binlog row events for changes done by cascading FK operations

This commit implements a feature which changes the handling of cascading foreign
key operations to write the changes of cascading operations into binlog.
The applying of such transaction, in the slave node, will apply just the binlog
events, and does not execute the actual foreign key cascade operation.
This will simplify the slave side replication applying and make it more predictable
in terms of potential interference with other parallel applying happning
in the node.

This feature can be turned ON/OFF by new variable:
rpl_use_binlog_events_for_fk_cascade, with default value OFF

The actual implementation is largely by windsurf.

The commit has also mtr tests for testing rpl_use_binlog_events_for_fk_cascade
feature:  rpl.rpl_fk_cascade_binlog_row, rpl.rpl_fk_set_null_binlog_row and
rpl.fk_cascade_binlog_row_rollback
Alexey Yurchenko
Merge branch '10.11' into MDEV-38147-missing-result-file
monthdev
MDEV-20749 Improve mysqlbinlog --flashback error reporting

Handle corrupted row events by reporting whether the field length could
not be determined from metadata or whether the field extends past the
row buffer instead of falling out through debug-only assertion paths
or ad hoc exits during flashback row conversion. Propagate flashback
conversion failures through the normal mysqlbinlog error path so debug
builds produce the intended diagnostics cleanly.

Add replication tests covering corrupted BLOB metadata and corrupted
BLOB length prefixes using server-side debug injection to write broken
binlog contents and mysqltest-friendly mysqlbinlog invocation patterns.

Reviewed-by: Brandon Nesterenko <[email protected]>
Reviewed-by: Georgi Kodinov <[email protected]>
Alexey Yurchenko
MDEV-38147 add missing result file for MDEV-38147_gtid_off test
Mohammad Tafzeel Shams
MDEV-39795: Assertion `n_reserved > 0' failed

Problem:
========

1. Assertion `n_reserved > 0` failed in fseg_create():

fsp_reserve_free_extents() has a special condition for small
tablespaces where it reserves individual pages instead of full
extents. In such cases, n_reserved can be 0 even when the
reservation succeeds, causing the assertion ut_ad(n_reserved > 0)
to fail incorrectly.

The code was checking n_reserved to determine whether a reservation
had already been attempted, but this logic breaks for small
tablespaces where pages, rather than extents, are reserved.

2. Encryption metadata not cleared for compressed-only pages:

buf_page_encrypt() only cleared encryption-related metadata
fields (key-version and crypt-checksum) when the page was
neither encrypted nor compressed. However, these fields should
also be cleared when page_compressed is true but encrypted is
false, to avoid leaving stale encryption metadata in
compressed-only pages.

Solution:
=========

buf_page_encrypt(): Refactored the early-return logic. Encryption
metadata fields are now cleared whenever encrypted is false,
regardless of page_compressed. The function returns early only
when both !encrypted and !page_compressed.

fseg_create(): Reintroduced a boolean variable `reserved` to track
whether fsp_reserve_free_extents() has been attempted (removed as
part of MDEV-38419 | c7313da), replacing assertion `n_reserved > 0`.
Added an early return when DB_DECRYPTION_FAILED is encountered
during inode allocation.

my_error_innodb(): Added handling for DB_DECRYPTION_FAILED to
report decryption errors to the user through ER_GET_ERRMSG.
Marko Mäkelä
MDEV-40756 Incorrect multi-batch recovery of file size

file_name_t::page0_lsn: Keep track of the last applied
recv_sys_t::parse_page0() so that a multi-batch recovery
will not reset the file to a smaller size.