mirror of
https://github.com/MariaDB/server.git
synced 2025-01-16 12:02:42 +01:00
24db7ed7e1
* 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).
106 lines
3.2 KiB
C
106 lines
3.2 KiB
C
/* 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;
|
|
}
|