diff options
author | unknown <petr@mysql.com> | 2006-06-05 05:34:34 +0400 |
---|---|---|
committer | unknown <petr@mysql.com> | 2006-06-05 05:34:34 +0400 |
commit | b092d16c882aceb3c6f931ccdb00f29296cfbf98 (patch) | |
tree | bd03764aeedc533b5ae5636cb19cba39322c0d4d | |
parent | 51e0c5187b9615d40134067adee9c96f6bc635ce (diff) | |
download | mariadb-git-b092d16c882aceb3c6f931ccdb00f29296cfbf98.tar.gz |
WL #3153 "Split logs" post-review fixes (after andrei's review)
sql/log.cc:
post-review fixes:
* split log_type to log_state and log_type
* rename log_type to log_table_type where appropriate (to avoid confusion)
* merge MYSQL_SLOW_LOG and MYSQL_GENERAL_LOG to MYSQL_QUERY_LOG
sql/log.h:
post-review fixes:
* move last_time and reopen_file() to MYSQL_QUERY_LOG from the base class
-rw-r--r-- | sql/log.cc | 140 | ||||
-rw-r--r-- | sql/log.h | 42 |
2 files changed, 83 insertions, 99 deletions
diff --git a/sql/log.cc b/sql/log.cc index d1c33afcda7..0c7b5278f41 100644 --- a/sql/log.cc +++ b/sql/log.cc @@ -120,8 +120,8 @@ handlerton binlog_hton = { SYNOPSIS open_log_table() - log_type type of the log table to open: QUERY_LOG_GENERAL - or QUERY_LOG_SLOW + log_table_type type of the log table to open: QUERY_LOG_GENERAL + or QUERY_LOG_SLOW DESCRIPTION @@ -136,14 +136,14 @@ handlerton binlog_hton = { TRUE - error occured */ -bool Log_to_csv_event_handler::open_log_table(uint log_type) +bool Log_to_csv_event_handler::open_log_table(uint log_table_type) { THD *log_thd, *curr= current_thd; TABLE_LIST *table; bool error= FALSE; DBUG_ENTER("open_log_table"); - switch (log_type) { + switch (log_table_type) { case QUERY_LOG_GENERAL: log_thd= general_log_thd; table= &general_log; @@ -254,8 +254,8 @@ Log_to_csv_event_handler::~Log_to_csv_event_handler() SYNOPSIS reopen_log_table() - log_type type of the log table to open: QUERY_LOG_GENERAL - or QUERY_LOG_SLOW + log_table_type type of the log table to open: QUERY_LOG_GENERAL + or QUERY_LOG_SLOW DESCRIPTION @@ -272,12 +272,12 @@ Log_to_csv_event_handler::~Log_to_csv_event_handler() TRUE - open_log_table() returned an error */ -bool Log_to_csv_event_handler::reopen_log_table(uint log_type) +bool Log_to_csv_event_handler::reopen_log_table(uint log_table_type) { /* don't open the log table, if it wasn't enabled during startup */ if (!logger.is_log_tables_initialized) return FALSE; - return open_log_table(log_type); + return open_log_table(log_table_type); } void Log_to_csv_event_handler::cleanup() @@ -613,9 +613,9 @@ void LOGGER::cleanup_end() } -void LOGGER::close_log_table(uint log_type, bool lock_in_use) +void LOGGER::close_log_table(uint log_table_type, bool lock_in_use) { - table_log_handler->close_log_table(log_type, lock_in_use); + table_log_handler->close_log_table(log_table_type, lock_in_use); } @@ -655,9 +655,9 @@ void LOGGER::init_log_tables() } -bool LOGGER::reopen_log_table(uint log_type) +bool LOGGER::reopen_log_table(uint log_table_type) { - return table_log_handler->reopen_log_table(log_type); + return table_log_handler->reopen_log_table(log_table_type); } @@ -992,9 +992,9 @@ int LOGGER::set_handlers(uint error_log_printer, SYNOPSIS close_log_table() - log_type type of the log table to close: QUERY_LOG_GENERAL - or QUERY_LOG_SLOW - lock_in_use Set to TRUE if the caller owns LOCK_open. FALSE otherwise. + log_table_type type of the log table to close: QUERY_LOG_GENERAL + or QUERY_LOG_SLOW + lock_in_use Set to TRUE if the caller owns LOCK_open. FALSE otherwise. DESCRIPTION @@ -1004,7 +1004,7 @@ int LOGGER::set_handlers(uint error_log_printer, */ void Log_to_csv_event_handler:: - close_log_table(uint log_type, bool lock_in_use) + close_log_table(uint log_table_type, bool lock_in_use) { THD *log_thd, *curr= current_thd; TABLE_LIST *table; @@ -1012,7 +1012,7 @@ void Log_to_csv_event_handler:: if (!logger.is_log_tables_initialized) return; /* do nothing */ - switch (log_type) { + switch (log_table_type) { case QUERY_LOG_GENERAL: log_thd= general_log_thd; table= &general_log; @@ -1382,7 +1382,7 @@ static int find_uniq_filename(char *name) void MYSQL_LOG::init(enum_log_type log_type_arg, - enum cache_type io_cache_type_arg) + enum cache_type io_cache_type_arg) { DBUG_ENTER("MYSQL_LOG::init"); log_type= log_type_arg; @@ -1452,8 +1452,7 @@ bool MYSQL_LOG::open(const char *log_name, enum_log_type log_type_arg, ((log_type == LOG_BIN) ? MY_WAIT_IF_FULL : 0)))) goto err; - switch (log_type) { - case LOG_NORMAL: + if (log_type == LOG_NORMAL) { char *end; int len=my_snprintf(buff, sizeof(buff), "%s, Version: %s. " @@ -1474,14 +1473,9 @@ bool MYSQL_LOG::open(const char *log_name, enum_log_type log_type_arg, if (my_b_write(&log_file, (byte*) buff, (uint) (end-buff)) || flush_io_cache(&log_file)) goto err; - break; - } - case LOG_CLOSED: // Impossible - case LOG_TO_BE_OPENED: - DBUG_ASSERT(1); - break; } + log_state= LOG_OPENED; DBUG_RETURN(0); err: @@ -1493,13 +1487,13 @@ shutdown the MySQL server and restart it.", name, errno); my_close(file, MYF(0)); end_io_cache(&log_file); safeFree(name); - log_type= LOG_CLOSED; + log_state= LOG_CLOSED; DBUG_RETURN(1); } MYSQL_LOG::MYSQL_LOG() - : name(0), log_type(LOG_CLOSED), write_error(FALSE), - inited(FALSE), last_time(0) + : name(0), log_type(LOG_UNKNOWN), log_state(LOG_CLOSED), write_error(FALSE), + inited(FALSE) { /* We don't want to initialize LOCK_Log here as such initialization depends on @@ -1535,7 +1529,7 @@ void MYSQL_LOG::close(uint exiting) { // One can't set log_type here! DBUG_ENTER("MYSQL_LOG::close"); DBUG_PRINT("enter",("exiting: %d", (int) exiting)); - if (log_type != LOG_CLOSED && log_type != LOG_TO_BE_OPENED) + if (log_state == LOG_OPENED) { end_io_cache(&log_file); @@ -1552,7 +1546,7 @@ void MYSQL_LOG::close(uint exiting) } } - log_type= (exiting & LOG_CLOSE_TO_BE_OPENED) ? LOG_TO_BE_OPENED : LOG_CLOSED; + log_state= (exiting & LOG_CLOSE_TO_BE_OPENED) ? LOG_TO_BE_OPENED : LOG_CLOSED; safeFree(name); DBUG_VOID_RETURN; } @@ -1572,6 +1566,24 @@ void MYSQL_LOG::cleanup() } +int MYSQL_LOG::generate_new_name(char *new_name, const char *log_name) +{ + fn_format(new_name, log_name, mysql_data_home, "", 4); + if (log_type == LOG_BIN) + { + if (!fn_ext(log_name)[0]) + { + if (find_uniq_filename(new_name)) + { + sql_print_error(ER(ER_NO_UNIQUE_LOGFILE), log_name); + return 1; + } + } + } + return 0; +} + + /* Reopen the log file @@ -1584,9 +1596,8 @@ void MYSQL_LOG::cleanup() */ -void MYSQL_LOG::reopen_file() +void MYSQL_QUERY_LOG::reopen_file() { - enum_log_type save_log_type; char *save_name; DBUG_ENTER("MYSQL_LOG::reopen_file"); @@ -1599,15 +1610,14 @@ void MYSQL_LOG::reopen_file() pthread_mutex_lock(&LOCK_log); save_name= name; - save_log_type= log_type; name= 0; // Don't free name close(LOG_CLOSE_TO_BE_OPENED); /* - Note that at this point, log_type != LOG_CLOSED (important for is_open()). + Note that at this point, log_state != LOG_CLOSED (important for is_open()). */ - open(save_name, save_log_type, 0, io_cache_type); + open(save_name, log_type, 0, io_cache_type); my_free(save_name, MYF(0)); pthread_mutex_unlock(&LOCK_log); @@ -1616,24 +1626,6 @@ void MYSQL_LOG::reopen_file() } -int MYSQL_LOG::generate_new_name(char *new_name, const char *log_name) -{ - fn_format(new_name,log_name,mysql_data_home,"",4); - if (log_type != LOG_NORMAL) - { - if (!fn_ext(log_name)[0]) - { - if (find_uniq_filename(new_name)) - { - sql_print_error(ER(ER_NO_UNIQUE_LOGFILE), log_name); - return 1; - } - } - } - return 0; -} - - /* Write a command to traditional general log file @@ -1659,10 +1651,10 @@ int MYSQL_LOG::generate_new_name(char *new_name, const char *log_name) TRUE - error occured */ -bool MYSQL_GENERAL_LOG::write(time_t event_time, const char *user_host, - uint user_host_len, int thread_id, - const char *command_type, uint command_type_len, - const char *sql_text, uint sql_text_len) +bool MYSQL_QUERY_LOG::write(time_t event_time, const char *user_host, + uint user_host_len, int thread_id, + const char *command_type, uint command_type_len, + const char *sql_text, uint sql_text_len) { char buff[32]; uint length= 0; @@ -1755,14 +1747,14 @@ err: TRUE - error occured */ -bool MYSQL_SLOW_LOG::write(THD *thd, time_t current_time, - time_t query_start_arg, const char *user_host, - uint user_host_len, longlong query_time, - longlong lock_time, bool is_command, - const char *sql_text, uint sql_text_len) +bool MYSQL_QUERY_LOG::write(THD *thd, time_t current_time, + time_t query_start_arg, const char *user_host, + uint user_host_len, longlong query_time, + longlong lock_time, bool is_command, + const char *sql_text, uint sql_text_len) { bool error= 0; - DBUG_ENTER("MYSQL_SLOW_LOG::write"); + DBUG_ENTER("MYSQL_QUERY_LOG::write"); if (!is_open()) DBUG_RETURN(0); @@ -2015,7 +2007,6 @@ bool MYSQL_BIN_LOG::open(const char *log_name, DBUG_ENTER("MYSQL_BIN_LOG::open"); DBUG_PRINT("enter",("log_type: %d",(int) log_type_arg)); - last_time= 0; write_error=0; /* open the main log file */ @@ -2119,6 +2110,8 @@ bool MYSQL_BIN_LOG::open(const char *log_name, goto err; } } + log_state= LOG_OPENED; + DBUG_RETURN(0); err: @@ -2131,7 +2124,7 @@ shutdown the MySQL server and restart it.", name, errno); end_io_cache(&log_file); end_io_cache(&index_file); safeFree(name); - log_type= LOG_CLOSED; + log_state= LOG_CLOSED; DBUG_RETURN(1); } @@ -2350,7 +2343,6 @@ bool MYSQL_BIN_LOG::reset_logs(THD* thd) LOG_INFO linfo; bool error=0; const char* save_name; - enum_log_type save_log_type; DBUG_ENTER("reset_logs"); ha_reset_logs(thd); @@ -2372,7 +2364,6 @@ bool MYSQL_BIN_LOG::reset_logs(THD* thd) /* Save variables so that we can reopen the log */ save_name=name; name=0; // Protect against free - save_log_type=log_type; close(LOG_CLOSE_TO_BE_OPENED); /* First delete all old log files */ @@ -2396,8 +2387,7 @@ bool MYSQL_BIN_LOG::reset_logs(THD* thd) if (!thd->slave_thread) need_start_event=1; if (!open_index_file(index_file_name, 0)) - open(save_name, save_log_type, 0, - io_cache_type, no_auto_events, max_size, 0); + open(save_name, log_type, 0, io_cache_type, no_auto_events, max_size, 0); my_free((gptr) save_name, MYF(0)); err: @@ -2753,7 +2743,6 @@ void MYSQL_BIN_LOG::new_file_without_locking() void MYSQL_BIN_LOG::new_file_impl(bool need_lock) { char new_name[FN_REFLEN], *new_name_ptr, *old_name; - enum_log_type save_log_type; DBUG_ENTER("MYSQL_BIN_LOG::new_file_impl"); if (!is_open()) @@ -2821,12 +2810,11 @@ void MYSQL_BIN_LOG::new_file_impl(bool need_lock) signal_update(); } old_name=name; - save_log_type=log_type; name=0; // Don't free name close(LOG_CLOSE_TO_BE_OPENED); /* - Note that at this point, log_type != LOG_CLOSED (important for is_open()). + Note that at this point, log_state != LOG_CLOSED (important for is_open()). */ /* @@ -2838,7 +2826,7 @@ void MYSQL_BIN_LOG::new_file_impl(bool need_lock) trigger temp tables deletion on slaves. */ - open(old_name, save_log_type, new_name_ptr, + open(old_name, log_type, new_name_ptr, io_cache_type, no_auto_events, max_size, 1); my_free(old_name,MYF(0)); @@ -3543,7 +3531,7 @@ void MYSQL_BIN_LOG::close(uint exiting) { // One can't set log_type here! DBUG_ENTER("MYSQL_BIN_LOG::close"); DBUG_PRINT("enter",("exiting: %d", (int) exiting)); - if (log_type != LOG_CLOSED && log_type != LOG_TO_BE_OPENED) + if (log_state == LOG_OPENED) { #ifdef HAVE_REPLICATION if (log_type == LOG_BIN && !no_auto_events && @@ -3582,7 +3570,7 @@ void MYSQL_BIN_LOG::close(uint exiting) sql_print_error(ER(ER_ERROR_ON_WRITE), index_file_name, errno); } } - log_type= (exiting & LOG_CLOSE_TO_BE_OPENED) ? LOG_TO_BE_OPENED : LOG_CLOSED; + log_state= (exiting & LOG_CLOSE_TO_BE_OPENED) ? LOG_TO_BE_OPENED : LOG_CLOSED; safeFree(name); DBUG_VOID_RETURN; } diff --git a/sql/log.h b/sql/log.h index 589932dcac0..8a41cd9053d 100644 --- a/sql/log.h +++ b/sql/log.h @@ -147,7 +147,8 @@ typedef struct st_log_info class Log_event; class Rows_log_event; -enum enum_log_type { LOG_CLOSED, LOG_TO_BE_OPENED, LOG_NORMAL, LOG_BIN}; +enum enum_log_type { LOG_UNKNOWN, LOG_NORMAL, LOG_BIN }; +enum enum_log_state { LOG_OPENED, LOG_CLOSED, LOG_TO_BE_OPENED }; /* TODO use mmap instead of IO_CACHE for binlog @@ -160,7 +161,6 @@ public: MYSQL_LOG(); void init_pthread_objects(); void cleanup(); - void reopen_file(); bool open(const char *log_name, enum_log_type log_type, const char *new_name, @@ -168,7 +168,7 @@ public: void init(enum_log_type log_type_arg, enum cache_type io_cache_type_arg); void close(uint exiting); - inline bool is_open() { return log_type != LOG_CLOSED; } + inline bool is_open() { return log_state != LOG_CLOSED; } const char *generate_name(const char *log_name, const char *suffix, bool strip_ext, char *buff); int generate_new_name(char *new_name, const char *log_name); @@ -180,33 +180,21 @@ public: char time_buff[20], db[NAME_LEN + 1]; bool write_error, inited; IO_CACHE log_file; - volatile enum_log_type log_type; + enum_log_type log_type; + volatile enum_log_state log_state; enum cache_type io_cache_type; - time_t last_time; - friend class Log_event; }; -class MYSQL_GENERAL_LOG: public MYSQL_LOG +class MYSQL_QUERY_LOG: public MYSQL_LOG { public: - MYSQL_GENERAL_LOG() {} /* get rid of gcc warning */ + MYSQL_QUERY_LOG() : last_time(0) {} + void reopen_file(); bool write(time_t event_time, const char *user_host, uint user_host_len, int thread_id, const char *command_type, uint command_type_len, const char *sql_text, uint sql_text_len); - bool open_query_log(const char *log_name) - { - char buf[FN_REFLEN]; - return open(generate_name(log_name, ".log", 0, buf), LOG_NORMAL, 0, - WRITE_CACHE); - } -}; - -class MYSQL_SLOW_LOG: public MYSQL_LOG -{ -public: - MYSQL_SLOW_LOG() {} /* get rid of gcc warning */ bool write(THD *thd, time_t current_time, time_t query_start_arg, const char *user_host, uint user_host_len, longlong query_time, longlong lock_time, bool is_command, @@ -217,6 +205,14 @@ public: return open(generate_name(log_name, "-slow.log", 0, buf), LOG_NORMAL, 0, WRITE_CACHE); } + bool open_query_log(const char *log_name) + { + char buf[FN_REFLEN]; + return open(generate_name(log_name, ".log", 0, buf), LOG_NORMAL, 0, + WRITE_CACHE); + } +private: + time_t last_time; }; class MYSQL_BIN_LOG: public TC_LOG, private MYSQL_LOG @@ -269,6 +265,7 @@ class MYSQL_BIN_LOG: public TC_LOG, private MYSQL_LOG public: MYSQL_LOG::generate_name; + MYSQL_LOG::is_open; /* These describe the log's format. This is used only for relay logs. _for_exec is used by the SQL thread, _for_queue by the I/O thread. It's @@ -371,7 +368,6 @@ public: int find_next_log(LOG_INFO* linfo, bool need_mutex); int get_current_log(LOG_INFO* linfo); uint next_file_id(); - inline bool is_open() { return log_type != LOG_CLOSED; } inline char* get_index_fname() { return index_file_name;} inline char* get_log_fname() { return log_file_name; } inline char* get_name() { return name; } @@ -448,8 +444,8 @@ public: class Log_to_file_event_handler: public Log_event_handler { - MYSQL_GENERAL_LOG mysql_log; - MYSQL_SLOW_LOG mysql_slow_log; + MYSQL_QUERY_LOG mysql_log; + MYSQL_QUERY_LOG mysql_slow_log; bool is_initialized; public: Log_to_file_event_handler(): is_initialized(FALSE) |