List:Commits« Previous MessageNext Message »
From:Dmitry Lenev Date:October 27 2010 10:39am
Subject:bzr commit into mysql-5.5-runtime branch (Dmitry.Lenev:3185)
View as plain text  
#At file:///home/dlenev/src/bzr/mysql-5.5-rt-grl/ based on revid:dmitry.lenev@stripped

 3185 Dmitry Lenev	2010-10-27
      More changes to draft patch refactoring global read
      lock implementation. Makes GRL yet another type of
      metadata lock and thus exposes it to deadlock detector
      in MDL subsystem.
      
      Solves bugs #54673 "It takes too long to get readlock for
      'FLUSH TABLES WITH READ LOCK'" and #57006 "Deadlock between
      HANDLER and FLUSH TABLES WITH READ LOCK".
      
      Work-in-progress. Polished INSERT DELAYED code.

    modified:
      sql/sql_insert.cc
=== modified file 'sql/sql_insert.cc'
--- a/sql/sql_insert.cc	2010-10-19 13:31:53 +0000
+++ b/sql/sql_insert.cc	2010-10-27 10:39:04 +0000
@@ -77,7 +77,8 @@
 #include "sql_audit.h"
 
 #ifndef EMBEDDED_LIBRARY
-static bool delayed_get_table(THD *thd, TABLE_LIST *table_list);
+static bool delayed_get_table(THD *thd, MDL_request *grl_protection_request,
+                              TABLE_LIST *table_list);
 static int write_delayed(THD *thd, TABLE *table, enum_duplicates duplic,
                          LEX_STRING query, bool ignore, bool log_on);
 static void end_delayed_insert(THD *thd);
@@ -559,7 +560,7 @@ bool open_and_lock_for_insert_delayed(TH
     DBUG_RETURN(TRUE);
 
   bool error= FALSE;
-  if (delayed_get_table(thd, table_list))
+  if (delayed_get_table(thd, &protection_request, table_list))
     error= TRUE;
   else if (table_list->table)
   {
@@ -2072,7 +2073,8 @@ Delayed_insert *find_handler(THD *thd, T
 */
 
 static
-bool delayed_get_table(THD *thd, TABLE_LIST *table_list)
+bool delayed_get_table(THD *thd, MDL_request *grl_protection_request,
+                       TABLE_LIST *table_list)
 {
   int error;
   Delayed_insert *di;
@@ -2098,8 +2100,6 @@ bool delayed_get_table(THD *thd, TABLE_L
     */
     if (! (di= find_handler(thd, table_list)))
     {
-      bool not_used;
-
       if (!(di= new Delayed_insert()))
         goto end_create;
       mysql_mutex_lock(&LOCK_thread_count);
@@ -2121,8 +2121,7 @@ bool delayed_get_table(THD *thd, TABLE_L
       /* We need the tickets so that they can be cloned in handle_delayed_insert */
       di->grl_protection.init(MDL_key::GLOBAL, "", "",
                               MDL_INTENTION_EXCLUSIVE);
-      di->grl_protection.ticket= thd->mdl_context.find_ticket(
-                                        &di->grl_protection, &not_used);
+      di->grl_protection.ticket= grl_protection_request->ticket;
       init_mdl_requests(&di->table_list);
       di->table_list.mdl_request.ticket= table_list->mdl_request.ticket;
 


Attachment: [text/bzr-bundle] bzr/dmitry.lenev@oracle.com-20101027103904-x2mfq4wr9poivm1h.bundle
Thread
bzr commit into mysql-5.5-runtime branch (Dmitry.Lenev:3185) Dmitry Lenev27 Oct