List:Commits« Previous MessageNext Message »
From:Gleb Shchepa Date:September 24 2008 6:41pm
Subject:bzr commit into mysql-5.1-bugteam branch (gshchepa:2677) Bug#17823
View as plain text  
#At file:///work/bzr/5.0-bugteam-17823/

 2677 Gleb Shchepa	2008-09-24
      Fixed bug #17823: 'arc' directories inside database directories.
      
      Server created "arc" directories inside database directories and
      maintained there useless copies of .frm files.
      
      Creation and renaming procedures of those copies as well as
      creation of "arc" directories has been discontinued.
      Removal procedure has been kept untouched to be able to
      cleanup existent database directories by the DROP DATABASE
      query. Also view renaming procedure has been updated to remove
      these directories.
modified:
  sql/parse_file.cc
  sql/parse_file.h
  sql/sql_db.cc
  sql/sql_view.cc

per-file messages:
  sql/parse_file.cc
    Fixed bug #17823.
    View/table creation and renaming procedures maintained
    backup copies of .frm files. Those copies are unused yet,
    so this feature was incomplete and unnecessary.
    
    1. Unwanted code has been hidden by FRM_ARCHIVE ifdefs
    (the FRM_ARCHIVE macro is not defined).
    
    2. Renaming procedure has been modified to remove obsolete 
    "arc" directories.
  sql/parse_file.h
    Fixed bug #17823.
    The "thd" parameter has been added to the rename_in_schema_file()
    function.
  sql/sql_db.cc
    Fixed bug #17823.
    Scope of the mysql_rm_arc_files() function has been changed to
    global for use from the parse_file.cc file.
  sql/sql_view.cc
    Fixed bug #17823.
    Added the "thd" argument to rename_in_schema_file() calls.
=== modified file 'sql/parse_file.cc'
--- a/sql/parse_file.cc	2007-04-06 14:56:39 +0000
+++ b/sql/parse_file.cc	2008-09-24 18:41:24 +0000
@@ -21,6 +21,9 @@
 #include <my_sys.h>
 #include <my_dir.h>
 
+/* from sql_db.cc */
+extern long mysql_rm_arc_files(THD *thd, MY_DIR *dirp, const char *org_path);
+
 
 /*
   write string with escaping
@@ -265,8 +268,9 @@ sql_create_definition_file(const LEX_STR
     DBUG_RETURN(TRUE);
   }
 
-  // archive copies management
   path[path_end]='\0';
+#ifdef FRM_ARCHIVE
+  // archive copies management: disabled unused feature (see bug #17823).
   if (!access(path, F_OK))
   {
     if (old_version != ULONGLONG_MAX && max_versions != 0)
@@ -313,6 +317,7 @@ sql_create_definition_file(const LEX_STR
       }
     }
   }
+#endif//FRM_ARCHIVE
 
   {
     // rename temporary file
@@ -337,6 +342,7 @@ err_w_file:
 
   SYNOPSIS
     rename_in_schema_file
+    thd               thread handler
     schema            name of given schema           
     old_name          original file name
     new_name          new file name
@@ -348,7 +354,8 @@ err_w_file:
     1 - Error (only if renaming of frm failed)
 
 */
