List:Commits« Previous MessageNext Message »
From:Sergey Glukhov Date:August 7 2008 12:04pm
Subject:bzr commit into mysql-5.1 branch (gluh:2674) Bug#36638
View as plain text  
#At file:///home/gluh/MySQL/bazaar/mysql-5.1-bug-36638/

 2674 Sergey Glukhov	2008-08-07
      Bug#36638 mysqld crashes when open file limit is passed and general query log enabled(2nd ver)
      The problem:
      CSV storage engine open function returns success even
      thought it failed to open the data file
      The fix:
      return error
      Additional fixes:
      added MY_WME to my_open to avoid mysterious error message
      free share struct if open the file was unsuccesful
modified:
  mysql-test/r/csv.result
  mysql-test/t/csv.test
  storage/csv/ha_tina.cc

per-file messages:
  mysql-test/r/csv.result
    test result
  mysql-test/t/csv.test
    test case
  storage/csv/ha_tina.cc
    The problem:
    CSV storage engine open function returns success even
    thought it failed to open the data file
    The fix:
    return error
    Additional fixes:
    added MY_WME to my_open to avoid mysterious error message
    free share struct if open the file was unsuccesful
=== modified file 'mysql-test/r/csv.result'
--- a/mysql-test/r/csv.result	2008-01-17 23:37:18 +0000
+++ b/mysql-test/r/csv.result	2008-08-07 12:04:01 +0000
@@ -5388,4 +5388,10 @@ select * from t1;
 c1
 That
 drop table t1;
+create table t1 (a int not null) engine=csv;
+lock tables t1 read;
+select * from t1;
+ERROR HY000: File './test/t1.CSV' not found (Errcode: 2)
+unlock tables;
+drop table t1;
 End of 5.1 tests

=== modified file 'mysql-test/t/csv.test'
--- a/mysql-test/t/csv.test	2008-01-17 23:37:18 +0000
+++ b/mysql-test/t/csv.test	2008-08-07 12:04:01 +0000
@@ -1386,6 +1386,9 @@ UNLOCK TABLES;
 
 # cleanup
 DROP TABLE test_concurrent_insert;
+connection default;                                                                     
+--disconnect con1                                                                       
+--disconnect con2
 
 #
 # Test REPAIR/CHECK TABLE (5.1)
@@ -1784,4 +1787,20 @@ update t1 set c1="That" where c1="This";
 select * from t1;
 drop table t1;
 
+#
+# Bug#36638 mysqld crashes when open file limit is passed and general query log enabled
+#
+create table t1 (a int not null) engine=csv;
+lock tables t1 read;
+connect (con1,localhost,root,,);
+--connection con1
+--remove_file $MYSQLTEST_VARDIR/master-data/test/t1.CSV
+# EE_FILENOTFOUND 29
+--error 29
+select * from t1;
+connection default;
+unlock tables;
+drop table t1;
+--disconnect con1
+
 --echo End of 5.1 tests

=== modified file 'storage/csv/ha_tina.cc'
--- a/storage/csv/ha_tina.cc	2008-03-29 15:56:33 +0000
+++ b/storage/csv/ha_tina.cc	2008-08-07 12:04:01 +0000
@@ -191,8 +191,11 @@ static TINA_SHARE *get_share(const char 
       meta-file in the end.
     */
     if ((share->meta_file= my_open(meta_file_name,
-                                   O_RDWR|O_CREAT, MYF(0))) == -1)
+                                   O_RDWR|O_CREAT, MYF(MY_WME))) == -1)
+    {
       share->crashed= TRUE;
+      goto error1;
+    }
 
     /*
       If the meta file will not open we assume it is crashed and
@@ -201,6 +204,8 @@ static TINA_SHARE *get_share(const char 
     if (read_meta_file(share->meta_file, &share->rows_recorded))
       share->crashed= TRUE;
   }
+
+error1:
   share->use_count++;
   pthread_mutex_unlock(&tina_mutex);
 
@@ -342,11 +347,11 @@ int ha_tina::init_tina_writer()
   (void)write_meta_file(share->meta_file, share->rows_recorded, TRUE);
 
   if ((share->tina_write_filedes=
-        my_open(share->data_file_name, O_RDWR|O_APPEND, MYF(0))) == -1)
+        my_open(share->data_file_name, O_RDWR|O_APPEND, MYF(MY_WME))) == -1)
   {
     DBUG_PRINT("info", ("Could not open tina file writes"));
     share->crashed= TRUE;
-    DBUG_RETURN(1);
+    DBUG_RETURN(my_errno ? my_errno : -1);
   }
   share->tina_write_opened= TRUE;
 
@@ -828,8 +833,12 @@ int ha_tina::open(const char *name, int 
   }
 
   local_data_file_version= share->data_file_version;
-  if ((data_file= my_open(share->data_file_name, O_RDONLY, MYF(0))) == -1)
-    DBUG_RETURN(0);
+  if ((data_file= my_open(share->data_file_name,
+                          O_RDONLY, MYF(MY_WME))) == -1)
+  {
+    free_share(share);
+    DBUG_RETURN(my_errno ? my_errno : -1);
+  }
 
   /*
     Init locking. Pass handler object to the locking routines,
@@ -1021,8 +1030,8 @@ int ha_tina::init_data_file()
   {
     local_data_file_version= share->data_file_version;
     if (my_close(data_file, MYF(0)) ||
-        (data_file= my_open(share->data_file_name, O_RDONLY, MYF(0))) == -1)
-      return 1;
+        (data_file= my_open(share->data_file_name, O_RDONLY, MYF(MY_WME))) == -1)
+      return my_errno ? my_errno : -1;
   }
   file_buff->init_buff(data_file);
   return 0;
@@ -1290,8 +1299,9 @@ int ha_tina::rnd_end()
       DBUG_RETURN(-1);
 
     /* Open the file again */
-    if (((data_file= my_open(share->data_file_name, O_RDONLY, MYF(0))) == -1))
-      DBUG_RETURN(-1);
+    if (((data_file= my_open(share->data_file_name,
+                             O_RDONLY, MYF(MY_WME))) == -1))
+      DBUG_RETURN(my_errno ? my_errno : -1);
     /*
       As we reopened the data file, increase share->data_file_version 
       in order to force other threads waiting on a table lock and  
@@ -1445,8 +1455,8 @@ int ha_tina::repair(THD* thd, HA_CHECK_O
 
   /* Open the file again, it should now be repaired */
   if ((data_file= my_open(share->data_file_name, O_RDWR|O_APPEND,
-                          MYF(0))) == -1)
-     DBUG_RETURN(-1);
+                          MYF(MY_WME))) == -1)
+     DBUG_RETURN(my_errno ? my_errno : -1);
 
   /* Set new file size. The file size will be updated by ::update_status() */
   local_saved_data_file_length= (size_t) current_position;

Thread
bzr commit into mysql-5.1 branch (gluh:2674) Bug#36638Sergey Glukhov7 Aug
  • Re: bzr commit into mysql-5.1 branch (gluh:2674) Bug#36638Davi Arnaut8 Aug