Small improvements to aria recovery
I spent 4 hours on work and 12 hours of testing to try to find the reason for aria crashing in recovery when starting a new test, in which case the 'data directory' should be a copy of "install.db", but aria_log.00000001 content was not correct. The following changes are mostly done to make it a bit easier to find out more in case of future similar crashes: - Mark last_checkpoint_lsn volatile (safety). - Write checkpoint message to aria_recovery.trace - When compling with DBUG and with HAVE_DBUG_TRANSLOG_SRC, use checksum's for Aria log pages. We cannot have it on by default for DBUG servers yet as there is bugs when changing CRC between restarts. - Added a message to mtr --verbose when copying the data directory. - Removed extra linefeed in Aria recovery message (cleanup)
This commit is contained in:
parent
66dde8a54e
commit
cbf60dba74
@ -2713,6 +2713,7 @@ sub mysql_server_start($) {
|
|||||||
# Copy datadir from installed system db
|
# Copy datadir from installed system db
|
||||||
my $path= ($opt_parallel == 1) ? "$opt_vardir" : "$opt_vardir/..";
|
my $path= ($opt_parallel == 1) ? "$opt_vardir" : "$opt_vardir/..";
|
||||||
my $install_db= "$path/install.db";
|
my $install_db= "$path/install.db";
|
||||||
|
mtr_verbose("copying $install_db to $datadir");
|
||||||
copytree($install_db, $datadir) if -d $install_db;
|
copytree($install_db, $datadir) if -d $install_db;
|
||||||
mtr_error("Failed to copy system db to '$datadir'") unless -d $datadir;
|
mtr_error("Failed to copy system db to '$datadir'") unless -d $datadir;
|
||||||
}
|
}
|
||||||
|
@ -104,7 +104,7 @@ one should increment the control file version number.
|
|||||||
This LSN serves for the two-checkpoint rule, and also to find the
|
This LSN serves for the two-checkpoint rule, and also to find the
|
||||||
checkpoint record when doing a recovery.
|
checkpoint record when doing a recovery.
|
||||||
*/
|
*/
|
||||||
LSN last_checkpoint_lsn= LSN_IMPOSSIBLE;
|
volatile LSN last_checkpoint_lsn= LSN_IMPOSSIBLE;
|
||||||
uint32 last_logno= FILENO_IMPOSSIBLE;
|
uint32 last_logno= FILENO_IMPOSSIBLE;
|
||||||
/**
|
/**
|
||||||
The maximum transaction id given to a transaction. It is only updated at
|
The maximum transaction id given to a transaction. It is only updated at
|
||||||
|
@ -37,7 +37,7 @@ C_MODE_START
|
|||||||
LSN of the last checkoint
|
LSN of the last checkoint
|
||||||
(if last_checkpoint_lsn == LSN_IMPOSSIBLE then there was never a checkpoint)
|
(if last_checkpoint_lsn == LSN_IMPOSSIBLE then there was never a checkpoint)
|
||||||
*/
|
*/
|
||||||
extern LSN last_checkpoint_lsn;
|
extern volatile LSN last_checkpoint_lsn;
|
||||||
/*
|
/*
|
||||||
Last log number (if last_logno == FILENO_IMPOSSIBLE then there is no log
|
Last log number (if last_logno == FILENO_IMPOSSIBLE then there is no log
|
||||||
file yet)
|
file yet)
|
||||||
|
@ -25,7 +25,11 @@
|
|||||||
/* minimum possible transaction log size */
|
/* minimum possible transaction log size */
|
||||||
#define TRANSLOG_MIN_FILE_SIZE (8*MB)
|
#define TRANSLOG_MIN_FILE_SIZE (8*MB)
|
||||||
/* transaction log default flags (TODO: make it global variable) */
|
/* transaction log default flags (TODO: make it global variable) */
|
||||||
|
#ifdef HAVE_DBUG_TRANSLOG_CRC
|
||||||
|
#define TRANSLOG_DEFAULT_FLAGS IF_DBUG(TRANSLOG_PAGE_CRC,0)
|
||||||
|
#else
|
||||||
#define TRANSLOG_DEFAULT_FLAGS 0
|
#define TRANSLOG_DEFAULT_FLAGS 0
|
||||||
|
#endif
|
||||||
|
|
||||||
/*
|
/*
|
||||||
Transaction log flags.
|
Transaction log flags.
|
||||||
|
@ -133,7 +133,7 @@ static void new_transaction(uint16 sid, TrID long_id, LSN undo_lsn,
|
|||||||
static int new_table(uint16 sid, const char *name, LSN lsn_of_file_id);
|
static int new_table(uint16 sid, const char *name, LSN lsn_of_file_id);
|
||||||
static int new_page(uint32 fileid, pgcache_page_no_t pageid, LSN rec_lsn,
|
static int new_page(uint32 fileid, pgcache_page_no_t pageid, LSN rec_lsn,
|
||||||
struct st_dirty_page *dirty_page);
|
struct st_dirty_page *dirty_page);
|
||||||
static int close_all_tables(void);
|
static int close_all_tables(my_bool force_end_newline);
|
||||||
static my_bool close_one_table(const char *name, TRANSLOG_ADDRESS addr);
|
static my_bool close_one_table(const char *name, TRANSLOG_ADDRESS addr);
|
||||||
static void print_redo_phase_progress(TRANSLOG_ADDRESS addr);
|
static void print_redo_phase_progress(TRANSLOG_ADDRESS addr);
|
||||||
static void delete_all_transactions();
|
static void delete_all_transactions();
|
||||||
@ -467,7 +467,7 @@ int maria_apply_log(LSN from_lsn, LSN end_redo_lsn, LSN end_undo_lsn,
|
|||||||
we don't use maria_panic() because it would maria_end(), and Recovery does
|
we don't use maria_panic() because it would maria_end(), and Recovery does
|
||||||
not want that (we want to keep some modules initialized for runtime).
|
not want that (we want to keep some modules initialized for runtime).
|
||||||
*/
|
*/
|
||||||
if (close_all_tables())
|
if (close_all_tables(0))
|
||||||
{
|
{
|
||||||
ma_message_no_user(0, "closing of tables failed");
|
ma_message_no_user(0, "closing of tables failed");
|
||||||
goto err;
|
goto err;
|
||||||
@ -495,6 +495,8 @@ int maria_apply_log(LSN from_lsn, LSN end_redo_lsn, LSN end_undo_lsn,
|
|||||||
/* No dirty pages, all tables are closed, no active transactions, save: */
|
/* No dirty pages, all tables are closed, no active transactions, save: */
|
||||||
if (ma_checkpoint_execute(CHECKPOINT_FULL, FALSE))
|
if (ma_checkpoint_execute(CHECKPOINT_FULL, FALSE))
|
||||||
goto err;
|
goto err;
|
||||||
|
tprint(tracef, "checkpoint done at " LSN_FMT "\n",
|
||||||
|
LSN_IN_PARTS(last_checkpoint_lsn));
|
||||||
}
|
}
|
||||||
|
|
||||||
goto end;
|
goto end;
|
||||||
@ -505,7 +507,7 @@ err2:
|
|||||||
delete_all_transactions();
|
delete_all_transactions();
|
||||||
if (!abort_message_printed)
|
if (!abort_message_printed)
|
||||||
error= 1;
|
error= 1;
|
||||||
if (close_all_tables())
|
if (close_all_tables(1))
|
||||||
{
|
{
|
||||||
ma_message_no_user(0, "closing of tables failed");
|
ma_message_no_user(0, "closing of tables failed");
|
||||||
}
|
}
|
||||||
@ -3472,7 +3474,7 @@ static int new_page(uint32 fileid, pgcache_page_no_t pageid, LSN rec_lsn,
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
static int close_all_tables(void)
|
static int close_all_tables(my_bool force_end_newline)
|
||||||
{
|
{
|
||||||
int error= 0;
|
int error= 0;
|
||||||
uint count= 0;
|
uint count= 0;
|
||||||
@ -3537,7 +3539,7 @@ static int close_all_tables(void)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
end:
|
end:
|
||||||
if (recovery_message_printed == REC_MSG_FLUSH)
|
if (recovery_message_printed == REC_MSG_FLUSH && (force_end_newline || error))
|
||||||
{
|
{
|
||||||
fputc('\n', stderr);
|
fputc('\n', stderr);
|
||||||
fflush(stderr);
|
fflush(stderr);
|
||||||
|
@ -87,7 +87,7 @@ void eprint(FILE *trace_file __attribute__ ((unused)),
|
|||||||
if (!trace_file)
|
if (!trace_file)
|
||||||
trace_file= stderr;
|
trace_file= stderr;
|
||||||
|
|
||||||
if (procent_printed)
|
if (procent_printed && trace_file == stderr)
|
||||||
{
|
{
|
||||||
procent_printed= 0;
|
procent_printed= 0;
|
||||||
/* In silent mode, print on another line than the 0% 10% 20% line */
|
/* In silent mode, print on another line than the 0% 10% 20% line */
|
||||||
|
Loading…
x
Reference in New Issue
Block a user