mirror of
https://github.com/MariaDB/server.git
synced 2025-06-03 07:02:23 +03:00
encryption.innodb_scrub: Clean up. Make it also cover ROW_FORMAT=COMPRESSED, removing the need for encryption.innodb_scrub_compressed. Add a FIXME comment saying that we should create a secondary index, to demonstrate that also undo log pages get scrubbed. Currently that is not working! Also clean up encryption.innodb_scrub_background, but keep it disabled, because the background scrubbing does not work reliably. Fix both tests so that if something is not scrubbed, the test will be aborted, so that the data files will be preserved. Allow the tests to run on Windows as well.
148 lines
3.5 KiB
Plaintext
148 lines
3.5 KiB
Plaintext
-- source include/have_innodb.inc
|
|
-- source include/not_embedded.inc
|
|
-- source include/have_example_key_management_plugin.inc
|
|
|
|
let $MYSQLD_DATADIR=`select @@datadir`;
|
|
let INNODB_PAGE_SIZE= `select @@innodb_page_size`;
|
|
|
|
create table snapshot_status engine = myisam
|
|
select * from information_schema.global_status
|
|
where variable_name like 'innodb_scrub%';
|
|
|
|
let $rowcount=500;
|
|
let $maxformatno= 4;
|
|
let $formatno= $maxformatno;
|
|
|
|
--echo # MDEV-8139 Fix scrubbing tests
|
|
--echo # FIXME: Add index(b) to each table; ensure that undo logs are scrubbed.
|
|
let $tableformat= (
|
|
a int auto_increment primary key,
|
|
b varchar(256),
|
|
c text) engine = innodb row_format;
|
|
|
|
while ($formatno)
|
|
{
|
|
dec $formatno;
|
|
let $format = `select case $formatno
|
|
when 0 then 'dynamic'
|
|
when 1 then 'redundant'
|
|
when 2 then 'compact'
|
|
when 3 then 'compressed'
|
|
end`;
|
|
|
|
let $t= delete_$formatno;
|
|
eval create table $t $tableformat=$format;
|
|
|
|
let $numinserts = $rowcount;
|
|
--disable_query_log
|
|
begin;
|
|
while ($numinserts)
|
|
{
|
|
dec $numinserts;
|
|
eval insert into $t(b,c) values ('repairman', repeat('unicycle', 1000));
|
|
}
|
|
commit;
|
|
--enable_query_log
|
|
|
|
eval delete from $t;
|
|
|
|
let $t= delete_rollback_delete_$formatno;
|
|
eval create table $t $tableformat=$format;
|
|
|
|
let $numinserts = $rowcount;
|
|
--disable_query_log
|
|
begin;
|
|
while ($numinserts)
|
|
{
|
|
dec $numinserts;
|
|
eval insert into $t(b,c) values ('breakhuman', repeat('bicycle', 1000));
|
|
}
|
|
commit;
|
|
--enable_query_log
|
|
|
|
begin;
|
|
eval delete from $t;
|
|
rollback;
|
|
eval delete from $t;
|
|
|
|
let $t= insert_rollback_$formatno;
|
|
|
|
eval create table $t $tableformat=$format;
|
|
|
|
let $numinserts = $rowcount;
|
|
begin;
|
|
--disable_query_log
|
|
while ($numinserts)
|
|
{
|
|
dec $numinserts;
|
|
eval insert into $t(b,c) values ('wonderwoman', repeat('tricycle', 1000));
|
|
}
|
|
--enable_query_log
|
|
|
|
rollback;
|
|
}
|
|
|
|
SET GLOBAL innodb_fast_shutdown=0;
|
|
-- source include/shutdown_mysqld.inc
|
|
|
|
let SEARCH_ABORT= FOUND;
|
|
let SEARCH_PATTERN= (un|b|tr)icycle|(repair|breakhu|wonderwo)man;
|
|
let SEARCH_RANGE= 12582912;
|
|
let SEARCH_FILE= $MYSQLD_DATADIR/ibdata1;
|
|
|
|
# We may randomly find copies of unscrubbed pages in the doublewrite buffer.
|
|
# Let us scrub the doublewrite buffer ourselves.
|
|
perl;
|
|
use Fcntl 'SEEK_SET';
|
|
my $page_size = $ENV{INNODB_PAGE_SIZE};
|
|
open(FILE, "+<", "$ENV{SEARCH_FILE}") or die "cannot open: $!\n";
|
|
seek(FILE, $page_size * 64, SEEK_SET) or die "cannot seek: $!\n";
|
|
print(FILE chr(0) x ($page_size * 128)) or die "cannot write: $!\n";
|
|
close FILE or die "cannot close: $!\n";;
|
|
EOF
|
|
|
|
-- source include/search_pattern_in_file.inc
|
|
|
|
let $formatno= $maxformatno;
|
|
while ($formatno)
|
|
{
|
|
dec $formatno;
|
|
|
|
let $t= delete_$formatno.ibd;
|
|
let SEARCH_FILE= $MYSQLD_DATADIR/test/$t;
|
|
-- echo # $t
|
|
-- source include/search_pattern_in_file.inc
|
|
let $t= delete_rollback_delete_$formatno.ibd;
|
|
let SEARCH_FILE= $MYSQLD_DATADIR/test/$t;
|
|
-- echo # $t
|
|
-- source include/search_pattern_in_file.inc
|
|
let $t= insert_rollback_$formatno.ibd;
|
|
let SEARCH_FILE= $MYSQLD_DATADIR/test/$t;
|
|
-- echo # $t
|
|
-- source include/search_pattern_in_file.inc
|
|
}
|
|
|
|
-- source include/start_mysqld.inc
|
|
|
|
let $formatno= $maxformatno;
|
|
while ($formatno)
|
|
{
|
|
dec $formatno;
|
|
|
|
let $t= delete_$formatno, delete_rollback_delete_$formatno, insert_rollback_$formatno;
|
|
|
|
eval check table $t;
|
|
eval drop table $t;
|
|
}
|
|
|
|
show variables like 'innodb_%scrub_data%';
|
|
|
|
--echo # verify that this test have not caused any background scrubbing
|
|
--sorted_result
|
|
select ss.variable_name, gs.variable_value - ss.variable_value as variable_value
|
|
from snapshot_status ss,
|
|
information_schema.global_status gs
|
|
where ss.variable_name = gs.variable_name;
|
|
|
|
drop table snapshot_status;
|