diff options
Diffstat (limited to 'sql/log.cc')
-rw-r--r-- | sql/log.cc | 28 |
1 files changed, 16 insertions, 12 deletions
diff --git a/sql/log.cc b/sql/log.cc index ad06eb6e90c..e42d9ffa2fa 100644 --- a/sql/log.cc +++ b/sql/log.cc @@ -108,11 +108,9 @@ MYSQL_LOG::~MYSQL_LOG() int MYSQL_LOG::generate_new_name(char *new_name, const char *log_name) { - if (log_type == LOG_NORMAL) - fn_format(new_name,log_name,mysql_data_home,"",4); - else + fn_format(new_name,log_name,mysql_data_home,"",4); + if (log_type != LOG_NORMAL) { - fn_format(new_name,log_name,mysql_data_home,"",4); if (!fn_ext(log_name)[0]) { if (find_uniq_filename(new_name)) @@ -798,7 +796,8 @@ void MYSQL_LOG::new_file(bool need_lock) safe_mutex_assert_owner(&LOCK_log); safe_mutex_assert_owner(&LOCK_index); - new_name_ptr= name; // Reuse old name if not binlog + // Reuse old name if not binlog and not update log + new_name_ptr= name; /* Only rotate open logs that are marked non-rotatable @@ -806,12 +805,17 @@ void MYSQL_LOG::new_file(bool need_lock) */ if (!no_rotate) { + /* + If user hasn't specified an extension, generate a new log name + We have to do this here and not in open as we want to store the + new file name in the current binary log file. + */ + if (generate_new_name(new_name, name)) + goto end; + new_name_ptr=new_name; + if (log_type == LOG_BIN) { - if (generate_new_name(new_name, name)) - goto end; /* Error; Continue using old log file */ - - new_name_ptr=new_name; if (!no_auto_events) { /* @@ -823,9 +827,9 @@ void MYSQL_LOG::new_file(bool need_lock) r.set_log_pos(this); /* - Becasue this log rotation could have been initiated by a master of + Because this log rotation could have been initiated by a master of the slave running with log-bin, we set the flag on rotate - event to prevent inifinite log rotation loop + event to prevent infinite log rotation loop */ if (thd->slave_thread) r.flags|= LOG_EVENT_FORCED_ROTATE_F; @@ -833,7 +837,7 @@ void MYSQL_LOG::new_file(bool need_lock) bytes_written += r.get_event_len(); } /* - Update needs to be signaled even if there is no rotate event + Update needs to be signalled even if there is no rotate event log rotation should give the waiting thread a signal to discover EOF and move on to the next log. */ |