- 31 Aug, 2017 9 commits
-
-
Marko Mäkelä authored
-
Marko Mäkelä authored
There is a race condition in InnoDB startup. A number of fil_crypt_thread are created by fil_crypt_threads_init(). These threads may call btr_scrub_complete_space() before btr_scrub_init() was called. Those too early calls would be accessing an uninitialized scrub_stat_mutex. innobase_start_or_create_for_mysql(): Invoke btr_scrub_init() before fil_crypt_threads_init(). fil_crypt_complete_rotate_space(): Only invoke btr_scrub_complete_space() if scrubbing is enabled. There is no need to update the statistics if it is not enabled.
-
Marko Mäkelä authored
-
Marko Mäkelä authored
ATTRIBUTE_NORETURN is supported on all platforms (MSVS and GCC-like). It declares that a function will not return; instead, the thread or the whole process will terminate. ATTRIBUTE_COLD is supported starting with GCC 4.3. It declares that a function is supposed to be executed rarely. Rarely used error-handling functions and functions that emit messages to the error log should be tagged such.
-
Marko Mäkelä authored
galera.galera_kill_applier: Make the test less likely to fail by adding sleep time. galera.query_cache: Remove data truncation. Part of the test file looks like it has been misinterpreted as latin1 and wrongly converted to UTF-8 encoding. In MariaDB 10.1, the server would only warn about data truncation and not issue an error. 10.2 is stricter. (The test should be carefully reviewed if it really makes sense.)
-
Marko Mäkelä authored
For running the Galera tests, the variable my_disable_leak_check was set to true in order to avoid assertions due to memory leaks at shutdown. Some adjustments due to MDEV-13625 (merge InnoDB tests from MySQL 5.6) were performed. The most notable behaviour changes from 10.0 and 10.1 are the following: * innodb.innodb-table-online: adjustments for the DROP COLUMN behaviour change (MDEV-11114, MDEV-13613) * innodb.innodb-index-online-fk: the removal of a (1,NULL) record from the result; originally removed in MySQL 5.7 in the Oracle Bug #16244691 fix https://github.com/mysql/mysql-server/commit/377774689bf6a16af74182753fe950d514c2c6dd * innodb.create-index-debug: disabled due to MDEV-13680 (the MySQL Bug #77497 fix was not merged from 5.6 to 5.7.10) * innodb.innodb-alter-autoinc: MariaDB 10.2 behaves like MySQL 5.6/5.7, while MariaDB 10.0 and 10.1 assign different values when auto_increment_increment or auto_increment_offset are used. Also MySQL 5.6/5.7 exhibit different behaviour between LGORITHM=INPLACE and ALGORITHM=COPY, so something needs to be tested and fixed in both MariaDB 10.0 and 10.2. * innodb.innodb-wl5980-alter: disabled because it would trigger an InnoDB assertion failure (MDEV-13668 may need additional effort in 10.2)
-
Jan Lindström authored
After MDEV-13583: Improvements for MTR rebootstrap introduced in MDEV-12042 bootsrap correctly creates mysql/innodb_table_stats and mysql/innodb_index_stats InnoDB tables before innodb_encryption test starts. These tables are also encrypted or decrypted, thus we need to wait also these tables (if not we could randomly get different results as system tablespace and these tables are encrypted or decrypted in parallel).
-
Jan Lindström authored
Problem was incorrect definition of wsrep_recovery, trx_sys_update_wsrep_checkpoint and trx_sys_read_wsrep_checkpoint functions causing innodb_plugin not to load as there was undefined symbols.
-
Jan Lindström authored
Fixes also MDEV-13488: InnoDB writes CRYPT_INFO even though encryption is not enabled. Fixes also MDEV-13093: Leak of Datafile::m_crypt_info on shutdown after failed startup. Problem was that we created encryption metadata (crypt_data) for system tablespace even when no encryption was enabled and too early. System tablespace can be encrypted only using key rotation. Test innodb-key-rotation-disable, innodb_encryption, innodb_lotoftables require adjustment because INFORMATION_SCHEMA INNODB_TABLESPACES_ENCRYPTION contain row only if tablespace really has encryption metadata. xb_load_single_table_tablespace(): Do not call fil_space_destroy_crypt_data() any more, because Datafile::m_crypt_data has been removed. fil_crypt_realloc_iops(): Avoid divide by zero. fil_crypt_set_thread_cnt(): Set fil_crypt_threads_event if encryption threads exist. This is required to find tablespaces requiring key rotation if no other changes happen. fil_crypt_find_space_to_rotate(): Decrease the amount of time waiting when nothing happens to better enable key rotation on startup. fil_ibd_open(), fil_ibd_load(): Load possible crypt_data from first page. class Datafile, class SysTablespace : remove m_crypt_info field. Datafile::get_first_page(): Return a pointer to first page buffer. fsp_header_init(): Write encryption metadata to page 0 only if tablespace is encrypted or encryption is disabled by table option. i_s_dict_fill_tablespaces_encryption(): Skip tablespaces that do not contain encryption metadata. This is required to avoid too early wait condition trigger in encrypted -> unencrypted state transfer.
-
- 30 Aug, 2017 8 commits
-
-
Vladislav Vaintroub authored
with Visual Studio simplify logic, VS generator seems to have problems if generated file (with ADD_CUSTOM_COMMAND) depends on another generated file. So, the fix is just to have mysqld_lib.{def,lib,exp} to be generated in a single ADD_CUSTOM_COMMAND rather than two steps.
-
Vladislav Vaintroub authored
allow to build with -DPLUGIN_INNOBASE=NO
-
Vladislav Vaintroub authored
Update wait_timeout.test to add test case for this.
-
Marko Mäkelä authored
-
Marko Mäkelä authored
-
Marko Mäkelä authored
wsrep_drop_table_query(): Remove the definition of this ununsed function. row_upd_sec_index_entry(), row_upd_clust_rec_by_insert(): Evaluate the simplest conditions first. The merge could have slightly hurt performance by causing extra calls to wsrep_on().
-
Sergei Petrunia authored
Make rocksdb.cardinality test faster (77 -> 42 sec with --mem) by loading records in batches. (loading everything as one bulk load batch will remove the purpose of the test)
-
Marko Mäkelä authored
This is not affecting correctness; delete NULL is a valid operation.
-
- 29 Aug, 2017 10 commits
-
-
Marko Mäkelä authored
recv_find_max_checkpoint(): Refer to MariaDB 10.2.2 instead of MySQL 5.7.9. Do not hint that a binary downgrade might be possible, because there are many changes in InnoDB 5.7 that could make downgrade impossible: a column appended to SYS_INDEXES, added SYS_* tables, undo log format changes, and so on.
-
Daniel Black authored
It is possible that a .git directory isn't definitive on the existance of a working git tree. A git worktree over sshfs for instance will fail to build unless the main repository also exists in the same directory. Adding this extra test will make the detection that little more ruggardised for these odd build environments. Signed-off-by: Daniel Black <daniel.black@au.ibm.com>
-
Jan Lindström authored
-
Marko Mäkelä authored
-
Marko Mäkelä authored
Import the MySQL 5.6 addition from innodb.create-index to a new debug-only test, innodb.create-index-debug. The existing test innodb.create-index also runs on a debug server.
-
Marko Mäkelä authored
FIXME: MDEV-13668 InnoDB unnecessarily rebuilds table FIXME: MDEV-13671 InnoDB should use case-insensitive column name comparisons like the rest of the server FIXME: MDEV-13640 / Properly fix MDEV-9469 'Incorrect key file' on ALTER TABLE FIXME: investigate result difference in innodb.innodb-alter-autoinc and ensure that MariaDB does the right thing with auto_increment_increment and auto_increment_offset, for both ALGORITHM=INPLACE and ALGORITHM=COPY (Oracle MySQL behaviour differs between those two).
-
Marko Mäkelä authored
Import some ALTER TABLE test cases from MySQL 5.6 without modification. The adjustments will be in a separate commit.
-
Jan Lindström authored
Fixes also MDEV-13488: InnoDB writes CRYPT_INFO even though encryption is not enabled. Problem was that we created encryption metadata (crypt_data) for system tablespace even when no encryption was enabled and too early. System tablespace can be encrypted only using key rotation. Test innodb-key-rotation-disable, innodb_encryption, innodb_lotoftables require adjustment because INFORMATION_SCHEMA INNODB_TABLESPACES_ENCRYPTION contain row only if tablespace really has encryption metadata. fil_crypt_set_thread_cnt: Send message to background encryption threads if they exits when they are ready. This is required to find tablespaces requiring key rotation if no other changes happen. fil_crypt_find_space_to_rotate: Decrease the amount of time waiting when nothing happens to better enable key rotation on startup. fsp_header_init: Write encryption metadata to page 0 only if tablespace is encrypted or encryption is disabled by table option. i_s_dict_fill_tablespaces_encryption : Skip tablespaces that do not contain encryption metadata. This is required to avoid too early wait condition trigger in encrypted -> unencrypted state transfer. open_or_create_data_files: Do not create encryption metadata by default to system tablespace.
-
Andrei Elkin authored
Assertions failed due to incorrect handling of the --tc-heuristic-recover option when InnoDB is in read-only mode either due to innodb_read_only=1 or innodb_force_recovery>3. InnoDB failed to refuse a XA COMMIT or XA ROLLBACK operation, and there were errors in the error handling in the upper layer. This was fixed by making InnoDB XA operations respect the high_level_read_only flag. The InnoDB part of the fix and parts of the test main.tc_heuristic_recover were provided by Marko Mäkelä. LOCK_log mutex lock/unlock had to be added to fix MDEV-13438. The measure is confirmed by mysql sources as well. For testing of the conflicting option combination, mysql-test-run is made to export a new $MYSQLD_LAST_CMD. It holds the very last value generated by mtr.mysqld_start(). Even though the options have been also always stored in $mysqld->{'started_opts'} there were no access to them beyond the automatic server restart by mtr through the expect file interface. Effectively therefore $MYSQLD_LAST_CMD represents a more general interface to $mysqld->{'started_opts'} which can be used in wider scopes including server launch with incompatible options. Notice another existing method to restart the server with incompatible options relying on $MYSQLD_CMD is is aware of $mysqld->{'started_opts'} (the actual options that the server is launched by mtr). In order to use this method they would have to be provided manually. NOTE: When merging to 10.2, the file search_pattern_in_file++.inc should be replaced with the pre-existing search_pattern_in_file.inc.
-
Marko Mäkelä authored
-
- 28 Aug, 2017 9 commits
-
-
Vladislav Vaintroub authored
If this variable is set, skip actual AWS calls, and fake/mock both generation and encryption of the keys. The advantage of having a mock mode is that more aws_key_management tests can be enabled on buildbot.
-
Elena Stepanova authored
- make re-bootstrap run with all extra options, not only InnoDB ones - re-use previously created bootstrap.sql - add --console - fix debian patch to keep it applicable
-
Elena Stepanova authored
-
Marko Mäkelä authored
-
Marko Mäkelä authored
-
Jan Lindström authored
cases.
-
Jan Lindström authored
Problem is that page 0 and its possible enrryption information is not read for undo tablespaces. fil_crypt_get_latest_key_version(): Do not send event to encryption threads if event does not yet exists. Seen on regression testing. fil_read_first_page: Add new parameter does page belong to undo tablespace and if it does, we do not read FSP_HEADER. srv_undo_tablespace_open : Read first page of the tablespace to get crypt_data if it exists and pass it to fil_space_create. Tested using innodb_encryption with combinations with innodb-undo-tablespaces.
-
Elena Stepanova authored
-
Marko Mäkelä authored
The function ibuf_remove_free_page() may be called while the caller is holding several mutexes or rw-locks. Because of this, this housekeeping loop may cause performance glitches for operations that involve tables that are stored in the InnoDB system tablespace. Also deadlocks might be possible. The worst impact of all is that due to the mutexes being held, calls to log_free_check() had to be skipped during this housekeeping. This means that the cyclic InnoDB redo log may be overwritten. If the system crashes during this, it would be unable to recover. The entry point to the problematic code is ibuf_free_excess_pages(). It would make sense to call it before acquiring any mutexes or rw-locks, in any 'pessimistic' operation that involves the system tablespace. fseg_create_general(), fseg_alloc_free_page_general(): Do not call ibuf_free_excess_pages() while potentially holding some latches. ibuf_remove_free_page(): Do call log_free_check(), like every operation that is about to generate redo log should do. ibuf_free_excess_pages(): Remove some assertions that are replaced by stricter assertions in the log_free_check() that is now called by ibuf_remove_free_page(). row_mtr_start(): New function, to perform necessary preparations when starting a mini-transaction for row operations. For pessimistic operations on secondary indexes that are located in the system tablespace, this includes calling ibuf_free_excess_pages(). row_undo_ins_remove_sec_low(), row_undo_mod_del_mark_or_remove_sec_low(), row_undo_mod_del_unmark_sec_and_undo_update(): Call row_mtr_start(). row_ins_sec_index_entry(): Call ibuf_free_excess_pages() if the operation may involve allocating pages and change buffering in the system tablespace. row_upd_sec_index_entry(): Slightly refactor the code. The delete-marking of the old entry is done in-place. It could be change-buffered, but the old code should be unlikely to have invoked ibuf_free_excess_pages() in this case.
-
- 25 Aug, 2017 1 commit
-
-
Marko Mäkelä authored
The function ibuf_remove_free_page() may be called while the caller is holding several mutexes or rw-locks. Because of this, this housekeeping loop may cause performance glitches for operations that involve tables that are stored in the InnoDB system tablespace. Also deadlocks might be possible. The worst impact of all is that due to the mutexes being held, calls to log_free_check() had to be skipped during this housekeeping. This means that the cyclic InnoDB redo log may be overwritten. If the system crashes during this, it would be unable to recover. The entry point to the problematic code is ibuf_free_excess_pages(). It would make sense to call it before acquiring any mutexes or rw-locks, in any 'pessimistic' operation that involves the system tablespace. fseg_create_general(), fseg_alloc_free_page_general(): Do not call ibuf_free_excess_pages() while potentially holding some latches. ibuf_remove_free_page(): Do call log_free_check(), like every operation that is about to generate redo log should do. ibuf_free_excess_pages(): Remove some assertions that are replaced by stricter assertions in the log_free_check() that is now called by ibuf_remove_free_page(). row_ins_sec_index_entry(), row_undo_ins_remove_sec_low(), row_undo_mod_del_mark_or_remove_sec_low(), row_undo_mod_del_unmark_sec_and_undo_update(): Call ibuf_free_excess_pages() if the operation may involve allocating pages and change buffering in the system tablespace.
-
- 24 Aug, 2017 3 commits
-
-
Vladislav Vaintroub authored
Its output is useless,and, in case of large output, it also may prevent with search_pattern_in_file.inc from working.
-
Kenny John Jacob authored
Fix minor typo.
-
Jan Lindström authored
-