- 01 Feb, 2018 10 commits
-
-
Marko Mäkelä authored
The algorithm change is based on a MySQL 8.0 fix for BUG #26818787: ASSERTION: DATA0DATA.IC:430:TUPLE by Krzysztof Kapuścik https://github.com/mysql/mysql-server/commit/ee606e62bbddd7ac3579b4a20ef8684fa7cd83fe If a record had been inserted in place of a delete-marked purgeable record by modifying that record, and purge was accessing that record before the off-page columns were written, row_build_index_entry() would have returned NULL, causing a crash. row_vers_non_virtual_fields_equal(): Check whether all non-virtual fields of an index are equal. Replaces row_vers_non_vc_match(). A more complex version of this function was called row_vers_non_vc_index_entry_match() in the MySQL 8.0 fix. row_vers_impl_x_locked_low(): This change is not directly related to the reported problem, but apparently to the removal of the function row_vers_non_vc_match(). This function checks if a secondary index record was modified by a transaction that has not been committed yet. For comparing the non-virtual columns, construct a secondary index tuple from the table row. row_vers_vc_matches_cluster(): Replace row_vers_non_vc_match() with code that is equivalent to the row_vers_non_vc_index_entry_match() in the MySQL 8.0 fix. Also, deduplicate some code by using goto.
-
Marko Mäkelä authored
The comment that I made in commit 06299ddd is inaccurate. Replace the comment, and make the assertion debug-only, because I cannot remember any reports of it ever failing in these 10 years.
-
Marko Mäkelä authored
If crypt_block != NULL the entire object crypt_pfx should be guaranteed to be initialized, including m_size, which will have been initialized either in allocate_large(), either directly or via allocate_trace().
-
Marko Mäkelä authored
Do not call mtr_t::start() with trx_t*.
-
Vladislav Vaintroub authored
-
Vladislav Vaintroub authored
-
Vladislav Vaintroub authored
-
Jan Lindström authored
Test seems to pass fine.
-
Vladislav Vaintroub authored
-
Vladislav Vaintroub authored
-
- 31 Jan, 2018 3 commits
-
-
Daniel Black authored
Also use the group pointer previously allocated.
-
Marko Mäkelä authored
When InnoDB has completed the rollback of a recovered transaction, it used to display the transaction identifier. This was broken in MySQL 5.7.2 in https://github.com/mysql/mysql-server/commit/2f5f3cd3ac46d46c7635e778b338f63b5521cd46 which was merged to MariaDB 10.2.2 in commit 2e814d47. trx_rollback_active(): Cache the transaction ID before it will be reset by transaction commit. Do not display the message if the rollback was interrupted by shutdown (MDEV-13797, MDEV-12352).
-
Oleksandr Byelkin authored
Setting non_null value drops null_value flag. Part 1 of 3. Part 2 will be for 10.3 including change of ps.test results. Part 3 is test for Connector C.
-
- 30 Jan, 2018 4 commits
-
-
Vladislav Vaintroub authored
Fixes "uninitialized variable used" crashes (Windows compiled for debug e.g /RTC1 option) Also enable roles suite on buildbot.
-
Marko Mäkelä authored
If a crash occurs during ALTER TABLE…ALGORITHM=COPY, InnoDB would spend a lot of time rolling back writes to the intermediate copy of the table. To reduce the amount of busy work done, a work-around was introduced in commit fd069e2b in MySQL 4.1.8 and 5.0.2, to commit the transaction after every 10,000 inserted rows. A proper fix would have been to disable the undo logging altogether and to simply drop the intermediate copy of the table on subsequent server startup. This is what happens in MariaDB 10.3 with MDEV-14717,MDEV-14585. In MariaDB 10.2, the intermediate copy of the table would be left behind with a name starting with the string #sql. This is a backport of a bug fix from MySQL 8.0.0 to MariaDB, contributed by jixianliang <271365745@qq.com>. Unlike recent MySQL, MariaDB supports ALTER IGNORE. For that operation InnoDB must for now keep the undo logging enabled, so that the latest row can be rolled back in case of an error. In Galera cluster, the LOAD DATA statement will retain the existing behaviour and commit the transaction after every 10,000 rows if the parameter wsrep_load_data_splitting=ON is set. The logic to do so (the wsrep_load_data_split() function and the call handler::extra(HA_EXTRA_FAKE_START_STMT)) are joint work by Ji Xianliang and Marko Mäkelä. The original fix: Author: Thirunarayanan Balathandayuthapani <thirunarayanan.balathandayuth@oracle.com> Date: Wed Dec 2 16:09:15 2015 +0530 Bug#17479594 AVOID INTERMEDIATE COMMIT WHILE DOING ALTER TABLE ALGORITHM=COPY Problem: During ALTER TABLE, we commit and restart the transaction for every 10,000 rows, so that the rollback after recovery would not take so long. Fix: Suppress the undo logging during copy alter operation. If fts_index is present then insert directly into fts auxiliary table rather than doing at commit time. ha_innobase::num_write_row: Remove the variable. ha_innobase::write_row(): Remove the hack for committing every 10000 rows. row_lock_table_for_mysql(): Remove the extra 2 parameters. lock_get_src_table(), lock_is_table_exclusive(): Remove. Reviewed-by: Marko Mäkelä <marko.makela@oracle.com> Reviewed-by: Shaohua Wang <shaohua.wang@oracle.com> Reviewed-by: Jon Olav Hauglid <jon.hauglid@oracle.com>
-
Jan Lindström authored
Fortify wsrep_hton so that wsrep calls are not done to NULL-pointers.
-
Monty authored
- Galera tests that was not updated with connection change messages - Disabled some TokuDB tests that always timed out. These should be enabled again when we have an option to specicy timeouts per tests.
-
- 29 Jan, 2018 3 commits
-
-
Marko Mäkelä authored
Do not SET DEBUG_DBUG=-d,... in tests. To disable debug instrumentation, save and restore the original value of the variable DEBUG_DBUG. Assigning -d,... will enable the output of a lot of unrelated DBUG messages to the server error log.
-
Marko Mäkelä authored
This reverts commit 3486135b. The commit comment ended in the words: "This is needed later." Apparently the "later" never arrived.
-
Vladislav Vaintroub authored
Solve 3 way deadlock between plugin_initialiaze(), THD::init() and mysql_sys_var_char(). The deadlock exists because of the lock order inversion between LOCK_global_system_variables mutex and LOCK_system_variables_hash read-write lock- In this case, it is enough to change LOCK_system_variables_hash to prefer reads to fix the deadlock, i.e change it to mysql_prlock_t
-
- 28 Jan, 2018 1 commit
-
-
Marko Mäkelä authored
-
- 27 Jan, 2018 3 commits
-
-
Monty authored
Only warnings, should not have caused any bugs in old code
-
Monty authored
I disabled rocksdb in ASAN build as I got a link error when it's included
-
Andrei Elkin authored
replicate_events_marked_for_skip=FILTER_ON_MASTER When events of a big transaction are binlogged offsetting over 2GB from the beginning of the log the semisync master's dump thread lost such events. The events were skipped by the Dump thread that found their skipping status erroneously. The current fixes make sure the skipping status is computed correctly. The test verifies them simulating the 2GB offset.
-
- 26 Jan, 2018 6 commits
-
-
-
Monty authored
-
Vladislav Vaintroub authored
do not include test suite in release zip anymore.
-
Vladislav Vaintroub authored
-
Vladislav Vaintroub authored
-
Vladislav Vaintroub authored
-
- 25 Jan, 2018 1 commit
-
-
Jan Lindström authored
Probem was that dict_sys mutex was owned when calling function dict_stats_save_defrag_stats() that assumes we do not own dict_sys mutex.
-
- 24 Jan, 2018 4 commits
-
-
Monty authored
Assertion `count > 0' failed in rpl_parallel_thread_pool:: get_thread, rpl.rpl_parallel failed in buildbot The reason for this is that one thread can call rpl_parallel_resize_pool_if_no_slaves() while another thread calls at the same time rpl_parallel_activate_pool(). If rpl_parallel_active_pool() is called before rpl_parallel_resize_pool_if_no_slaves() has finished, pool->count will be set to 0 even if there exists active slave threads. Added a mutex lock in rpl_parallel_activate_pool() to protect against this scenario, which seams to fix this issue.
-
Monty authored
It crashed because we accessed lex->current_select when it was a NULL, which is the case for SP parameters or local variables.
-
Marko Mäkelä authored
-
Marko Mäkelä authored
While the bug was reported as a regression of MDEV-11025 Make number of page cleaner threads variable dynamic in MariaDB Server 10.3, the code that MariaDB Server 10.2 inherited from MySQL 5.7.4 (WL#6642) looks prone to similar errors. pc_flush_slot(): If there is no work to do, reset the is_requested signal, to avoid potential busy-waiting in buf_flush_page_cleaner_worker(). If the coordinator thread has shut down, avoid resetting the is_requested event, to avoid a potential hang at shutdown if there are multiple worker threads.
-
- 23 Jan, 2018 3 commits
-
-
Daniel Black authored
Signed-off-by: Daniel Black <daniel@linux.vnet.ibm.com>
-
Alexander Barkov authored
-
Vladislav Vaintroub authored
FULLTEXT auxiliary tables Change the logic to take mdl lock on all tables before tablespaces are copied, rather than lock every single tablespace just before it is copied.
-
- 22 Jan, 2018 2 commits
-
-
Marko Mäkelä authored
ibuf_merge_or_delete_for_page(): Invoke fil_space_acquire_silent() instead of fil_space_acquire() in order to avoid displaying a useless message. We know perfectly well that a tablespace can be dropped while a change buffer merge is pending, because change buffer merges skip any transactional locks.
-
Marko Mäkelä authored
-