List:Commits« Previous MessageNext Message »
From:ingo Date:March 14 2007 2:54pm
Subject:bk commit into 4.1 tree (istruewing:1.2608) BUG#25289
View as plain text  
Below is the list of changes that have just been committed into a local
4.1 repository of istruewing. When istruewing 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, 2007-03-14 15:54:37+01:00, istruewing@stripped +1 -0
  Bug#25289 - repair table causes "my_seek.c:56:
              my_seek: Assertion `fd != -1' failed"
  
  In difficult optimize/repair situations the server could crash.
  Under some circumstances the server retries an optimize/repair
  with more elaborate options. But it did not check if the first
  attempt failed so badly that a second one must not be tried.
  
  This could happen when a new data file has been created
  but it was not possible to open it. In this case the
  repair leaves behind a table with closed data file.
  This must not be used for another repair attempt.
  
  We do now detect the closed data file and do not try
  another repair attempt in this situation.
  
  No test case. The required table corruption can not be
  repeated easily. There is a test program attached to
  bug 25433.

  sql/ha_myisam.cc@stripped, 2007-03-14 15:54:35+01:00, istruewing@stripped +14 -0
    Bug#25289 - repair table causes "my_seek.c:56:
                my_seek: Assertion `fd != -1' failed"
    Added code to detect a closed data file. It could be closed
    by a preceeding repair attempt. We must not try another
    repair then.

# This is a BitKeeper patch.  What follows are the unified diffs for the
# set of deltas contained in the patch.  The rest of the patch, the part
# that BitKeeper cares about, is below these diffs.
# User:	istruewing
# Host:	chilla.local
# Root:	/home/mydev/mysql-4.1-bug25289

--- 1.164/sql/ha_myisam.cc	2007-03-14 15:54:41 +01:00
+++ 1.165/sql/ha_myisam.cc	2007-03-14 15:54:41 +01:00
@@ -867,6 +867,20 @@ int ha_myisam::repair(THD *thd, MI_CHECK
   ha_rows rows= file->state->records;
   DBUG_ENTER("ha_myisam::repair");
 
+  /*
+    Normally this method is entered with a properly opened table. If the
+    repair fails, it can be repeated with more elaborate options. Under
+    special circumstances it can happen that a repair fails so that it
+    closed the data file and cannot re-open it. In this case file->dfile
+    is set to -1. We must not try another repair without an open data
+    file. (Bug #25289)
+  */
+  if (file->dfile == -1)
+  {
+    sql_print_warning("Warning: Please try REPAIR EXTENDED or myisamchk");
+    DBUG_RETURN(HA_ADMIN_FAILED);
+  }
+
   param.db_name    = table->table_cache_key;
   param.table_name = table->table_name;
   param.tmpfile_createflag = O_RDWR | O_TRUNC;
Thread
bk commit into 4.1 tree (istruewing:1.2608) BUG#25289ingo14 Mar