• unknown's avatar
    WL#3071 Maria checkpoint, WL#3072 Maria recovery · fc0a25ec
    unknown authored
    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
    fc0a25ec
ma_checkpoint.c 46.2 KB