summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMarko Mäkelä <marko.makela@mariadb.com>2020-09-22 13:08:09 +0300
committerMarko Mäkelä <marko.makela@mariadb.com>2020-09-22 13:08:09 +0300
commit2af8f712de3a9d518a70904e65ff8cf18beb5f1d (patch)
tree367b2cf2022a06cf5bcd04b47b6318498d344f3a
parent732cd7fd5346885ae41293d7ebe44110188155d4 (diff)
downloadmariadb-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.
-rw-r--r--mysql-test/suite/encryption/r/create_or_replace.result2
-rw-r--r--mysql-test/suite/encryption/t/create_or_replace.opt1
-rw-r--r--mysql-test/suite/encryption/t/create_or_replace.test2
-rw-r--r--storage/innobase/fil/fil0crypt.cc6
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();