mirror of
https://github.com/MariaDB/server.git
synced 2025-07-29 05:21:33 +03:00
MDEV-8588: Assertion failure in file ha_innodb.cc line 21140 if at least one encrypted table exists and encryption service is not available
Analysis: Problem was that in fil_read_first_page we do find that table has encryption information and that encryption service or used key_id is not available. But, then we just printed fatal error message that causes above assertion. Fix: When we open single table tablespace if it has encryption information (crypt_data) store this crypt data to the table structure. When we open a table and we find out that tablespace is not available, check has table a encryption information and from there is encryption service or used key_id is not available. If it is, add additional warning for SQL-layer.
This commit is contained in:
35
mysql-test/suite/encryption/r/innodb-bad-key-change.result
Normal file
35
mysql-test/suite/encryption/r/innodb-bad-key-change.result
Normal file
@ -0,0 +1,35 @@
|
||||
call mtr.add_suppression("Plugin 'file_key_management' init function returned error");
|
||||
call mtr.add_suppression("InnoDB: Database page corruption on disk or a failed.*");
|
||||
call mtr.add_suppression("Plugin 'file_key_management' registration.*failed");
|
||||
|
||||
# Start server with keys2.txt
|
||||
SET GLOBAL innodb_file_format = `Barracuda`;
|
||||
SET GLOBAL innodb_file_per_table = ON;
|
||||
CREATE TABLE t1 (c VARCHAR(8)) ENGINE=InnoDB ENCRYPTED=YES ENCRYPTION_KEY_ID=2;
|
||||
INSERT INTO t1 VALUES ('foobar');
|
||||
ALTER TABLE t1 ADD COLUMN c2 INT;
|
||||
INSERT INTO t1 VALUES ('foobar',2);
|
||||
SELECT * FROM t1;
|
||||
c c2
|
||||
foobar NULL
|
||||
foobar 2
|
||||
TRUNCATE TABLE t1;
|
||||
SELECT * FROM t1;
|
||||
c c2
|
||||
INSERT INTO t1 VALUES ('foobar',1);
|
||||
INSERT INTO t1 VALUES ('foobar',2);
|
||||
FLUSH TABLE WITH READ LOCK;
|
||||
SELECT * FROM t1;
|
||||
c c2
|
||||
foobar 1
|
||||
foobar 2
|
||||
|
||||
# Restart server with keysbad3.txt
|
||||
SELECT * FROM t1;
|
||||
ERROR 42S02: Table 'test.t1' doesn't exist in engine
|
||||
SHOW WARNINGS;
|
||||
Level Code Message
|
||||
Warning 1812 Tablespace is missing for table 'test/t1'
|
||||
Warning 155 Table test/t1 is encrypted but encryption service or used key_id 2 is not available. Can't continue reading table.
|
||||
Error 1932 Table 'test.t1' doesn't exist in engine
|
||||
DROP TABLE t1;
|
Reference in New Issue
Block a user