diff options
author | unknown <petr@mysql.com> | 2006-01-27 13:41:15 +0300 |
---|---|---|
committer | unknown <petr@mysql.com> | 2006-01-27 13:41:15 +0300 |
commit | 3017b77987c77f19465eb341ee2ee00500aab783 (patch) | |
tree | 58fea346faedf8fd83ad12447ceb21a751a902ba | |
parent | 375afff3bd9d427921c81c3f190789b96c9c83ee (diff) | |
download | mariadb-git-3017b77987c77f19465eb341ee2ee00500aab783.tar.gz |
Use one option --log-output[=option[,option...]]
instead of current --old-log-format and
--both-log-formats options
mysql-test/mysql-test-run.pl:
use new option instead of the old one for testing
mysql-test/r/im_utils.result:
correct result file
sql/log.cc:
use log event handler flags instead of enum_printer
sql/log.h:
Add log event handler flags to simplify log
option processing
-rwxr-xr-x | mysql-test/mysql-test-run.pl | 2 | ||||
-rw-r--r-- | mysql-test/r/im_utils.result | 4 | ||||
-rw-r--r-- | sql/log.cc | 67 | ||||
-rw-r--r-- | sql/log.h | 24 | ||||
-rw-r--r-- | sql/mysqld.cc | 92 |
5 files changed, 102 insertions, 87 deletions
diff --git a/mysql-test/mysql-test-run.pl b/mysql-test/mysql-test-run.pl index e0bbeec7a87..971e49e108e 100755 --- a/mysql-test/mysql-test-run.pl +++ b/mysql-test/mysql-test-run.pl @@ -1832,7 +1832,7 @@ EOF ; print OUT "nonguarded\n" if $instance->{'nonguarded'}; - print OUT "old-log-format\n" if $instance->{'old_log_format'}; + print OUT "log-output=FILE\n" if $instance->{'old_log_format'}; print OUT "\n"; } diff --git a/mysql-test/r/im_utils.result b/mysql-test/r/im_utils.result index e204affc8ec..504b2efe4af 100644 --- a/mysql-test/r/im_utils.result +++ b/mysql-test/r/im_utils.result @@ -21,7 +21,7 @@ skip-stack-trace VALUE skip-innodb VALUE skip-bdb VALUE skip-ndbcluster VALUE -old-log-format VALUE +log-output VALUE SHOW INSTANCE OPTIONS mysqld2; option_name value instance_name VALUE @@ -42,7 +42,7 @@ skip-stack-trace VALUE skip-innodb VALUE skip-bdb VALUE skip-ndbcluster VALUE -old-log-format VALUE +log-output VALUE START INSTANCE mysqld2; STOP INSTANCE mysqld2; SHOW mysqld1 LOG FILES; diff --git a/sql/log.cc b/sql/log.cc index b2f7eb582a7..8743eeb08ba 100644 --- a/sql/log.cc +++ b/sql/log.cc @@ -596,7 +596,7 @@ void LOGGER::init_base() file_log_handler= new Log_to_file_event_handler; /* by default we use traditional error log */ - init_error_log(LEGACY); + init_error_log(LOG_FILE); file_log_handler->init_pthread_objects(); (void) pthread_mutex_init(&LOCK_logger, MY_MUTEX_INIT_SLOW); @@ -804,41 +804,47 @@ bool LOGGER::general_log_print(THD *thd, enum enum_server_command command, return error; } -void LOGGER::init_error_log(enum enum_printer error_log_printer) +void LOGGER::init_error_log(uint error_log_printer) { - switch (error_log_printer) { - case NONE: + if (error_log_printer & LOG_NONE) + { error_log_handler_list[0]= 0; - break; - case LEGACY: + return; + } + + switch (error_log_printer) { + case LOG_FILE: error_log_handler_list[0]= file_log_handler; error_log_handler_list[1]= 0; break; /* these two are disabled for now */ - case CSV: + case LOG_TABLE: DBUG_ASSERT(0); break; - case LEGACY_AND_CSV: + case LOG_TABLE|LOG_FILE: DBUG_ASSERT(0); break; } } -void LOGGER::init_slow_log(enum enum_printer slow_log_printer) +void LOGGER::init_slow_log(uint slow_log_printer) { - switch (slow_log_printer) { - case NONE: + if (slow_log_printer & LOG_NONE) + { slow_log_handler_list[0]= 0; - break; - case LEGACY: + return; + } + + switch (slow_log_printer) { + case LOG_FILE: slow_log_handler_list[0]= file_log_handler; slow_log_handler_list[1]= 0; break; - case CSV: + case LOG_TABLE: slow_log_handler_list[0]= table_log_handler; slow_log_handler_list[1]= 0; break; - case LEGACY_AND_CSV: + case LOG_TABLE|LOG_FILE: slow_log_handler_list[0]= file_log_handler; slow_log_handler_list[1]= table_log_handler; slow_log_handler_list[2]= 0; @@ -846,21 +852,24 @@ void LOGGER::init_slow_log(enum enum_printer slow_log_printer) } } -void LOGGER::init_general_log(enum enum_printer general_log_printer) +void LOGGER::init_general_log(uint general_log_printer) { - switch (general_log_printer) { - case NONE: + if (general_log_printer & LOG_NONE) + { general_log_handler_list[0]= 0; - break; - case LEGACY: + return; + } + + switch (general_log_printer) { + case LOG_FILE: general_log_handler_list[0]= file_log_handler; general_log_handler_list[1]= 0; break; - case CSV: + case LOG_TABLE: general_log_handler_list[0]= table_log_handler; general_log_handler_list[1]= 0; break; - case LEGACY_AND_CSV: + case LOG_TABLE|LOG_FILE: general_log_handler_list[0]= file_log_handler; general_log_handler_list[1]= table_log_handler; general_log_handler_list[2]= 0; @@ -891,20 +900,20 @@ bool Log_to_csv_event_handler::init() return (open_log_table(QUERY_LOG_GENERAL) || open_log_table(QUERY_LOG_SLOW)); } -int LOGGER::set_handlers(enum enum_printer error_log_printer, - enum enum_printer slow_log_printer, - enum enum_printer general_log_printer) +int LOGGER::set_handlers(uint error_log_printer, + uint slow_log_printer, + uint general_log_printer) { /* error log table is not supported yet */ - DBUG_ASSERT(error_log_printer < CSV); + DBUG_ASSERT(error_log_printer < LOG_TABLE); lock(); - if ((slow_log_printer >= CSV || general_log_printer >= CSV) && + if ((slow_log_printer & LOG_TABLE || general_log_printer & LOG_TABLE) && !is_log_tables_initialized) { - slow_log_printer= LEGACY; - general_log_printer= LEGACY; + slow_log_printer= (slow_log_printer & ~LOG_TABLE) | LOG_FILE; + general_log_printer= (general_log_printer & ~LOG_TABLE) | LOG_FILE; sql_print_error("Failed to initialize log tables. " "Falling back to the old-fashioned logs"); diff --git a/sql/log.h b/sql/log.h index d709a73a391..d79e6bb48bd 100644 --- a/sql/log.h +++ b/sql/log.h @@ -138,14 +138,10 @@ typedef struct st_log_info */ #define MAX_LOG_HANDLERS_NUM 3 -enum enum_printer -{ - NONE, - LEGACY, - CSV, - LEGACY_AND_CSV -}; - +/* log event handler flags */ +#define LOG_NONE 1 +#define LOG_FILE 2 +#define LOG_TABLE 4 class Log_event; class Rows_log_event; @@ -491,12 +487,12 @@ public: bool reopen_log_table(uint log_type); /* we use this function to setup all enabled log event handlers */ - int set_handlers(enum enum_printer error_log_printer, - enum enum_printer slow_log_printer, - enum enum_printer general_log_printer); - void init_error_log(enum enum_printer error_log_printer); - void init_slow_log(enum enum_printer slow_log_printer); - void init_general_log(enum enum_printer general_log_printer); + int set_handlers(uint error_log_printer, + uint slow_log_printer, + uint general_log_printer); + void init_error_log(uint error_log_printer); + void init_slow_log(uint slow_log_printer); + void init_general_log(uint general_log_printer); }; #endif /* LOG_H */ diff --git a/sql/mysqld.cc b/sql/mysqld.cc index 27cdc800a6a..6dbf084f9b9 100644 --- a/sql/mysqld.cc +++ b/sql/mysqld.cc @@ -297,8 +297,16 @@ arg_cmp_func Arg_comparator::comparator_matrix[5][2] = {&Arg_comparator::compare_row, &Arg_comparator::compare_e_row}, {&Arg_comparator::compare_decimal, &Arg_comparator::compare_e_decimal}}; +const char *log_output_names[] = +{ "NONE", "FILE", "TABLE", NullS}; +TYPELIB log_output_typelib= {array_elements(log_output_names)-1,"", + log_output_names, NULL}; + /* static variables */ +/* the default log output is log tables */ +static const char *log_output_str= "TABLE"; +static ulong log_output_options= LOG_TABLE; static bool lower_case_table_names_used= 0; static bool volatile select_thread_in_use, signal_thread_in_use; static bool volatile ready_to_exit; @@ -332,9 +340,6 @@ static my_bool opt_sync_bdb_logs; bool opt_log, opt_update_log, opt_bin_log, opt_slow_log; bool opt_error_log= IF_WIN(1,0); -#ifdef WITH_CSV_STORAGE_ENGINE -bool opt_old_log_format, opt_both_log_formats; -#endif bool opt_disable_networking=0, opt_skip_show_db=0; my_bool opt_character_set_client_handshake= 1; bool server_id_supplied = 0; @@ -2395,8 +2400,8 @@ pthread_handler_t signal_hand(void *arg __attribute__((unused))) sql_print_information("Got signal %d to shutdown mysqld",sig); #endif /* switch to the old log message processing */ - logger.set_handlers(LEGACY, opt_slow_log ? LEGACY:NONE, - opt_log ? LEGACY:NONE); + logger.set_handlers(LOG_FILE, opt_slow_log ? LOG_FILE:LOG_NONE, + opt_log ? LOG_FILE:LOG_NONE); DBUG_PRINT("info",("Got signal: %d abort_loop: %d",sig,abort_loop)); if (!abort_loop) { @@ -2425,8 +2430,8 @@ pthread_handler_t signal_hand(void *arg __attribute__((unused))) (TABLE_LIST*) 0, ¬_used); // Flush logs } /* reenable logs after the options were reloaded */ - logger.set_handlers(LEGACY, opt_slow_log ? CSV:NONE, - opt_log ? CSV:NONE); + logger.set_handlers(LOG_FILE, opt_slow_log ? LOG_TABLE:LOG_NONE, + opt_log ? LOG_TABLE:LOG_NONE); break; #ifdef USE_ONE_SIGNAL_HAND case THR_SERVER_ALARM: @@ -3085,21 +3090,20 @@ static int init_server_components() #ifdef WITH_CSV_STORAGE_ENGINE logger.init_log_tables(); - if (opt_old_log_format || (have_csv_db != SHOW_OPTION_YES)) - logger.set_handlers(LEGACY, opt_slow_log ? LEGACY:NONE, - opt_log ? LEGACY:NONE); + if (log_output_options & LOG_NONE) + logger.set_handlers(LOG_FILE, LOG_NONE, LOG_NONE); else - if (opt_both_log_formats) - logger.set_handlers(LEGACY, - opt_slow_log ? LEGACY_AND_CSV:NONE, - opt_log ? LEGACY_AND_CSV:NONE); - else - /* the default is CSV log tables */ - logger.set_handlers(LEGACY, opt_slow_log ? CSV:NONE, - opt_log ? CSV:NONE); + { + /* fall back to the log files if tables are not present */ + if (have_csv_db == SHOW_OPTION_NO) + log_output_options= log_output_options & ~LOG_TABLE | LOG_FILE; + + logger.set_handlers(LOG_FILE, opt_slow_log ? log_output_options:LOG_NONE, + opt_log ? log_output_options:LOG_NONE); + } #else - logger.set_handlers(LEGACY, opt_slow_log ? LEGACY:NONE, - opt_log ? LEGACY:NONE); + logger.set_handlers(LOG_FILE, opt_slow_log ? LOG_FILE:LOG_NONE, + opt_log ? LOG_FILE:LOG_NONE); #endif if (opt_update_log) @@ -4676,8 +4680,8 @@ enum options_mysqld OPT_REPLICATE_IGNORE_TABLE, OPT_REPLICATE_WILD_DO_TABLE, OPT_REPLICATE_WILD_IGNORE_TABLE, OPT_REPLICATE_SAME_SERVER_ID, OPT_DISCONNECT_SLAVE_EVENT_COUNT, OPT_TC_HEURISTIC_RECOVER, - OPT_ABORT_SLAVE_EVENT_COUNT, OPT_OLD_LOG_FORMAT, OPT_BOTH_LOG_FORMATS, - OPT_INNODB_DATA_HOME_DIR, + OPT_ABORT_SLAVE_EVENT_COUNT, + OPT_INNODB_DATA_HOME_DIR, OPT_LOG_OUTPUT, OPT_INNODB_DATA_FILE_PATH, OPT_INNODB_LOG_GROUP_HOME_DIR, OPT_INNODB_LOG_ARCH_DIR, @@ -5217,6 +5221,13 @@ Disable with --skip-innodb-doublewrite.", (gptr*) &innobase_use_doublewrite, {"log-long-format", '0', "Log some extra information to update log. Please note that this option is deprecated; see --log-short-format option.", 0, 0, 0, GET_NO_ARG, NO_ARG, 0, 0, 0, 0, 0, 0}, +#ifdef WITH_CSV_STORAGE_ENGINE + {"log-output", OPT_LOG_OUTPUT, + "Syntax: log-output[=option[,option...]], where option can be TABLE, " + "FILE or NONE.", + (gptr*) &log_output_str, (gptr*) &log_output_str, 0, + GET_STR, OPT_ARG, 0, 0, 0, 0, 0, 0}, +#endif {"log-queries-not-using-indexes", OPT_LOG_QUERIES_NOT_USING_INDEXES, "Log queries that are executed without benefit of any index to the slow log if it is open.", (gptr*) &opt_log_queries_not_using_indexes, (gptr*) &opt_log_queries_not_using_indexes, @@ -5238,16 +5249,6 @@ Disable with --skip-innodb-doublewrite.", (gptr*) &innobase_use_doublewrite, "Log slow queries to this log file. Defaults logging to hostname-slow.log file. Must be enabled to activate other slow log options.", (gptr*) &opt_slow_logname, (gptr*) &opt_slow_logname, 0, GET_STR, OPT_ARG, 0, 0, 0, 0, 0, 0}, -#ifdef WITH_CSV_STORAGE_ENGINE - {"old-log-format", OPT_OLD_LOG_FORMAT, - "Enable old log file format. (No SELECT * FROM logs)", - (gptr*) &opt_old_log_format, 0, 0, GET_BOOL, OPT_ARG, - 0, 0, 0, 0, 0, 0}, - {"both-log-formats", OPT_BOTH_LOG_FORMATS, - "Enable old log file format along with log tables", - (gptr*) &opt_both_log_formats, 0, 0, GET_BOOL, OPT_ARG, - 0, 0, 0, 0, 0, 0}, -#endif {"log-tc", OPT_LOG_TC, "Path to transaction coordinator log (used for transactions that affect " "more than one storage engine, when binary log is disabled)", @@ -6940,10 +6941,6 @@ static void mysql_init_variables(void) opt_skip_slave_start= opt_reckless_slave = 0; mysql_home[0]= pidfile_name[0]= log_error_file[0]= 0; opt_log= opt_update_log= opt_slow_log= 0; -#ifdef WITH_CSV_STORAGE_ENGINE - opt_old_log_format= 0; - opt_both_log_formats= 0; -#endif opt_bin_log= 0; opt_disable_networking= opt_skip_show_db=0; opt_logname= opt_update_logname= opt_binlog_index_name= opt_slow_logname= 0; @@ -7357,12 +7354,25 @@ get_one_option(int optid, const struct my_option *opt __attribute__((unused)), opt_slow_log= 1; break; #ifdef WITH_CSV_STORAGE_ENGINE - case (int) OPT_OLD_LOG_FORMAT: - opt_old_log_format= 1; - break; - case (int) OPT_BOTH_LOG_FORMATS: - opt_both_log_formats= 1; + case OPT_LOG_OUTPUT: + { + if (!argument || !argument[0]) + { + log_output_options= LOG_TABLE; + log_output_str= log_output_typelib.type_names[1]; + } + else + { + log_output_str= argument; + if ((log_output_options= + find_bit_type(argument, &log_output_typelib)) == ~(ulong) 0) + { + fprintf(stderr, "Unknown option to log-output: %s\n", argument); + exit(1); + } + } break; + } #endif case (int) OPT_SKIP_NEW: opt_specialflag|= SPECIAL_NO_NEW_FUNC; |