summaryrefslogtreecommitdiff
path: root/storage/innobase/srv
diff options
context:
space:
mode:
authorMarko Mäkelä <marko.makela@mariadb.com>2017-02-16 09:18:46 +0200
committerMarko Mäkelä <marko.makela@mariadb.com>2017-02-16 09:18:46 +0200
commit34bbc76f1c1f6968cdcf65dee2d887ab71557e5c (patch)
tree7f3a15f6c2c5127ac9089424197039fc8fcaa8c3 /storage/innobase/srv
parent7a5288015c8afeaaef4d5dd04057f78c7978eeee (diff)
downloadmariadb-git-34bbc76f1c1f6968cdcf65dee2d887ab71557e5c.tar.gz
Simplify a WL#6494/WL#7142 test.mariadb-10.2.4
The test innodb.log_file_size_checkpoint was originally added to MySQL 5.7 by me in a bug fix, to fix the interaction of WL#6494 (redo log resizing, introduced in MySQL 5.6) and WL#7142 (data file discovery based on MLOG_FILE_NAME records, introduced in MySQL 5.7): commit 70f9ef4e1220827132b50275ca7272f2bcca1864 Author: Marko Mäkelä <marko.makela@oracle.com> Date: Wed May 21 13:31:29 2014 +0300 Bug#18755095 REDO LOG SIZE CHANGE AFTER CRASH RESULTS IN CHECKPOINT AGE ERROR MESSAGE This is a regression from fixing Bug#18730524 REPEATED KILL+RESTART FAILS DUE TO MISSING MLOG_FILE_NAME RECORD innobase_start_or_create_for_mysql(): Invoke fil_names_clear() before creating the "checkpoint" when changing redo log files. Approved by Jimmy Yang on IM. The relevant part of the test is that fil_names_clear() is invoked to emit an MLOG_CHECKPOINT record before the redo log files are deleted. In case the server is killed before ib_logfile0 has been deleted, the old (not-yet-resized) redo log will be treated as valid. We do not need to create a large number of tables for that.
Diffstat (limited to 'storage/innobase/srv')
-rw-r--r--storage/innobase/srv/srv0start.cc16
1 files changed, 13 insertions, 3 deletions
diff --git a/storage/innobase/srv/srv0start.cc b/storage/innobase/srv/srv0start.cc
index 193003fb9a6..8afa90502d0 100644
--- a/storage/innobase/srv/srv0start.cc
+++ b/storage/innobase/srv/srv0start.cc
@@ -421,9 +421,11 @@ create_log_files(
DBUG_EXECUTE_IF("innodb_log_abort_6", return(DB_ERROR););
}
+ DBUG_PRINT("ib_log", ("After innodb_log_abort_6"));
ut_ad(!buf_pool_check_no_pending_io());
DBUG_EXECUTE_IF("innodb_log_abort_7", return(DB_ERROR););
+ DBUG_PRINT("ib_log", ("After innodb_log_abort_7"));
for (unsigned i = 0; i < srv_n_log_files; i++) {
sprintf(logfilename + dirnamelen,
@@ -437,6 +439,7 @@ create_log_files(
}
DBUG_EXECUTE_IF("innodb_log_abort_8", return(DB_ERROR););
+ DBUG_PRINT("ib_log", ("After innodb_log_abort_8"));
/* We did not create the first log file initially as
ib_logfile0, so that crash recovery cannot find it until it
@@ -445,7 +448,7 @@ create_log_files(
fil_space_t* log_space = fil_space_create(
"innodb_redo_log", SRV_LOG_SPACE_FIRST_ID, 0, FIL_TYPE_LOG,
- NULL, /* No encryption yet */
+ NULL, /* innodb_encrypt_log works at a different level */
true /* this is create */);
ut_a(fil_validate());
ut_a(log_space != NULL);
@@ -513,6 +516,7 @@ create_log_files_rename(
fil_flush(SRV_LOG_SPACE_FIRST_ID);
DBUG_EXECUTE_IF("innodb_log_abort_9", return(DB_ERROR););
+ DBUG_PRINT("ib_log", ("After innodb_log_abort_9"));
/* Close the log files, so that we can rename
the first one. */
@@ -1348,6 +1352,8 @@ lsn_t
srv_prepare_to_delete_redo_log_files(
ulint n_files)
{
+ DBUG_ENTER("srv_prepare_to_delete_redo_log_files");
+
lsn_t flushed_lsn;
ulint pending_io = 0;
ulint count = 0;
@@ -1356,7 +1362,8 @@ srv_prepare_to_delete_redo_log_files(
/* Clean the buffer pool. */
buf_flush_sync_all_buf_pools();
- DBUG_EXECUTE_IF("innodb_log_abort_1", return(0););
+ DBUG_EXECUTE_IF("innodb_log_abort_1", DBUG_RETURN(0););
+ DBUG_PRINT("ib_log", ("After innodb_log_abort_1"));
log_mutex_enter();
@@ -1426,7 +1433,7 @@ srv_prepare_to_delete_redo_log_files(
} while (buf_pool_check_no_pending_io());
- return(flushed_lsn);
+ DBUG_RETURN(flushed_lsn);
}
/********************************************************************
@@ -2346,11 +2353,13 @@ files_checked:
DBUG_EXECUTE_IF("innodb_log_abort_3",
return(srv_init_abort(DB_ERROR)););
+ DBUG_PRINT("ib_log", ("After innodb_log_abort_3"));
/* Stamp the LSN to the data files. */
err = fil_write_flushed_lsn(flushed_lsn);
DBUG_EXECUTE_IF("innodb_log_abort_4", err = DB_ERROR;);
+ DBUG_PRINT("ib_log", ("After innodb_log_abort_4"));
if (err != DB_SUCCESS) {
return(srv_init_abort(err));
@@ -2362,6 +2371,7 @@ files_checked:
DBUG_EXECUTE_IF("innodb_log_abort_5",
return(srv_init_abort(DB_ERROR)););
+ DBUG_PRINT("ib_log", ("After innodb_log_abort_5"));
/* Free the old log file space. */
log_group_close_all();