Console View
|
Categories: connectors experimental galera main |
|
| connectors | experimental | galera | main | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
|
|
|
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
Oleksandr Byelkin
sanja@mariadb.com |
|
|
|
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| Merge branch '10.6' into 10.11 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
Sergei Golubchik
serg@mariadb.org |
|
|
|
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
MDEV-40229 I_S.VECTOR_INDEXES: Unclear or inconsistent semantics of INDEX_SIZE 11.8 fix for I_S.TABLES.INDEX_LENGTH column Take into account both data_file_length and index_file_length, they both take space and both belong to the vercor index. |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
Daniel Black
daniel@mariadb.org |
|
|
|
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
sql_test: mallinfo2 msan exclusion no longer needed MSAN interceptor was added in clang-18.1. |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
Fariha Shaikh
farihais@amazon.com |
|
|
|
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
MDEV-33660 Add note when setting AUTO_INCREMENT lower than next value Currently, ALTER TABLE ... AUTO_INCREMENT = N silently fails when using values lower than the next AUTO_INCREMENT value in the column. Add a note when attempting to set AUTO_INCREMENT to a lower value than the next AUTO_INCREMENT value, and maintain the higher value. Update existing test suites and add a new test to the maria suite for the newly added note. 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. |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
Dave Gosselin
dave.gosselin@mariadb.com |
|
|
|
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
MDEV-39441: Add dbug_print() helpers for join-related types Introduces new dbug_print() functions for the following types: dbug_print(NESTED_JOIN) dbug_print(JOIN) dbug_print(TABLE_LIST) dbug_print(JOIN_TAB) dbug_print(List<Item>) Typically pointers to instances of the given types are passed. The dbug_print(List<Item>) is intended to show result row before sending to client (e.g., invoke in debugger while tracing end_send) but may work in other contexts. These functions produce nicely formatted output, please use them in conjunction with the formatted printfs available in GDB or LLDB: (gdb) printf "%s", dbug_print(join_tab) (lldb) p printf("%s", dbug_print(table)) Example output from dbug_print(JOIN) in LLDB. The last line with value 1302 is the number of characters produced by the printf command. (lldb) p printf("%s",dbug_print(join)) JOIN [0x15801bfe8] table_count=3 const_tables=0 join_list 0x158018340 [1 element(s)]: --- #0 --- [0x15801af10] "(nest_last_join)" join=INNER (outer_join=0) nested_join=0x15801b618 (elements=2) NESTED_JOIN [0x15801b618] used_tables: 0x0 not_null_tables: 0x0 n_tables: 0 counter: 0 nest_type: 1 (JOIN_OP_NEST) nj_map: 0x0 join_list: join_list 0x15801b618 [2 element(s)]: --- #0 --- [0x15801a308] "t3" join=LEFT (outer_join=1) map=0x4 ON: `test`.`t2`.`a` = `test`.`t3`.`a` --- #1 --- [0x158019b30] "(nest_last_join)" join=INNER (outer_join=0) nested_join=0x15801a238 (elements=2) NESTED_JOIN [0x15801a238] used_tables: 0x0 not_null_tables: 0x0 n_tables: 0 counter: 0 nest_type: 0 nj_map: 0x0 join_list: join_list 0x15801a238 [2 element(s)]: --- #0 --- [0x1580187c0] "t1" join=RIGHT (outer_join=2) map=0x1 ON: `test`.`t1`.`a` = `test`.`t2`.`a` --- #1 --- [0x158018f08] "t2" join=INNER (outer_join=0) map=0x2 (int) 1302 |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
Daniel Black
daniel@mariadb.org |
|
|
|
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
MDEV-17846 Wrong result with grouping select (fix) Prevent unused variable 'ref_type' warnings on non-debug builds. |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
Yuchen Pei
ycp@mariadb.com |
|
|
|
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
MDEV-40486 Length check for vector fields in CREATE TABLE ... SELECT The changes of MDEV-39558 2b6529426a7e7c65d286e093d84138be9dcc34a3 added length check assertion in Field_varstring constructors, and length check in type inference for SELECT set operations, to emit errors before reaching the assertions. That change caused an error to turn into an assertion failure in a separate path, when the length limit violation is not detected before tripping the assertion. So in this patch we fix it by adding an earlier length check in that path. The reason that we place this check inside Item_func_vec_fromtext::fix_length_and_dec rather than say `create_field_for_create_select is for consistency: If create table t1 as select vec_fromtext(concat('[',group_concat(1),']')) as c1 from seq_1_to_64; fails due to length limit violation, then so should create table t1 (v vector(64) not null); insert into t1 select vec_fromtext(concat('[',group_concat(1),']')) from seq_1_to_64; Also use max_char_length() instead of max_length. This is a more accurate length of characters. And add handling of empty string edge case. Added testcases accordingly. The change that uses max_char_length() causes side effects where creating a table using a VEC_FROMTEXT(CHAR(1)) would result in a 0-dimensional vector field. This is accurate but 0-dim vector table fields should not be allowed. So we make cases like this result in a one-dimensional field. Also fixed the underflow in (args[0]->max_length - 1) * 2 when the arg's max length is 0. Previously this underflow would cause create table t1 select vec_fromtext(NULL) to fail with ER_TOO_BIG_FIELDLENGTH. Now it will be a VECTOR(1) field |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
Marko Mäkelä
marko.makela@mariadb.com |
|
|
|
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
fixup! 676bf8b7f8cd13d60ddce09c2d88c870198b5de5 No O_DIRECT in InnoDB_backup::replicate() |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
nada
nadaelsayed163@gmail.com |
|
|
|
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
MDEV-38829: Fix semisync assertion on failed direct binlog write MYSQL_BIN_LOG::write() guarded semisync registration (report_binlog_update) on the direct-write path with if (!error), but did not apply the same guard to the subsequent wait_after_sync() call. When the write failed before registering the transaction, wait_after_sync() still ran and looked for the transaction in the Active_tranx list, found nothing, and tripped the DBUG_ASSERT in commit_trx() that assumes a missing entry can only be caused by semisync having been switched off and on. |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
Alessandro Vetere
iminelink@gmail.com |
|
|
|
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
MDEV-41694 Read view after DDL returns wrong data when the table definition was reloaded dict_index_t::trx_id exists only in memory. After a table was evicted from the InnoDB data dictionary cache and loaded again, it was 0, so an old read view could use indexes whose data was replaced by DDL. The old read view then got wrong data after ALTER TABLE ... ALGORITHM=COPY, a table rebuild, ADD INDEX, TRUNCATE TABLE and IMPORT TABLESPACE, instead of ER_TABLE_DEF_CHANGED. dict_load_indexes(): Restore dict_index_t::trx_id from the DB_TRX_ID of the SYS_INDEXES record, except for a discarded tablespace, which cannot be read anyway. RENAME INDEX also updates the record, so after a reload an old read view cannot use a renamed index either. innodb.mvcc_ddl_evict runs a matrix of DDL statements against an old read view. The combination evict evicts the table from the InnoDB data dictionary cache by innodb_evict_tables_on_commit_debug before the read. The .rdiff of this combination shows the RENAME INDEX difference. Assisted-by: Claude:claude-opus-5-5 |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
Alessandro Vetere
iminelink@gmail.com |
|
|
|
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
MDEV-41694 Read view after DDL returns wrong data when the table definition was reloaded dict_index_t::trx_id exists only in memory. After a table was evicted from the InnoDB data dictionary cache and loaded again, it was 0, so an old read view could use indexes whose data was replaced by DDL. The old read view then got wrong data after ALTER TABLE ... ALGORITHM=COPY, a table rebuild, ADD INDEX, TRUNCATE TABLE and IMPORT TABLESPACE, instead of ER_TABLE_DEF_CHANGED. dict_load_indexes(): Restore dict_index_t::trx_id from the DB_TRX_ID of the SYS_INDEXES record, except for a discarded tablespace, which cannot be read anyway. RENAME INDEX also updates the record, so after a reload an old read view cannot use a renamed index either. innodb.mvcc_ddl_evict runs a matrix of DDL statements against an old read view. The combination evict evicts the table from the InnoDB data dictionary cache by innodb_evict_tables_on_commit_debug before the read. The .rdiff of this combination shows the RENAME INDEX difference. Assisted-by: Claude:claude-opus-5-5 |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
drrtuy
drrtuy@gmail.com |
|
|
|
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| chore: remove jemalloc extension from DuckDB CMake b/c since 1.5.4 is is a part of DuckDB core. | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
Daniel Black
daniel@mariadb.org |
|
|
|
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
MDEV-40801 ppc64le ro_after_init isn't pagesize aligned Align ro_after_init using MAXPAGESIZE instead of COMMONPAGESIZE. COMMONPAGESIZE may be smaller than the actual page size supported by the target ABI. This can leave ro_after_init sharing an OS page with adjacent sections, causing mprotect() to change permissions on data outside ro_after_init. Use MAXPAGESIZE so the section boundaries are aligned to the maximum page size required by the target linker/ABI. This is particularly important on architectures such as ppc64le and aarch64, where the runtime page size can differ from COMMONPAGESIZE. Before: .data 0x...1b80000 ro_after_init 0x...1c70000 .bss 0x...1c72000 After: ro_after_init starts and ends on MAXPAGESIZE boundaries, ensuring mprotect() only affects pages belonging to ro_after_init. Co-authored-by: ChatGPT GPT-5.6 Luna <[email protected]> |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
Marko Mäkelä
marko.makela@mariadb.com |
|
|
|
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
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. Reviewed by: Thirunarayanan Balathandayuthapani |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
Daniel Black
daniel@mariadb.org |
|
|
|
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
MDEV-40243 Fix MEMORY_LEAK_C leaks in mariadb-dump (rockdb tests) With memory leaks fixed in the rocksdb.mysqldump/mysqldump2 no longer need to run with leak detection disabled. There tests are still disabled as there's no --rockdb arg to mariadb-dump, but removing so there's no precidence to ignoring leaks. ref: 2217477fb8fc82f4921d9d13afcd24b1d86b34d6 |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
Daniel Black
daniel@mariadb.org |
|
|
|
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
MDEV-40750 gcc-16.1.0 on ppc64 causes innodb to fail to compile Assembler comes up with the error: unrecognized opcode: `dcbstps' dcbstps is a Power 10 instruction. The default target arch on most platforms is Power 8 or 9. Added the target power10 to the function pmem_phwsync. The execution of this function is gated on the ISA 3.1 in pmem_persist_init so there's no chance of a SIGILL. clang supports this target as arch=pwr10 and gcc as cpu=power10. Revert back to using opcodes for old versions. |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
Anway Durge
durgeanway@gmail.com |
|
|
|
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
MDEV-38899: Fix assertion in prepare_record() with RBR NOBLOB and UNIQUE BLOB Problem: When using RBR with binlog_row_image=NOBLOB, a table with a UNIQUE constraint on a BLOB NOT NULL column causes a debug assertion failure in prepare_record() on the slave: DBUG_ASSERT(!((f->flags & NO_DEFAULT_VALUE_FLAG) && f->vcol_info)) A UNIQUE index on a BLOB creates a hidden virtual column (hash). This vcol inherits NOT NULL and receives NO_DEFAULT_VALUE_FLAG. When the blob is excluded from the NOBLOB row image, the assertion fires. Fix: Virtual columns compute their own values and never use the default-value mechanism. Skip them in the missing-default check inside prepare_record(), mirroring has_no_default_value(). Remove the invalid assertion. Regression introduced by: MDEV-36290 |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
Daniel Black
daniel@mariadb.org |
|
|
|
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
RocksDB: compile fix std::replace requires algorithm header Otherwise it compile fails. Found in clang-24. |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
Daniel Black
daniel@mariadb.org |
|
|
|
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
MDEV-40749 period.create test leaks/faults in asan Selecting from the information_schema.plugins causes the loading of all plugins. Because rockdb leaks, and duckdb triggers an address sanitizer warning on shutdown avoid this table. Use the information_schema.ENGINES to validate that InnoDB is disabled per the original request in the review of MDEV-32205. |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
Thirunarayanan Balathandayuthapani
thiru@mariadb.com |
|
|
|
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
MDEV-41665 InnoDB assertion with result != FTS_INVALID on DELETE IGNORE with FK cascades on tables with FULLTEXT indexes Problem: ======= A foreign key cascade records its FTS operations (FTS_DELETE, FTS_INSERT) with fts_trx_add_op() while the cascade is still being processed, before it is known whether the row operation succeeds. If the row operation then fails with an error that the statement survives, row_mysql_handle_errors() rolls back the data to the row savepoint. The FTS state is not rolled back, because fts_savepoint_rollback_last_stmt() is only called when the whole statement is rolled back. The stale FTS operations stay in trx->fts_trx. When the next row cascades into the same child row, the same operation is recorded again and fts_trx_row_get_new_state() hits an invalid transition (FTS_DELETE -> FTS_DELETE), which crashes the server. Solution: ======== Make the buffered FTS changes follow the undo log numbering, like trx_t::mod_tables. fts_trx_t now only holds the tables modified by the transaction. Each fts_trx_table_t has a vector of operations. Every operation records the document id, the new row state and trx_t::undo_no at the time of fts_trx_add_op(). Operations are appended and no longer merged. trx_t::rollback_low(savept) calls the new fts_trx_rollback(), which removes from the end of each table's vector the operations whose undo_no is greater than the savepoint, and removes the tables that become empty. A row is recorded after its change, so its operations are newer than the savepoint that was taken before the row, while the operations of earlier successful rows are not. Failed rows, statement rollback and ROLLBACK TO SAVEPOINT are all handled by this one mechanism. fts_commit_table() builds the per-document row states from the operations, using the existing state transitions, and the rest of the commit is unchanged. Remove the fts_savepoint_*() functions, fts_undo_last_stmt() and the savepoint copying, together with their calls in ha_innodb.cc. SAVEPOINT no longer copies all buffered rows. |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
Aleksey Midenkov
midenok@gmail.com |
|
|
|
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
MDEV-40821 SIGSEGV in Window_funcs_sort::setup Window_funcs_sort failed accessing win_func->window_spec as window spec was not defined in the query. Usually this is checked by fixing item win_func, but it was not done by vers_setup_conds(). Actually, earlier check by vers_setup_conds() must fail on DELETE HISTORY from non-versioned table, but TABLE_LIST for t1 has no versioning conditions. The cause was the parser assigning versioning conditions to wrong table pointed by last_table() which was already switched to another table from SYSTEM_TIME expression (cs1). It is fixed by the 10.11 commit of MDEV-40821, this commit adds the tests. DELETE ... FOR PORTION OF with index hints is converted to multi-table, same as with a subquery on the target table, which is prohibited by the 11.4 commit of MDEV-40821. Tests added for index hints. Warning WARN_INDEX_HINTS_IGNORED now names the clause the index hints are incompatible with: RETURNING or FOR PORTION OF. |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
Alexander Barkov
bar@mariadb.com |
|
|
|
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
MDEV-28498 Incorrect information in file: './test/t0.frm' on CREATE TABLE Applying HEX encoding write writting an ENUM/SET TYPELIB to FRM if the TYPELIB has 0x00 bytes in the value. This HEX encoding was earlier used only to write UCS2/UTF16/UTF32 TYPELIBs. A new flag FIELDFLAG_FRM_HEX_ENCODED_TYPELIB was added to indicate that the TYPELIB is hex encoded. It's used only inside FRM. Note, it's mangled with FIELDFLAG_TREAT_BIT_AS_CHAR. This should not be harmful: - BIT and ENUM/SET columns are handled by two separate code branches when opening an FRM - The flag is unset immediately after decoding TYPELIB, so the rest of the code does not se an unexpected flag combination. |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
Aleksey Midenkov
midenok@gmail.com |
|
|
|
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
MDEV-41849 Killed query reports ER_NOT_FORM_FILE for a table with virtual column expressions Since MDEV-37938 the lexer stops on kill: it sends the kill message and returns END_OF_INPUT. parse_sql() fails only if the grammar rejects the text read so far. When a query is killed while a table is opened, the parse of a vcol expression or partitioning clause from the .frm fails, and open_table_from_share() reports ER_NOT_FORM_FILE after the kill error, as if the .frm were corrupted. The grammar also adds ER_EMPTY_QUERY or ER_PARSE_ERROR. A killed parallel slave worker shows these errors in Last_SQL_Error. Table discovery replaces the kill error with ER_SQL_DISCOVER_ERROR. The event scheduler logs an error during compilation of the event. A kill while trigger bodies are parsed marks the triggers as broken, and DML on the table fails until FLUSH TABLES. If the kill comes after a part that is valid on its own (a in a + 1), the parse succeeds and the cut-short text is used. This applies to any text parsed by parse_sql(). The fix makes parse_sql() fail when the lexer stopped on kill and reports only the kill error: the grammar adds no errors, open_table_from_share() does not report ER_NOT_FORM_FILE, discovery keeps the kill error, the event scheduler logs only the kill error, and triggers are not marked as broken. Lex_input_stream gets ignore_kill, stopped_on_kill and fail_if_stopped_on_kill(), used in this order: 1. The caller sets ignore_kill before the parse. 2. The lexer checks ignore_kill. If it is not set and the thread is killed with an error, the lexer raises the kill error, stops and sets stopped_on_kill. 3. After the parse, fail_if_stopped_on_kill() reads stopped_on_kill and fails the parse. ignore_kill is set when triggers are loaded for their names only (DROP TABLE, RENAME TABLE, I_S.TRIGGERS): they need every trigger name, e.g. for the .TRN files, and a parse stopped by the kill loses the name. ABORT_QUERY and KILL_BAD_DATA have no kill error, so the lexer does not stop on them and reads the whole text, as before MDEV-37938. Table_triggers_list::check_n_load() deletes the triggers loaded so far on every error, which also fixes their leak on out-of-memory errors. |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
Oleksandr Byelkin
sanja@mariadb.com |
|
|
|
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| Merge branch '11.4' into 11.8 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
Aleksey Midenkov
midenok@gmail.com |
|
|
|
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
MDEV-39968 sys_vars.session_track_system_variables_basic fail - Plugin is busy (cursor/ps-protocol) The MDEV-38179 part of the test installs ha_example, connects foo with example_int_var in session_track_system_variables, then does disconnect foo and uninstall soname 'ha_example.so'. On connect, the sysvars tracker parses the list with find_sys_var(), which locks the example plugin into thd->lex->plugins. Under ps-protocol and cursor-protocol foo runs only prepared statements, so these locks are not released by end of statement and stay until plugin_thdvar_cleanup() at disconnect. Since disconnect does not wait for the server thread to finish, uninstall may find the plugin still referenced and gives "Plugin is busy and will be uninstalled on shutdown". MDEV-39968 was closed as a duplicate of MDEV-39207, but the MDEV-39207 test fix covered only the 10.11 ha_example part: it moved it to session_track_system_variables_example.test with ps-protocol and cursor-protocol disabled around uninstall. The MDEV-38179 part added in 11.8 stayed in session_track_system_variables_basic.test without any workaround, so it still fails. The fix waits until foo sessions are gone before uninstall. |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
Thirunarayanan Balathandayuthapani
thiru@mariadb.com |
|
|
|
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
MDEV-41665 InnoDB assertion with result != FTS_INVALID on DELETE IGNORE with FK cascades on tables with FULLTEXT indexes Problem: ======= A foreign key cascade records its FTS operations (FTS_DELETE, FTS_INSERT) with fts_trx_add_op() while the cascade is still being processed, before it is known whether the row operation succeeds. If the row operation then fails with an error that the statement survives, row_mysql_handle_errors() rolls back the data to the row savepoint. The FTS state is not rolled back, because fts_savepoint_rollback_last_stmt() is only called when the whole statement is rolled back. The stale FTS operations stay in trx->fts_trx. When the next row cascades into the same child row, the same operation is recorded again and fts_trx_row_get_new_state() hits an invalid transition (FTS_DELETE -> FTS_DELETE), which crashes the server. Solution: ======== Make the buffered FTS changes follow the undo log numbering, like trx_t::mod_tables. fts_trx_t now only holds the tables modified by the transaction. Each fts_trx_table_t has a vector of operations. Every operation records the document id, the new row state and trx_t::undo_no at the time of fts_trx_add_op(). Operations are appended and no longer merged. trx_t::rollback_low(savept) calls the new fts_trx_rollback(), which removes from the end of each table's vector the operations whose undo_no is greater than the savepoint, and removes the tables that become empty. A row is recorded after its change, so its operations are newer than the savepoint that was taken before the row, while the operations of earlier successful rows are not. Failed rows, statement rollback and ROLLBACK TO SAVEPOINT are all handled by this one mechanism. fts_commit_table() builds the per-document row states from the operations, using the existing state transitions, and the rest of the commit is unchanged. Remove the fts_savepoint_*() functions, fts_undo_last_stmt() and the savepoint copying, together with their calls in ha_innodb.cc. SAVEPOINT no longer copies all buffered rows. |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
Georgi (Joro) Kodinov
joro@mariadb.org |
|
|
|
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| more doxygen formatting added. | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
sjaakola
seppo.jaakola@mariadb.com |
|
|
|
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
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. |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
Daniel Black
daniel@mariadb.org |
|
|
|
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
MDEV-37224 Remove UBSAN limitation from MTR tests Having a not_ubsan.inc as a test case exclusion mechanism is allowing developers to ignore UBSAN issues. As undefined behaviour detected at runtime or compile time isn't acceptable in the code base, remove the exclusion. The lotofstack test, the only user of not_ubsan.inc, has this exclusion because the stack size under UBSAN lacks predictability. Adjust its exclusion because of this criteria, and not its UBSAN status. Reviewer: Jimmy Hu <[email protected]> |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
Alexey Yurchenko
alexey.yurchenko@mariadb.com |
|
|
|
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| Merge branch '10.11' into MDEV-38147-missing-result-file | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
Daniel Black
daniel@mariadb.org |
|
|
|
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
MDEV-38405 Assertion `tbl->trn == 0' failed in _ma_set_trn_for_table Aria bulk insert operations disables share->now_transaction meaning a concurrent open of the stable table will have trn == &dummy_transaction_object for its MARIA_HA object during opening. As the _ma_set_trn_for_table is setting the trn, its harmless if the current trn is the dummy_transaction_object. Relax the assert to allow for this state. |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
Marko Mäkelä
marko.makela@mariadb.com |
|
|
|
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| fixup! a1c3c50c9222346f1afe816ffc32b85227012a59 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
Marko Mäkelä
marko.makela@mariadb.com |
|
|
|
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| fixup! 676bf8b7f8cd13d60ddce09c2d88c870198b5de5 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
Sergei Golubchik
serg@mariadb.org |
|
|
|
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
rocksdb: don't abort early in submodule update Fix for 1fb075512a7aeab8646a163cbb6f265c49f4c075 to allow the ADD_SUBMODULE to perform updates. |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
Oleksandr Byelkin
sanja@mariadb.com |
|
|
|
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| Merge branch '10.11' into 11.4 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
Daniel Black
daniel@mariadb.org |
|
|
|
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
MDEV-34482 main.events_processlist test fix As the test result is dependent of SHOW PROCESSLIST output, adjust the wait condition to ensure the state is in sleeping rather than "init" or another state. |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
Alexey Yurchenko
alexey.yurchenko@mariadb.com |
|
|
|
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| MDEV-38147 add missing result file for MDEV-38147_gtid_off test | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
Mohammad Tafzeel Shams
tafzeel.shams@mariadb.com |
|
|
|
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
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. |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
Sergei Petrunia
sergey@mariadb.com |
|
|
|
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
MDEV-41841 OOB read on loose index scan of MIN/MAX with IS [NOT] NULL Truly set the QUICK_RANGE structure properly. |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||