diff options
author | Marko Mäkelä <marko.makela@mariadb.com> | 2020-09-22 13:08:09 +0300 |
---|---|---|
committer | Marko Mäkelä <marko.makela@mariadb.com> | 2020-09-22 13:08:09 +0300 |
commit | 2af8f712de3a9d518a70904e65ff8cf18beb5f1d (patch) | |
tree | 367b2cf2022a06cf5bcd04b47b6318498d344f3a | |
parent | 732cd7fd5346885ae41293d7ebe44110188155d4 (diff) | |
download | mariadb-git-2af8f712de3a9d518a70904e65ff8cf18beb5f1d.tar.gz |
MDEV-23776: Re-apply the fix and make the test more robust
The test that was added in commit e05650e6868eab2dbb9f58c4786bcc71afc4ffce
would break a subsequent run of a test encryption.innodb-bad-key-change
because some pages in the system tablespace would be encrypted with
a different key.
The failure was repeatable with the following invocation:
./mtr --no-reorder \
encryption.create_or_replace,cbc \
encryption.innodb-bad-key-change,cbc
Because the crash was unrelated to the code changes that we reverted
in commit eb38b1f703fb84299680f9c5a75ea970be7aee1d
we can safely re-apply those fixes.
4 files changed, 7 insertions, 4 deletions
diff --git a/mysql-test/suite/encryption/r/create_or_replace.result b/mysql-test/suite/encryption/r/create_or_replace.result index 62dac4ccc43..69ea113289b 100644 --- a/mysql-test/suite/encryption/r/create_or_replace.result +++ b/mysql-test/suite/encryption/r/create_or_replace.result @@ -1,5 +1,4 @@ SET @save_threads = @@GLOBAL.innodb_encryption_threads; -SET @save_tables = @@GLOBAL.innodb_encrypt_tables; SET default_storage_engine = InnoDB; SET GLOBAL innodb_encryption_threads = 4; CREATE TABLE `table10_int_autoinc` (`col_int_key` int, pk int auto_increment, `col_int` int, key (`col_int_key` ),primary key (pk)) engine=innodb; @@ -18,4 +17,3 @@ connection default; drop table create_or_replace_t, table1_int_autoinc, table0_int_autoinc, table10_int_autoinc; SET GLOBAL innodb_encryption_threads = @save_threads; -SET GLOBAL innodb_encrypt_tables = @save_tables; diff --git a/mysql-test/suite/encryption/t/create_or_replace.opt b/mysql-test/suite/encryption/t/create_or_replace.opt new file mode 100644 index 00000000000..66892f34897 --- /dev/null +++ b/mysql-test/suite/encryption/t/create_or_replace.opt @@ -0,0 +1 @@ +--innodb-encrypt-tables diff --git a/mysql-test/suite/encryption/t/create_or_replace.test b/mysql-test/suite/encryption/t/create_or_replace.test index 8d571794713..2ebd599d460 100644 --- a/mysql-test/suite/encryption/t/create_or_replace.test +++ b/mysql-test/suite/encryption/t/create_or_replace.test @@ -3,7 +3,6 @@ --source include/count_sessions.inc SET @save_threads = @@GLOBAL.innodb_encryption_threads; -SET @save_tables = @@GLOBAL.innodb_encrypt_tables; SET default_storage_engine = InnoDB; @@ -76,5 +75,4 @@ drop table create_or_replace_t, table1_int_autoinc, table0_int_autoinc, table10_int_autoinc; SET GLOBAL innodb_encryption_threads = @save_threads; -SET GLOBAL innodb_encrypt_tables = @save_tables; --source include/wait_until_count_sessions.inc diff --git a/storage/innobase/fil/fil0crypt.cc b/storage/innobase/fil/fil0crypt.cc index 09f2730edec..16b2093b691 100644 --- a/storage/innobase/fil/fil0crypt.cc +++ b/storage/innobase/fil/fil0crypt.cc @@ -1483,6 +1483,11 @@ static bool fil_crypt_find_space_to_rotate( { /* we need iops to start rotating */ while (!state->should_shutdown() && !fil_crypt_alloc_iops(state)) { + if (state->space && state->space->is_stopping()) { + fil_space_release(state->space); + state->space = NULL; + } + os_event_reset(fil_crypt_threads_event); os_event_wait_time(fil_crypt_threads_event, 100000); } @@ -2506,6 +2511,7 @@ fil_space_crypt_close_tablespace( /* wakeup throttle (all) sleepers */ os_event_set(fil_crypt_throttle_sleep_event); + os_event_set(fil_crypt_threads_event); os_thread_sleep(20000); dict_mutex_enter_for_mysql(); |