-- source include/have_innodb.inc -- source include/have_debug.inc -- source include/have_debug_sync.inc -- source include/have_file_key_management_plugin.inc # # MDEV-8817: Failing assertion: new_state->key_version != ENCRYPTION_KEY_VERSION_INVALID # SET GLOBAL innodb_encrypt_tables = ON; SET GLOBAL innodb_encryption_threads = 4; CREATE TABLE t1 (pk INT PRIMARY KEY AUTO_INCREMENT, c VARCHAR(256)) ENGINE=INNODB ENCRYPTED=NO ENCRYPTION_KEY_ID=4; DROP TABLE t1; set @save_global = @@GLOBAL.innodb_default_encryption_key_id; set innodb_default_encryption_key_id = 99; set global innodb_default_encryption_key_id = 99; set global innodb_default_encryption_key_id = @save_global; --error 1005 CREATE TABLE t1 (pk INT PRIMARY KEY AUTO_INCREMENT, c VARCHAR(256)) ENGINE=INNODB; SHOW WARNINGS; --error 1005 CREATE TABLE t1 (pk INT PRIMARY KEY AUTO_INCREMENT, c VARCHAR(256)) ENGINE=INNODB ENCRYPTED=YES; SHOW WARNINGS; set innodb_default_encryption_key_id = 4; CREATE TABLE t1 (pk INT PRIMARY KEY AUTO_INCREMENT, c VARCHAR(256)) ENGINE=INNODB ENCRYPTED=YES; SHOW CREATE TABLE t1; DROP TABLE t1; CREATE TABLE t1 (pk INT PRIMARY KEY AUTO_INCREMENT, c VARCHAR(256)) ENGINE=INNODB; SHOW CREATE TABLE t1; CREATE TABLE t2 (pk INT PRIMARY KEY AUTO_INCREMENT, c VARCHAR(256)) ENGINE=INNODB ENCRYPTED=NO ENCRYPTION_KEY_ID=1; --error ER_ILLEGAL_HA_CREATE_OPTION ALTER TABLE t1 ENCRYPTION_KEY_ID=99; SHOW WARNINGS; set innodb_default_encryption_key_id = 1; --disable_warnings --disable_query_log let $i = 400; while ($i) { INSERT INTO t1 values(NULL, substring(MD5(RAND()), -128)); dec $i; } commit; INSERT INTO t2 select * from t1; --disable_abort_on_error --connect (con1,localhost,root,,test) --connect (con2,localhost,root,,test) let $i = 50; while ($i) { connection con1; send ALTER TABLE t1 ENCRYPTED=NO ENCRYPTION_KEY_ID=1; connection con2; send ALTER TABLE t1 ENCRYPTED=YES ENCRYPTION_KEY_ID=4; connection default; send ALTER TABLE t2 ENCRYPTED=NO ENCRYPTION_KEY_ID=1; connection con1; --reap; ALTER TABLE t1 ENCRYPTED=NO ENCRYPTION_KEY_ID=1; connection con2; --reap ALTER TABLE t1 ENCRYPTED=YES ENCRYPTION_KEY_ID=4; connection default; --reap ALTER TABLE t2 ENCRYPTED=YES ENCRYPTION_KEY_ID=1; ALTER TABLE t1 ENCRYPTED=NO ENCRYPTION_KEY_ID=1; dec $i; } connection default; --disconnect con1 --disconnect con2 --enable_abort_on_error --enable_warnings --enable_query_log drop table t1,t2; # # MDEV-17230: encryption_key_id from alter is ignored by encryption threads # --enable_warnings SET GLOBAL innodb_encrypt_tables=OFF; CREATE TABLE t1 (a int not null primary key) engine=innodb; ALTER TABLE t1 ENCRYPTION_KEY_ID=4; SHOW CREATE TABLE t1; DROP TABLE t1; CREATE TABLE t2 (a int not null primary key) engine=innodb; ALTER TABLE t2 ENCRYPTION_KEY_ID=4, ALGORITHM=COPY; SHOW WARNINGS; SHOW CREATE TABLE t2; CREATE TABLE t3 (a int not null primary key) engine=innodb ENCRYPTION_KEY_ID=4; DROP TABLE t3; SET GLOBAL innodb_encrypt_tables='FORCE'; --error ER_CANT_CREATE_TABLE CREATE TABLE t1 (a int primary key) engine=innodb encrypted=no; SHOW WARNINGS; FLUSH TABLES; create table t1(f1 int not null, f2 int not null)engine=innodb encrypted=yes; insert into t1 values(1, 2), (2, 3), (4, 5), (5, 6), (7, 8); insert into t1 select * from t1; BEGIN; INSERT INTO t2 VALUES (1); connect con1, localhost, root; SET DEBUG_SYNC = 'row_log_table_apply2_before SIGNAL done WAIT_FOR ever'; send alter table t1 force; connection default; SET DEBUG_SYNC = 'now WAIT_FOR done'; SET GLOBAL innodb_flush_log_at_trx_commit=1; COMMIT; let $restart_parameters = --innodb_encryption_threads=2; let $restart_noprint = 2; --let $shutdown_timeout= 0 --source include/restart_mysqld.inc disconnect con1; select * from t1; drop table t1,t2;