-my_bool rename_in_schema_file(const char *schema, const char *old_name, 
+my_bool rename_in_schema_file(THD *thd,
+                              const char *schema, const char *old_name, 
                               const char *new_name, ulonglong revision, 
                               uint num_view_backups)
 {
@@ -365,10 +372,11 @@ my_bool rename_in_schema_file(const char
   if (my_rename(old_path, new_path, MYF(MY_WME)))
     return 1;
 
-  /* check if arc_dir exists */
+  /* check if arc_dir exists: disabled unused feature (see bug #17823). */
   strxnmov(arc_path, FN_REFLEN, mysql_data_home, "/", schema, "/arc", NullS);
   (void) unpack_filename(arc_path, arc_path);
   
+#ifdef FRM_ARCHIVE
   if (revision > 0 && !access(arc_path, F_OK))
   {
     ulonglong limit= ((revision > num_view_backups) ?
@@ -384,6 +392,16 @@ my_bool rename_in_schema_file(const char
       my_rename(old_path, new_path, MYF(0));
     }
   }
+#else//FRM_ARCHIVE
+  { // remove obsolete 'arc' directory and files if any
+    MY_DIR *new_dirp;
+    if ((new_dirp = my_dir(arc_path, MYF(MY_DONT_SORT))))
+    {
+      DBUG_PRINT("my",("Archive subdir found: %s", arc_path));
+      (void) mysql_rm_arc_files(thd, new_dirp, arc_path);
+    }
+  }
+#endif//FRM_ARCHIVE
   return 0;
 }
 

=== modified file 'sql/parse_file.h'
--- a/sql/parse_file.h	2006-12-23 19:17:15 +0000
+++ b/sql/parse_file.h	2008-09-24 18:41:24 +0000
@@ -82,8 +82,9 @@ my_bool
 sql_create_definition_file(const LEX_STRING *dir, const  LEX_STRING *file_name,
 			   const LEX_STRING *type,
 			   gptr base, File_option *parameters, uint versions);
-my_bool rename_in_schema_file(const char *schema, const char *old_name, 
-                              const char *new_name, ulonglong revision, 
+my_bool rename_in_schema_file(THD *thd,
+                              const char *schema, const char *old_name,
+                              const char *new_name, ulonglong revision,
                               uint num_view_backups);
 
 class File_parser: public Sql_alloc

=== modified file 'sql/sql_db.cc'
--- a/sql/sql_db.cc	2008-03-21 15:23:17 +0000
+++ b/sql/sql_db.cc	2008-09-24 18:41:24 +0000
@@ -35,7 +35,7 @@ static long mysql_rm_known_files(THD *th
 				 const char *db, const char *path, uint level, 
                                  TABLE_LIST **dropped_tables);
          
-static long mysql_rm_arc_files(THD *thd, MY_DIR *dirp, const char *org_path);
+long mysql_rm_arc_files(THD *thd, MY_DIR *dirp, const char *org_path);
 static my_bool rm_dir_w_symlink(const char *org_path, my_bool send_error);
 /* Database options hash */
 static HASH dboptions;
@@ -906,7 +906,11 @@ static long mysql_rm_known_files(THD *th
     else if (file->name[0] == 'a' && file->name[1] == 'r' &&
              file->name[2] == 'c' && file->name[3] == '\0')
     {
-      /* .frm archive */
+      /* .frm archive:
+        Those archives are obsolete, but following code should
+        exist to remove existent "arc" directories.
+        See #ifdef FRM_ARCHIVE directives for obsolete code.
+      */
       char newpath[FN_REFLEN];
       MY_DIR *new_dirp;
       strxmov(newpath, org_path, "/", "arc", NullS);
@@ -1061,9 +1065,13 @@ static my_bool rm_dir_w_symlink(const ch
   RETURN
     > 0 number of removed files
     -1  error
+
+  NOTE
+    A support of "arc" directories is obsolete, however this
+    function should exist to remove existent "arc" directories.
+    See #ifdef FRM_ARCHIVE directives for obsolete code.
 */
-static long mysql_rm_arc_files(THD *thd, MY_DIR *dirp,
-				 const char *org_path)
+long mysql_rm_arc_files(THD *thd, MY_DIR *dirp, const char *org_path)
 {
   long deleted= 0;
   ulong found_other_files= 0;
@@ -1105,6 +1113,7 @@ static long mysql_rm_arc_files(THD *thd,
     {
       goto err;
     }
+    deleted++;
   }
   if (thd->killed)
     goto err;

=== modified file 'sql/sql_view.cc'
--- a/sql/sql_view.cc	2008-07-14 21:41:30 +0000
+++ b/sql/sql_view.cc	2008-09-24 18:41:24 +0000
@@ -1858,7 +1858,7 @@ mysql_rename_view(THD *thd,
       goto err;
 
     /* rename view and it's backups */
-    if (rename_in_schema_file(view->db, view->table_name, new_name, 
+    if (rename_in_schema_file(thd, view->db, view->table_name, new_name, 
                               view_def.revision - 1, num_view_backups))
       goto err;
 
@@ -1877,7 +1877,7 @@ mysql_rename_view(THD *thd,
                                    num_view_backups)) 
     {
       /* restore renamed view in case of error */
-      rename_in_schema_file(view->db, new_name, view->table_name, 
+      rename_in_schema_file(thd, view->db, new_name, view->table_name, 
                             view_def.revision - 1, num_view_backups);
       goto err;
     }

Thread
bzr commit into mysql-5.1-bugteam branch (gshchepa:2677) Bug#17823Gleb Shchepa24 Sep
  • Re: bzr commit into mysql-5.1-bugteam branch (gshchepa:2677) Bug#17823Ingo Strüwing30 Sep