- 03 Aug, 2018 20 commits
-
-
Marko Mäkelä authored
ha_innobase::inplace_alter_table(): Do nothing if INNOBASE_ALTER_INSTANT flags (such as DROP FOREIGN KEY) was present. Also, use ALTER_OPTIONS instead of the alias ALTER_CHANGE_CREATE_OPTION. This bug was caused by MDEV-11369, MDEV-13134 or related work.
-
Marko Mäkelä authored
-
Marko Mäkelä authored
rw_lock_get_debug_info(): Remove. This function is inherently unsafe to use, because the copied pointers can become stale between rw_lock_debug_mutex_exit() and the dereferencing of the pointer in the caller.
-
Marko Mäkelä authored
-
Marko Mäkelä authored
-
Marko Mäkelä authored
-
Marko Mäkelä authored
-
Oleksandr Byelkin authored
-
Marko Mäkelä authored
-
Marko Mäkelä authored
-
Marko Mäkelä authored
-
Marko Mäkelä authored
fts_query(): Remove a redundant condition (result will never be NULL), and instead check if *result is NULL, to prevent SIGSEGV in fts_query_free_result().
-
Marko Mäkelä authored
This concludes the merge of all applicable InnoDB changes from MySQL 5.7.23, with the exception of a performance fix, which we plan to rewrite in MariaDB later in such a way that it does not involve changing the storage engine API: MDEV-16849 Extending indexed VARCHAR column should be instantaneous
-
Marko Mäkelä authored
This is a port of an Oracle fix. No test case was provided by Oracle. It seems that to exploit this bug, one would have to SET foreign_key_checks=0 before TRUNCATE, and to concurrently run some DML statement that causes a foreign key constraint to be checked. commit 1f24c5aa2843fa548aa5c4b29c00f955e03e9f5b Author: Aditya A <aditya.a@oracle.com> Date: Fri May 18 12:32:37 2018 +0530 Bug #27208858 CONCURRENT DDL/DML ON FOREIGN KEYS CRASH IN PAGE_CUR_SEARCH_WITH_MATCH_BYTES
-
Marko Mäkelä authored
Similar to the tables SYS_FOREIGN and SYS_FOREIGN_COLS, the tables mysql.innodb_table_stats and mysql.innodb_index_stats are updated by the InnoDB internal SQL parser, which fails to enforce the size limits of the data. Due to this, it is possible for InnoDB to hang when there are persistent statistics defined on partitioned tables where the total length of table name, partition name and subpartition name exceeds the incorrectly defined limit VARCHAR(64). That column should have been defined as VARCHAR(199). btr_node_ptr_max_size(): Interpret the VARCHAR(64) as VARCHAR(199), to prevent a hang in the case that the upgrade script has not been run. dict_table_schema_check(): Ignore difference in the length of the table_name column. ha_innobase::max_supported_key_length(): For innodb_page_size=4k, return a larger value so that the table mysql.innodb_index_stats can be created. This could allow "impossible" tables to be created, such that it is not possible to insert anything into a secondary index when both the secondary key and the primary key are long, but this is the easiest and most consistent way. The Oracle fix would only ignore the maximum length violation for the two statistics tables. os_file_get_status_posix(), os_file_get_status_win32(): Handle ENAMETOOLONG as well. This patch is based on the following change in MySQL 5.7.23. Not all changes were applied, and our variant allows persistent statistics to work without hangs even if the table definitions were not upgraded. From fdbdce701ab8145ae234c9d401109dff4e4106cb Mon Sep 17 00:00:00 2001 From: Aditya A <aditya.a@oracle.com> Date: Thu, 17 May 2018 16:11:43 +0530 Subject: [PATCH] Bug #26390736 THE FIELD TABLE_NAME (VARCHAR(64)) FROM MYSQL.INNODB_TABLE_STATS CAN OVERFLOW. In mysql.innodb_index_stats and mysql.innodb_table_stats tables the table name column didn't take into consideration partition names which can be more than varchar(64).
-
Marko Mäkelä authored
When MySQL 5.7.1 introduced WL#6326 to reduce contention on the non-leaf levels of B-trees, it introduced a new rw-lock mode SX (not conflicting with S, but conflicting with SX and X) and new rules to go with it. A thread that is holding an dict_index_t::lock aka index->lock in SX mode is permitted to acquire non-leaf buf_block_t::lock aka block->lock X or SX mode, in monotonically descending order. That is, once the thread has acquired a block->lock, it is not allowed to acquire a lock on its parent or grandparent pages. Such arbitrary-order access is only allowed when the thread acquired the index->lock in X mode upfront. A customer encountered a repeatable hang when loading a dump into InnoDB while using multiple innodb_purge_threads (default: 4). The dump makes very heavy use of FOREIGN KEY constraints. By luck, it happened so that two purge worker threads (srv_worker_thread) deadlocked with each other. Both were operating on the index FOR_REF of the InnoDB internal table SYS_FOREIGN. One of them was legitimately holding index->lock S-latch and the root block->lock S-latch. The other had acquired index->lock SX-latch, root block->lock SX-latch, and a bunch of other latches, including the fil_space_t::latch for freeing some blocks and some leaf page latches. This other thread was inside 2 nested calls to btr_compress() and it was trying to reacquire the root block->lock in X mode, violating the WL#6326 protocol. This violation led to a deadlock, because while S is compatible with SX and a thread can upgrade an SX lock to X when there are no conflicting requests, in this case there was a conflicting S lock held by the other purge worker thread. During this deadlock, both threads are holding dict_operation_lock S-latch, which would block any subsequent DDL statements, such as CREATE TABLE. The tables SYS_FOREIGN and SYS_FOREIGN_COLS are special in that they define key columns of the type VARCHAR(0), created using the InnoDB internal SQL parser. Because InnoDB does not internally enforce the maximum length of columns, it would happily write more than 0 bytes to these columns. This caused a miscalculation of node_ptr_max_size. btr_cur_will_modify_tree(): Clean up some code. (No functional change.) btr_node_ptr_max_size(): Renamed from dict_index_node_ptr_max_size(). Use a more realistic maximum size for SYS_FOREIGN and SYS_FOREIGN_COLS. btr_cur_pessimistic_delete(): Refrain from merging pages if it is not safe. This work is based on the following MySQL 5.7.23 fix: commit 58dcf0b4a4165ed59de94a9a1e7d8c954f733726 Author: Aakanksha Verma <aakanksha.verma@oracle.com> Date: Wed May 9 18:54:03 2018 +0530 BUG#26225783 MYSQL CRASH ON CREATE TABLE (REPRODUCEABLE) -> INNODB: A LONG SEMAPHORE WAIT
-
Allen Lai authored
fsync() will just return EIO only once when the IO error happens, so, it's wrong to keep trying to call it till it return success. When fsync() returns EIO it should be treated as a hard error and InnoDB must abort immediately.
-
Sergey Vojtovich authored
trx_set_rw_mode() is never called for read-only transactions, this is guarded by callers. Removing this condition from critical section immediately gives 5% scalability improvement in OLTP index updates benchmark.
-
Marko Mäkelä authored
-
Alexander Barkov authored
This problem was earlier fixed by the patch for MDEV-15340. Adding tests only.
-
- 02 Aug, 2018 6 commits
-
-
Oleksandr Byelkin authored
-
Oleksandr Byelkin authored
-
Michael Widenius authored
-
Rasmus Johansson authored
-
Alexander Barkov authored
MDEV-16878 Functions ADDTIME and SUBTIME get wrongly removed from WHERE by the equal expression optimizer
-
Marko Mäkelä authored
-
- 01 Aug, 2018 5 commits
-
-
Daniel Bartholomew authored
-
Vladislav Vaintroub authored
Compile on Windows MSVC with -DHAVE_SSE2 and -DHAVE_PCLMUL It is safe, since code will do also runtime checks via cpuid(), before using the instructions, and will fallback to slower versions, if instructions are not available.
-
Marko Mäkelä authored
-
Marko Mäkelä authored
The functions fts_ast_visit() and fts_query() inside InnoDB FULLTEXT INDEX query processing are not checking for THD::killed (trx_is_interrupted()), like anything that potentially takes a long time should do. This is a port of the following change from MySQL 5.7.23, with a completely rewritten test case. commit c58c6f8f66ddd0357ecd0c99646aa6bf1dae49c8 Author: Aakanksha Verma <aakanksha.verma@oracle.com> Date: Fri May 4 15:53:13 2018 +0530 Bug #27155294 MAX_EXECUTION_TIME NOT INTERUPTED WITH FULLTEXT SEARCH USING MECAB
-
Marko Mäkelä authored
-
- 31 Jul, 2018 4 commits
-
-
Alexey Botchkov authored
Incorrect char sentence should be handled properly.
-
Marko Mäkelä authored
-
Elena Stepanova authored
-
Oleksandr Byelkin authored
-
- 30 Jul, 2018 5 commits
-
-
Marko Mäkelä authored
This is a backport of the following fix from MySQL 5.7.23. Some code refactoring has been omitted, and the test case has been adapted to MariaDB. commit 7a689acaa65e9d602575f7aa53fe36a64a07460f Author: Krzysztof Kapuścik <krzysztof.kapuscik@oracle.com> Date: Tue Mar 13 12:34:03 2018 +0100 Bug#27082268 Invalid FTS sync synchronization The fix closes two issues: Bug #27082268 - INNODB: FAILING ASSERTION: SYM_NODE->TABLE != NULL DURING FTS SYNC Bug #27095935 - DEADLOCK BETWEEN FTS_DROP_INDEX AND FTS_OPTIMIZE_SYNC_TABLE Both issues were related to a FTS cache sync being done during operations that perfomed DDL actions on internal FTS tables (ALTER TABLE, TRUNCATE). In some cases the FTS tables and/or internal cache structures could get removed while still being used to perform FTS synchronization leading to crashes. In other the sync operations could not get finishes as it was waiting for dict lock which was taken by thread waiting for the background sync to be finished. The changes done includes: - Stopping background operations during ALTER TABLE and TRUNCATE. - Removal of unused code in FTS. - Cleanup of FTS sync related code to make it more readable and easier to maintain. RB#18262
-
Marko Mäkelä authored
We did not merge Percona XtraDB 5.6.40-84.0 yet. The changes in it are mostly cosmetic, except for 2 bug fixes from Oracle MySQL 5.6.40, which could be security bugs. This was achieved by taking the applicable parts of an earlier InnoDB commit to XtraDB: git diff 15ec8c2f{~,} storage/innobase| sed -e s+/innobase/+/xtradb/+|patch -p1
-
Marko Mäkelä authored
-
Karthik Kamath authored
No commit message
-
Marko Mäkelä authored
-