Browse Source
WL#3072 Maria recovery.
WL#3072 Maria recovery.
* Thanks to Serg's tip, we fix here the compilation issue of REDO_REPAIR_TABLE's execution, by defining versions of _ma_killed_ptr() and _ma_check_print_info|warning|error() in maria_read_log.c (we move those of maria_chk.c into an include file and include it in maria_chk.c and maria_read_log.c). Execution of such record looks like working from my tests (it only happens in maria_read_log; recovery-from-mysqld skips DDLs and REPAIR is considered DDL here as it bypasses logging): tested ALTER TABLE ENABLE KEYS and then remove table, apply log: that did a repair. * Recent changes broke maria_read_log a bit: -a became default and -o caused error; fixing this. storage/maria/Makefile.am: addind new file storage/maria/ma_recovery.c: enable execution of REDO_REPAIR_TABLE by maria_read_log now that it compiles. Now reason to keep only T_QUICK from testflag. storage/maria/maria_chk.c: moving these functions to ma_check_standalone.h for reusability storage/maria/maria_def.h: comment storage/maria/maria_read_log.c: ma_check_standalone.h needs my_progname_short. Fixing bug where "maria_read_log" would default to -a and "maria_read_log -o" would throw an error. Implemented behaviour is: - no options: usage() - -a : applys, applys UNDOs by default unless --disable-undo - -o : only prints storage/maria/ma_check_standalone.h: All standalone programs which need to use functions from ma_check.c (like maria_repair()) must define their version of _ma_killed_ptr() and _ma_check_print_info|warning|error(). Indeed, linking with ma_check.o brings in the dependencies of ma_check.o which are definitions of the above functions; if the program does not define them then the ones of ha_maria.o are used i.e. ha_maria.o is linked into the program, and this brings dependencies of ha_maria.o on mysqld.o into the program's linking which thus fails, as the program is not linked with mysqld.o. We put in this file the functions which maria_chk.c uses, so that they can be reused by maria_read_log (when it replays REDO_REPAIR_TABLE) as they are good enough (they just print to stdout/stderr like maria_read_log already does).pull/374/head
6 changed files with 124 additions and 102 deletions
-
2storage/maria/Makefile.am
-
106storage/maria/ma_check_standalone.h
-
12storage/maria/ma_recovery.c
-
82storage/maria/maria_chk.c
-
5storage/maria/maria_def.h
-
19storage/maria/maria_read_log.c
@ -0,0 +1,106 @@ |
|||
/* Copyright (C) 2007 MySQL AB |
|||
|
|||
This program is free software; you can redistribute it and/or modify |
|||
it under the terms of the GNU General Public License as published by |
|||
the Free Software Foundation; version 2 of the License. |
|||
|
|||
This program is distributed in the hope that it will be useful, |
|||
but WITHOUT ANY WARRANTY; without even the implied warranty of |
|||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
|||
GNU General Public License for more details. |
|||
|
|||
You should have received a copy of the GNU General Public License |
|||
along with this program; if not, write to the Free Software |
|||
Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ |
|||
|
|||
/* |
|||
All standalone programs which need to use functions from ma_check.c |
|||
(like maria_repair()) must define their version of _ma_killed_ptr() |
|||
and _ma_check_print_info|warning|error(). Indeed, linking with ma_check.o |
|||
brings in the dependencies of ma_check.o which are definitions of the above |
|||
functions; if the program does not define them then the ones of |
|||
ha_maria.o are used i.e. ha_maria.o is linked into the program, and this |
|||
brings dependencies of ha_maria.o on mysqld.o into the program's linking |
|||
which thus fails, as the program is not linked with mysqld.o. |
|||
This file contains the versions of these functions used by maria_chk and |
|||
maria_read_log. |
|||
*/ |
|||
|
|||
/* |
|||
Check if check/repair operation was killed by a signal |
|||
*/ |
|||
|
|||
static int not_killed= 0; |
|||
|
|||
volatile int *_ma_killed_ptr(HA_CHECK *param __attribute__((unused))) |
|||
{ |
|||
return ¬_killed; /* always NULL */ |
|||
} |
|||
|
|||
/* print warnings and errors */ |
|||
/* VARARGS */ |
|||
|
|||
void _ma_check_print_info(HA_CHECK *param __attribute__((unused)), |
|||
const char *fmt,...) |
|||
{ |
|||
va_list args; |
|||
DBUG_ENTER("_ma_check_print_info"); |
|||
DBUG_PRINT("enter", ("format: %s", fmt)); |
|||
|
|||
va_start(args,fmt); |
|||
VOID(vfprintf(stdout, fmt, args)); |
|||
VOID(fputc('\n',stdout)); |
|||
va_end(args); |
|||
DBUG_VOID_RETURN; |
|||
} |
|||
|
|||
/* VARARGS */ |
|||
|
|||
void _ma_check_print_warning(HA_CHECK *param, const char *fmt,...) |
|||
{ |
|||
va_list args; |
|||
DBUG_ENTER("_ma_check_print_warning"); |
|||
DBUG_PRINT("enter", ("format: %s", fmt)); |
|||
|
|||
fflush(stdout); |
|||
if (!param->warning_printed && !param->error_printed) |
|||
{ |
|||
if (param->testflag & T_SILENT) |
|||
fprintf(stderr,"%s: MARIA file %s\n",my_progname_short, |
|||
param->isam_file_name); |
|||
param->out_flag|= O_DATA_LOST; |
|||
} |
|||
param->warning_printed=1; |
|||
va_start(args,fmt); |
|||
fprintf(stderr,"%s: warning: ",my_progname_short); |
|||
VOID(vfprintf(stderr, fmt, args)); |
|||
VOID(fputc('\n',stderr)); |
|||
fflush(stderr); |
|||
va_end(args); |
|||
DBUG_VOID_RETURN; |
|||
} |
|||
|
|||
/* VARARGS */ |
|||
|
|||
void _ma_check_print_error(HA_CHECK *param, const char *fmt,...) |
|||
{ |
|||
va_list args; |
|||
DBUG_ENTER("_ma_check_print_error"); |
|||
DBUG_PRINT("enter", ("format: %s", fmt)); |
|||
|
|||
fflush(stdout); |
|||
if (!param->warning_printed && !param->error_printed) |
|||
{ |
|||
if (param->testflag & T_SILENT) |
|||
fprintf(stderr,"%s: MARIA file %s\n",my_progname_short,param->isam_file_name); |
|||
param->out_flag|= O_DATA_LOST; |
|||
} |
|||
param->error_printed|=1; |
|||
va_start(args,fmt); |
|||
fprintf(stderr,"%s: error: ",my_progname_short); |
|||
VOID(vfprintf(stderr, fmt, args)); |
|||
VOID(fputc('\n',stderr)); |
|||
fflush(stderr); |
|||
va_end(args); |
|||
DBUG_VOID_RETURN; |
|||
} |
|||
Write
Preview
Loading…
Cancel
Save
Reference in new issue