From a5c76dc036f7771cc11eb309150d1bd6ab980238 Mon Sep 17 00:00:00 2001 From: Satya Bodapati Date: Sat, 24 Apr 2021 16:55:12 +0530 Subject: [PATCH] testcase --- mysql-test/t/encryption_crash-master.opt | 5 +++ mysql-test/t/encryption_crash.test | 54 ++++++++++++++++++++++++ storage/innobase/buf/buf0lru.cc | 5 +++ storage/innobase/os/os0file.cc | 4 ++ 4 files changed, 68 insertions(+) create mode 100644 mysql-test/t/encryption_crash-master.opt create mode 100644 mysql-test/t/encryption_crash.test diff --git a/mysql-test/t/encryption_crash-master.opt b/mysql-test/t/encryption_crash-master.opt new file mode 100644 index 00000000000..a824b9cbf71 --- /dev/null +++ b/mysql-test/t/encryption_crash-master.opt @@ -0,0 +1,5 @@ +$KEYRING_PLUGIN_OPT +--early-plugin-load="keyring_file=$KEYRING_PLUGIN" +--keyring_file_data=$MYSQL_TMP_DIR/mysecret_keyring +--default-table-encryption=OFF +--table-encryption-privilege-check=OFF diff --git a/mysql-test/t/encryption_crash.test b/mysql-test/t/encryption_crash.test new file mode 100644 index 00000000000..81580324dec --- /dev/null +++ b/mysql-test/t/encryption_crash.test @@ -0,0 +1,54 @@ +--let $MYSQLD_DATADIR=`SELECT @@datadir` +CREATE TABLESPACE tab04k ADD DATAFILE 'tab04k.ibd'; + +CREATE TABLE tt_4 (v0 VARCHAR(17), i1 INT, v2 VARCHAR(10), t3 BOOL, f4 FLOAT, INDEX tt_4i0(v2 ASC) , INDEX tt_4i1(f4 DESC, v0 ASC, t3, v2 DESC) , INDEX tt_4i2(v2 DESC, f4, i1, t3 ASC) , INDEX tt_4i3(t3 ASC, f4 ASC) ) TABLESPACE=tab04k ENGINE=INNODB ; + +INSERT INTO tt_4 ( v0 ,i1 ,v2 ,t3 ,f4 ) VALUES( 'eAfHmq1V1', 89, 'OdR9ERq', true, 0.00 ) ; +INSERT INTO tt_4 ( v0 ,i1 ,v2 ,t3 ,f4 ) VALUES( 'iKzcY', 70, 'q7682', false, 0.00 ) ; +INSERT INTO tt_4 ( v0 ,i1 ,v2 ,t3 ,f4 ) VALUES( 'P1KQOIKovY3XW', 80, 'm', false, 0.00 ) ; +INSERT INTO tt_4 ( v0 ,i1 ,v2 ,t3 ,f4 ) VALUES( '9QTtbs6B6XVO', 90, '5OMOtl6tvO', true, 0.00 ) ; +INSERT INTO tt_4 ( v0 ,i1 ,v2 ,t3 ,f4 ) VALUES( 'KZGH0NPmGE', 84, 'bQL', true, 0.00 ) ; +INSERT INTO tt_4 ( v0 ,i1 ,v2 ,t3 ,f4 ) VALUES( 'xF', 17, 'c', false, 0.00 ) ; +INSERT INTO tt_4 ( v0 ,i1 ,v2 ,t3 ,f4 ) VALUES( 'LGWRZHTlIw8DQ12y', 1, 'Yb8', false, 0.00 ) ; +INSERT INTO tt_4 ( v0 ,i1 ,v2 ,t3 ,f4 ) VALUES( 'TzFM2xlLV', 44, 'NzNiP', true, 0.00 ) ; +INSERT INTO tt_4 ( v0 ,i1 ,v2 ,t3 ,f4 ) VALUES( 'EJ6A', 62, 'L8ox4Cz', true, 0.00 ) ; +INSERT INTO tt_4 ( v0 ,i1 ,v2 ,t3 ,f4 ) VALUES( '', 80, '8fK6', true, 0.00 ) ; +INSERT INTO tt_4 ( v0 ,i1 ,v2 ,t3 ,f4 ) VALUES( 'a', 68, 'Zwv', true, 0.00 ) ; +INSERT INTO tt_4 ( v0 ,i1 ,v2 ,t3 ,f4 ) VALUES( '6O3F45xDx', 16, 'EQzKuLLW1', false, 0.00 ) ; +INSERT INTO tt_4 ( v0 ,i1 ,v2 ,t3 ,f4 ) VALUES( 'XIcIfVQ3HeZF70t06', 88, 'Tv', false, 0.00 ) ; +INSERT INTO tt_4 ( v0 ,i1 ,v2 ,t3 ,f4 ) VALUES( 'Xs104JZZ8vXIx', 20, 'PDG7VwM9', true, 0.00 ) ; +INSERT INTO tt_4 ( v0 ,i1 ,v2 ,t3 ,f4 ) VALUES( '5f', 51, 'd', false, 0.00 ) ; +INSERT INTO tt_4 ( v0 ,i1 ,v2 ,t3 ,f4 ) VALUES( 'Zi', 12, 'f5z', false, 0.00 ) ; +INSERT INTO tt_4 ( v0 ,i1 ,v2 ,t3 ,f4 ) VALUES( 'eWqTu8jqpGLjK', 67, '2uroayuO', true, 0.00 ) ; +INSERT INTO tt_4 ( v0 ,i1 ,v2 ,t3 ,f4 ) VALUES( 'hNEkBIhWBEpQ', 8, 'Uls', true, 0.00 ) ; +INSERT INTO tt_4 ( v0 ,i1 ,v2 ,t3 ,f4 ) VALUES( '8', 27, 'McVstUMN', false, 0.00 ) ; +INSERT INTO tt_4 ( v0 ,i1 ,v2 ,t3 ,f4 ) VALUES( '26azycTWVRyqRjHyh', 19, 'BN', false, 0.00 ) ; +INSERT INTO tt_4 ( v0 ,i1 ,v2 ,t3 ,f4 ) VALUES( 'DbG6JB', 43, 'I1EpUE', true, 0.00 ) ; +INSERT INTO tt_4 ( v0 ,i1 ,v2 ,t3 ,f4 ) VALUES( 'NpbriQXUbZI6La', 36, 'fXt', true, 0.00 ) ; +INSERT INTO tt_4 ( v0 ,i1 ,v2 ,t3 ,f4 ) VALUES( 'SJLwtmEm', 88, 'D0RzAN', false, 0.00 ) ; +INSERT INTO tt_4 ( v0 ,i1 ,v2 ,t3 ,f4 ) VALUES( 'jUI', 83, 'qoYLasLhZ', true, 0.00 ) ; +INSERT INTO tt_4 ( v0 ,i1 ,v2 ,t3 ,f4 ) VALUES( 'mBoB0z', 24, 'DruicHrE5', false, 0.00 ) ; +INSERT INTO tt_4 ( v0 ,i1 ,v2 ,t3 ,f4 ) VALUES( 'bLaf5Hi2VyO', 65, 'tEjFYaCb', false, 0.00 ) ; +INSERT INTO tt_4 ( v0 ,i1 ,v2 ,t3 ,f4 ) VALUES( 'SoJ', 33, 'O', false, 0.00 ) ; +INSERT INTO tt_4 ( v0 ,i1 ,v2 ,t3 ,f4 ) VALUES( 'L', 23, 'gYfx0', false, 0.00 ) ; +INSERT INTO tt_4 ( v0 ,i1 ,v2 ,t3 ,f4 ) VALUES( 'xBiRMSAKY5', 91, 'HVGFpDAS', false, 0.00 ) ; + +SET GLOBAL innodb_buf_flush_list_now=ON; + +SET GLOBAL innodb_log_checkpoint_now=ON; +SET GLOBAL innodb_checkpoint_disabled=true; +SET GLOBAL innodb_page_cleaner_disabled_debug=true; +UPDATE tt_4 SET v0 = 'hello satya'; + +--source include/expect_crash.inc +SET SESSION DEBUG='+d,force_crash'; +--error 2013 +ALTER TABLESPACE tab04k ENCRYPTION 'Y'; + +--source include/wait_until_disconnected.inc +--remove_files_wildcard $MYSQLD_DATADIR *.dblwr + +--source include/start_mysqld.inc + +DROP TABLE tt_4; +DROP TABLESPACE tab04k; diff --git a/storage/innobase/buf/buf0lru.cc b/storage/innobase/buf/buf0lru.cc index bb000b150d5..399fcb55de1 100644 --- a/storage/innobase/buf/buf0lru.cc +++ b/storage/innobase/buf/buf0lru.cc @@ -567,6 +567,11 @@ rescan: prev = UT_LIST_GET_PREV(list, bpage); + DBUG_EXECUTE_IF( + "force_crash", static int space_flushed = 0; + if (id == bpage->id.space())++ space_flushed; + if (space_flushed > 1) { DBUG_SUICIDE(); }); + /* If flush observer is NULL, flush page for space id, or flush page for flush observer. */ if ((observer != nullptr && observer != bpage->get_flush_observer()) || diff --git a/storage/innobase/os/os0file.cc b/storage/innobase/os/os0file.cc index 322f16bbb50..1b44dc77b4c 100644 --- a/storage/innobase/os/os0file.cc +++ b/storage/innobase/os/os0file.cc @@ -1713,6 +1713,10 @@ static dberr_t os_file_io_complete(const IORequest &type, os_file_t fh, if (ret == DB_SUCCESS) { return (os_file_decompress_page(type.is_dblwr(), buf, scratch, len)); } else { + ib::error() << "Decryption failure for page: " + << page_id_t(mach_read_from_4(buf + FIL_PAGE_SPACE_ID), + mach_read_from_4(buf + FIL_PAGE_OFFSET)); + return (ret); } } else if (type.punch_hole()) { -- 2.25.1