List:Commits« Previous MessageNext Message »
From:Andrei Elkin Date:March 13 2008 5:34pm
Subject:bk commit into 5.0 tree (aelkin:1.2598) BUG#18199
View as plain text  
Below is the list of changes that have just been committed into a local
5.0 repository of aelkin.  When aelkin does a push these changes
will be propagated to the main repository and, within 24 hours after the
push, to the public repository.
For information on how to access the public repository
see http://dev.mysql.com/doc/mysql/en/installing-source-tree.html

ChangeSet@stripped, 2008-03-13 19:33:43+02:00, aelkin@mysql1000.(none) +2 -0
  Bug #18199  PURGE BINARY LOGS fails silently with missing logs;
  Bug #18453  Warning/error message if there is a mismatch between ...
  
  There were three problems:
  
  1. the reported lack of warnings for the BEFORE syntax of PURGE;
  2. the similar lack of warnings for the TO syntax;
  3. incompatible behaviour between the two in that the latter blanked out
     regardlessly of presence or lack the actual file corresponding to
     an index record; the former version gave up at the first mismatch.
  
  fixed with polishing and synronizing logics of purge_logs() and
  purge_logs_before_date().

  sql/log.cc@stripped, 2008-03-13 19:33:41+02:00, aelkin@mysql1000.(none) +17 -8
    Bug #18199  PURGE BINARY LOGS fails silently with missing logs;
    Bug #18453  Warning/error message if there is a mismatch between ...
    

  sql/share/errmsg.txt@stripped, 2008-03-13 19:33:41+02:00, aelkin@mysql1000.(none) +2 -0
    new error message as there had been no suitable

diff -Nrup a/sql/log.cc b/sql/log.cc
--- a/sql/log.cc	2008-01-31 17:15:35 +02:00
+++ b/sql/log.cc	2008-03-13 19:33:41 +02:00
@@ -1209,16 +1209,15 @@ int MYSQL_LOG::purge_logs(const char *to
          !log_in_use(log_info.log_file_name))
   {
     ulong file_size= 0;
+    MY_STAT s, *lstat= my_stat(log_info.log_file_name, &s, MYF(0));
     if (decrease_log_space) //stat the file we want to delete
     {
-      MY_STAT s;
-
       /* 
          If we could not stat, we can't know the amount
          of space that deletion will free. In most cases,
          deletion won't work either, so it's not a problem.
       */
-      if (my_stat(log_info.log_file_name,&s,MYF(0)))
+      if (lstat)
         file_size= s.st_size;
       else
 	sql_print_information("Failed to execute my_stat on file '%s'",
@@ -1228,8 +1227,13 @@ int MYSQL_LOG::purge_logs(const char *to
       It's not fatal if we can't delete a log file ;
       if we could delete it, take its size into account
     */
+    if (!lstat)
+      push_warning_printf(current_thd, MYSQL_ERROR::WARN_LEVEL_WARN,
+                          ER_LOG_PURGE_NO_FILE, ER(ER_LOG_PURGE_NO_FILE),
+                          log_info.log_file_name);
     DBUG_PRINT("info",("purging %s",log_info.log_file_name));
-    if (!my_delete(log_info.log_file_name, MYF(0)) && decrease_log_space)
+    if ((lstat && !my_delete(log_info.log_file_name, MYF(0)))
+        && decrease_log_space)
       *decrease_log_space-= file_size;
     if (find_next_log(&log_info, 0) || exit_loop)
       break;
@@ -1286,11 +1290,16 @@ int MYSQL_LOG::purge_logs_before_date(ti
   while (strcmp(log_file_name, log_info.log_file_name) &&
 	 !log_in_use(log_info.log_file_name))
   {
-    /* It's not fatal even if we can't delete a log file */
-    if (!my_stat(log_info.log_file_name, &stat_area, MYF(0)) ||
-	stat_area.st_mtime >= purge_time)
+    MY_STAT *lstat= my_stat(log_info.log_file_name, &stat_area, MYF(0));
+    if (!lstat)
+      push_warning_printf(current_thd, MYSQL_ERROR::WARN_LEVEL_WARN,
+                          ER_LOG_PURGE_NO_FILE, ER(ER_LOG_PURGE_NO_FILE),
+                          log_info.log_file_name);
+    if (stat_area.st_mtime >= purge_time)
       break;
-    my_delete(log_info.log_file_name, MYF(0));
+    /* It's not fatal even if we can't delete a log file */
+    if (lstat)
+      my_delete(log_info.log_file_name, MYF(0));
     if (find_next_log(&log_info, 0))
       break;
   }
diff -Nrup a/sql/share/errmsg.txt b/sql/share/errmsg.txt
--- a/sql/share/errmsg.txt	2007-10-23 14:15:27 +03:00
+++ b/sql/share/errmsg.txt	2008-03-13 19:33:41 +02:00
@@ -5641,3 +5641,5 @@ ER_NAME_BECOMES_EMPTY
         eng "Name '%-.64s' has become ''"
 ER_AMBIGUOUS_FIELD_TERM
 	eng "First character of the FIELDS TERMINATED string is ambiguous; please use non-optional and non-empty FIELDS ENCLOSED BY"
+ER_LOG_PURGE_NO_FILE  
+	eng "Being purged log %s was not found"
Thread
bk commit into 5.0 tree (aelkin:1.2598) BUG#18199Andrei Elkin13 Mar