summaryrefslogtreecommitdiff
path: root/storage/maria/ma_checkpoint.c
diff options
context:
space:
mode:
authorunknown <guilhem@gbichot4.local>2007-11-16 17:09:51 +0100
committerunknown <guilhem@gbichot4.local>2007-11-16 17:09:51 +0100
commitfc0a25ec49f32fd292cb87c8a855e1569ccf8878 (patch)
tree123becbb97b9230e9b90a9b32b9b885ab9a7fd93 /storage/maria/ma_checkpoint.c
parentce2fbd9e9abdf37c0db07564c1f9d62d17f1315a (diff)
downloadmariadb-git-fc0a25ec49f32fd292cb87c8a855e1569ccf8878.tar.gz
WL#3071 Maria checkpoint, WL#3072 Maria recovery
instead of fprintf(stderr) when a task (with no user connected) gets an error, use my_printf_error(). Flags ME_JUST_WARNING and ME_JUST_INFO added to my_error()/my_printf_error(), which pass it to my_message_sql() which is modified to call the appropriate sql_print_*(). This way recovery can signal its start and end with [Note] and not [ERROR] (but failure with [ERROR]). Recovery's detailed progress (percents etc) still uses stderr as they have to stay on one single line. sql_print_error() changed to use my_progname_short (nicer display). mysql-test-run.pl --gdb/--ddd does not run mysqld, because a breakpoint in mysql_parse is too late to debug startup problems; instead, dev should set the breakpoints it wants and then "run" ("r"). include/my_sys.h: new flags to tell error_handler_hook that this is not an error but an information or warning mysql-test/mysql-test-run.pl: when running with --gdb/--ddd to debug mysqld, breaking at mysql_parse is too late to debug startup problems; now, it does not run mysqld, does not set breakpoints, developer can set as early breakpoints as it wants and is responsible for typing "run" (or "r") mysys/my_init.c: set my_progname_short mysys/my_static.c: my_progname_short added sql/mysqld.cc: * my_message_sql() can now receive info or warning, not only error; this allows mysys to tell the user (or the error log if no user) about an info or warning. Used from Maria. * plugins (or engines like Maria) may want to call my_error(), so set up the error handler hook (my_message_sql) before initializing plugins; otherwise they get my_message_no_curses which is less integrated into mysqld (is just fputs()) * using my_progname_short instead of my_progname, in my_message_sql() (less space on screen) storage/maria/ma_checkpoint.c: fprintf(stderr) -> ma_message_no_user() storage/maria/ma_checkpoint.h: function for any Maria task, not connected to a user (example: checkpoint, recovery; soon could be deleted records purger) to report a message (calls my_printf_error() which, when inside ha_maria, leads to sql_print_*(), and when outside, leads to my_message_no_curses i.e. stderr). storage/maria/ma_recovery.c: To tell that recovery starts and ends we use ma_message_no_user() (sql_print_*() in practice). Detailed progress info still uses stderr as sql_print() cannot put several messages on one line. 071116 18:42:16 [Note] mysqld: Maria engine: starting recovery recovered pages: 0% 67% 100% (0.0 seconds); transactions to roll back: 1 0 (0.0 seconds); tables to flush: 1 0 (0.0 seconds); 071116 18:42:16 [Note] mysqld: Maria engine: recovery done storage/maria/maria_chk.c: my_progname_short moved to mysys storage/maria/maria_read_log.c: my_progname_short moved to mysys storage/myisam/myisamchk.c: my_progname_short moved to mysys
Diffstat (limited to 'storage/maria/ma_checkpoint.c')
-rw-r--r--storage/maria/ma_checkpoint.c34
1 files changed, 16 insertions, 18 deletions
diff --git a/storage/maria/ma_checkpoint.c b/storage/maria/ma_checkpoint.c
index c881e69b806..0aa545836ad 100644
--- a/storage/maria/ma_checkpoint.c
+++ b/storage/maria/ma_checkpoint.c
@@ -281,14 +281,14 @@ static int really_execute_checkpoint(void)
*/
#if 0 /* purging/keeping will be an option */
if (translog_purge(log_low_water_mark))
- fprintf(stderr, "Maria engine: log purge failed\n"); /* not deadly */
+ ma_message_no_user(0, "log purging failed");
#endif
goto end;
err:
error= 1;
- fprintf(stderr, "Maria engine: checkpoint failed\n"); /* TODO: improve ;) */
+ ma_message_no_user(0, "checkpoint failed");
/* we were possibly not able to determine what pages to flush */
pages_to_flush_before_next_checkpoint= 0;
@@ -674,8 +674,7 @@ pthread_handler_t ma_checkpoint_background(void *arg)
filter_flush_file_evenly,
&filter_param);
if (unlikely(res & PCFLUSH_ERROR))
- fprintf(stderr, "Maria engine: warning - background data page"
- " flush failed\n");
+ ma_message_no_user(0, "background data page flush failed");
if (filter_param.max_pages == 0) /* bunch all flushed, sleep */
break; /* and we will continue with the same file */
dfile++; /* otherwise all this file is flushed, move to next file */
@@ -696,8 +695,7 @@ pthread_handler_t ma_checkpoint_background(void *arg)
filter_flush_file_evenly,
&filter_param);
if (unlikely(res & PCFLUSH_ERROR))
- fprintf(stderr, "Maria engine: warning - background index page"
- " flush failed\n");
+ ma_message_no_user(0, "background index page flush failed");
if (filter_param.max_pages == 0) /* bunch all flushed, sleep */
break; /* and we will continue with the same file */
kfile++; /* otherwise all this file is flushed, move to next file */
@@ -1148,18 +1146,18 @@ static int collect_tables(LEX_STRING *str, LSN checkpoint_start_log_horizon)
flushed, as the REDOs about it will be skipped, it will wrongly not be
recovered. If bitmap pages had a rec_lsn it would be different.
*/
- if (((filter_param.is_data_file= TRUE),
- (flush_pagecache_blocks_with_filter(maria_pagecache,
- &dfile, FLUSH_KEEP,
- filter, &filter_param) &
- PCFLUSH_ERROR)) ||
- ((filter_param.is_data_file= FALSE),
- (flush_pagecache_blocks_with_filter(maria_pagecache,
- &kfile, FLUSH_KEEP,
- filter, &filter_param) &
- PCFLUSH_ERROR)))
- fprintf(stderr, "Maria engine: warning - checkpoint page flush"
- " failed\n"); /** @todo improve */
+ if ((filter_param.is_data_file= TRUE),
+ (flush_pagecache_blocks_with_filter(maria_pagecache,
+ &dfile, FLUSH_KEEP,
+ filter, &filter_param) &
+ PCFLUSH_ERROR))
+ ma_message_no_user(0, "checkpoint data page flush failed");
+ if ((filter_param.is_data_file= FALSE),
+ (flush_pagecache_blocks_with_filter(maria_pagecache,
+ &kfile, FLUSH_KEEP,
+ filter, &filter_param) &
+ PCFLUSH_ERROR))
+ ma_message_no_user(0, "checkpoint index page flush failed");
/*
fsyncs the fd, that's the loooong operation (e.g. max 150 fsync
per second, so if you have touched 1000 files it's 7 seconds).