List:Commits« Previous MessageNext Message »
From:Dmitry Lenev Date:June 6 2008 11:32am
Subject:bzr commit into mysql-6.0 branch (dlenev:2663) WL#3726
View as plain text  
#At file:///home/dlenev/src/bzr/mysql-6.0-3726-w2/

 2663 Dmitry Lenev	2008-06-06
      WL#3726 "DDL locking for all metadata objects".
      
      After review fixes in progress.
      
      Clarified some comments explaining control flow in
      prepare_for_repair().
modified:
  sql/sql_table.cc

=== modified file 'sql/sql_table.cc'
--- a/sql/sql_table.cc	2008-06-05 15:33:38 +0000
+++ b/sql/sql_table.cc	2008-06-06 11:32:48 +0000
@@ -3935,16 +3935,16 @@ static int prepare_for_repair(THD *thd, 
   if (!(check_opt->sql_flags & TT_USEFRM))
     DBUG_RETURN(0);
 
-  if (!(table= table_list->table))		/* if open_ltable failed */
+  if (!(table= table_list->table))
   {
+    /*
+      Attempt to do full-blown table open in mysql_admin_table() has failed.
+      Let us try to open at least a .FRM for this table.
+    */
     char key[MAX_DBKEY_LENGTH];
     uint key_length;
 
     key_length= create_table_def_key(thd, key, table_list, 0);
-    /*
-      TODO: Check that REPAIR's code also conforms to meta-data
-            locking protocol. Fix if it is not.
-    */
     mdl_lock_data= mdl_alloc_lock(0, table_list->db, table_list->table_name,
                                   thd->mem_root);
     mdl_set_lock_type(mdl_lock_data, MDL_EXCLUSIVE);
@@ -4024,12 +4024,19 @@ static int prepare_for_repair(THD *thd, 
 
   if (table_list->table)
   {
-    /* If we could open the table, close it */
+    /*
+      Table was successfully open in mysql_admin_table(). Now we need
+      to close it, but leave it protected by exclusive metadata lock.
+    */
     if (close_cached_table(thd, table))
       goto end;
     table_list->table= 0;
   }
-  // After this point we have X mdl lock in both cases
+  /*
+    After this point we have an exclusive metadata lock on our table
+    in both cases when table was successfully open in mysql_admin_table()
+    and when it was open in prepare_for_repair().
+  */
 
   if (my_rename(from, tmp, MYF(MY_WME)))
   {

Thread
bzr commit into mysql-6.0 branch (dlenev:2663) WL#3726Dmitry Lenev6 Jun