|
| 1 | +--echo # |
| 2 | +--echo # bug#30209760 : ASSERTION FAILURE: SRV0START.CC:969:SUCCESS THREAD |
| 3 | +--echo # |
| 4 | + |
| 5 | +--source include/have_debug.inc |
| 6 | + |
| 7 | +--disable_query_log |
| 8 | +call mtr.add_suppression("\\[ERROR\\] .*MY-\\d+.* [InnoDB] Assertion failure: srv0start.cc"); |
| 9 | +--enable_query_log |
| 10 | + |
| 11 | +--echo ######### |
| 12 | +--echo # SETUP # |
| 13 | +--echo ######### |
| 14 | +let $MYSQLD_BASEDIR= `select @@basedir`; |
| 15 | +let $START_PAGE_SIZE= `select @@innodb_page_size`; |
| 16 | +let $LOG_FILE_SIZE= `select @@innodb_log_file_size`; |
| 17 | + |
| 18 | +--echo # Create path for ibdata* & undo* files |
| 19 | +--mkdir $MYSQL_TMP_DIR/innodb_undo_data_dir |
| 20 | +--mkdir $MYSQL_TMP_DIR/innodb_data_home_dir |
| 21 | +--mkdir $MYSQL_TMP_DIR/datadir |
| 22 | + |
| 23 | +# Set path for --datadir |
| 24 | +let $MYSQLD_DATADIR = $MYSQL_TMP_DIR/datadir/data; |
| 25 | + |
| 26 | +# Set path for undo* files. |
| 27 | +let $MYSQLD_UNDO_DATADIR = $MYSQL_TMP_DIR/innodb_undo_data_dir; |
| 28 | + |
| 29 | +# Set path for ibdata* files. |
| 30 | +let $MYSQLD_HOME_DATA_DIR = $MYSQL_TMP_DIR/innodb_data_home_dir; |
| 31 | + |
| 32 | +--echo # create bootstrap file |
| 33 | +let $BOOTSTRAP_SQL=$MYSQL_TMP_DIR/boot.sql; |
| 34 | +write_file $BOOTSTRAP_SQL; |
| 35 | +CREATE DATABASE test; |
| 36 | +EOF |
| 37 | + |
| 38 | +--echo # Stop the MTR default DB server |
| 39 | +--source include/shutdown_mysqld.inc |
| 40 | + |
| 41 | +--echo ######################################################################### |
| 42 | +--echo # INITIALIZE NEW SERVER |
| 43 | +--echo ######################################################################### |
| 44 | +let NEW_CMD = $MYSQLD --no-defaults --innodb_dedicated_server=OFF --initialize-insecure --innodb_log_file_size=$LOG_FILE_SIZE --innodb_page_size=$START_PAGE_SIZE --innodb_data_home_dir=$MYSQLD_HOME_DATA_DIR --innodb_undo_directory=$MYSQLD_UNDO_DATADIR --basedir=$MYSQLD_BASEDIR --datadir=$MYSQLD_DATADIR --init-file=$BOOTSTRAP_SQL --secure-file-priv=""; |
| 45 | + |
| 46 | +--echo # Server should be initialized successfully. |
| 47 | +--exec $NEW_CMD |
| 48 | + |
| 49 | +--echo ######################################################################### |
| 50 | +--echo # RESTART 2 : WITH KEYRING PLUGIN. |
| 51 | +--echo innodb_undo_log_encrypt=ON. |
| 52 | +--echo Crash server before purge thread could start. |
| 53 | +--echo ######################################################################### |
| 54 | +# Restart the server with undo_log_encrypt=ON and make sure it asserts before |
| 55 | +# Purge thread is started (i.e. before master thread could have started to |
| 56 | +# rotate default master key. At this time, |
| 57 | +# - UNDO tablespace would have been encrypted with default master key |
| 58 | +# - Header page for UNDO tablespace wouldn't have been flushed |
| 59 | +# - So encryption information is still in REDO Log. |
| 60 | +let $NEW_CMD = $MYSQLD --innodb_dedicated_server=OFF --innodb_log_file_size=$LOG_FILE_SIZE --innodb_page_size=$START_PAGE_SIZE --innodb_data_home_dir=$MYSQLD_HOME_DATA_DIR --innodb_undo_directory=$MYSQLD_UNDO_DATADIR --basedir=$MYSQLD_BASEDIR --datadir=$MYSQLD_DATADIR --early-plugin-load=keyring_file=$KEYRING_PLUGIN --loose-keyring_file_data=$MYSQL_TMP_DIR/mysecret_keyring $KEYRING_PLUGIN_OPT --innodb_undo_log_encrypt=ON --debug=d,crash_before_purge_thread; |
| 61 | +--error 1,2,42 |
| 62 | +--exec $NEW_CMD |
| 63 | + |
| 64 | +--echo ######################################################################### |
| 65 | +--echo # RESTART 3 : WITH KEYRING PLUGIN. |
| 66 | +--echo innodb_undo_log_encrypt=ON. |
| 67 | +--echo Skip rotating default master key in master thread |
| 68 | +--echo ######################################################################### |
| 69 | +# Here server would start and UNDO encryption key would be loaded in-mem |
| 70 | +# successfully after reading them from REDO Log during scan. |
| 71 | +# NOTE: without the fix |
| 72 | +# - the encryption information wouldn't be applied on page 0. |
| 73 | +# - And as we don't allow master thread to rotate default master key, UNDO |
| 74 | +# tablespace encryption information will be lost at next restart. |
| 75 | +let $restart_parameters = restart: --innodb_dedicated_server=OFF --innodb_log_file_size=$LOG_FILE_SIZE --innodb_page_size=$START_PAGE_SIZE --innodb_data_home_dir=$MYSQLD_HOME_DATA_DIR --innodb_undo_directory=$MYSQLD_UNDO_DATADIR --basedir=$MYSQLD_BASEDIR --datadir=$MYSQLD_DATADIR --early-plugin-load=keyring_file=$KEYRING_PLUGIN --loose-keyring_file_data=$MYSQL_TMP_DIR/mysecret_keyring $KEYRING_PLUGIN_OPT --innodb_undo_log_encrypt=ON --debug=d,skip_rotating_default_master_key; |
| 76 | +--source include/start_mysqld_no_echo.inc |
| 77 | + |
| 78 | +--echo ######################################################################### |
| 79 | +--echo # RESTART 4 : WITH KEYRING PLUGIN. |
| 80 | +--echo innodb_undo_log_encrypt=OFF. |
| 81 | +--echo ######################################################################### |
| 82 | +# During this restart, without the fix: |
| 83 | +# - Encryption information will be looked for on page 0. But as it wasn't |
| 84 | +# applied in previous start, it wouldn't be found thus ASSERT will be hit. |
| 85 | +let $restart_parameters = restart: --innodb_dedicated_server=OFF --innodb_log_file_size=$LOG_FILE_SIZE --innodb_page_size=$START_PAGE_SIZE --innodb_data_home_dir=$MYSQLD_HOME_DATA_DIR --innodb_undo_directory=$MYSQLD_UNDO_DATADIR --basedir=$MYSQLD_BASEDIR --datadir=$MYSQLD_DATADIR --early-plugin-load=keyring_file=$KEYRING_PLUGIN --loose-keyring_file_data=$MYSQL_TMP_DIR/mysecret_keyring $KEYRING_PLUGIN_OPT --innodb_undo_log_encrypt=OFF; |
| 86 | +--source include/restart_mysqld_no_echo.inc |
| 87 | + |
| 88 | +--echo # Shutdown the running server |
| 89 | +SHUTDOWN; |
| 90 | + |
| 91 | +--echo ########### |
| 92 | +--echo # CLEANUP # |
| 93 | +--echo ########### |
| 94 | +--echo # Restart the server with MTR default |
| 95 | +--let $restart_parameters= |
| 96 | +--source include/start_mysqld_no_echo.inc |
| 97 | +#--source include/restart_mysqld_no_echo.inc |
| 98 | + |
| 99 | +# Remove residue files |
| 100 | +--remove_file $BOOTSTRAP_SQL |
| 101 | +--remove_file $MYSQL_TMP_DIR/mysecret_keyring |
| 102 | +--force-rmdir $MYSQL_TMP_DIR/datadir |
| 103 | +--force-rmdir $MYSQL_TMP_DIR/innodb_data_home_dir |
| 104 | +--force-rmdir $MYSQL_TMP_DIR/innodb_undo_data_dir |
0 commit comments