List:Commits« Previous MessageNext Message »
From:Mattias Jonsson Date:September 30 2010 1:31pm
Subject:bzr commit into mysql-5.1-bugteam branch (mattias.jonsson:3482) Bug#55458
Bug#57113
View as plain text  
#At file:///Users/mattiasj/mysql-bzr/b55458-51-bt/ based on revid:mattias.jonsson@stripped

 3482 Mattias Jonsson	2010-09-30
      Bug#55458: Partitioned MyISAM table gets crashed by multi-table update
      Bug#57113: ha_partition::extra(ha_extra_function):
                  Assertion `m_extra_cache' failed
      
      Fix for bug#55458 included DBUG_ASSERTS causing
      debug builds of the server to crash on
      another multi-table update.
      
      Removed the asserts since they where wrong.
     @ mysql-test/r/partition.result
        updated result
     @ mysql-test/t/partition.test
        Added test for bug#57113
     @ sql/ha_partition.cc
        Removed the assert for m_extra_cache when
        ::extra(HA_PREPARE_FOR_UPDATE) was called.

    modified:
      mysql-test/r/partition.result
      mysql-test/t/partition.test
      sql/ha_partition.cc
=== modified file 'mysql-test/r/partition.result'
--- a/mysql-test/r/partition.result	2010-08-10 08:43:12 +0000
+++ b/mysql-test/r/partition.result	2010-09-30 13:30:53 +0000
@@ -1,5 +1,20 @@
 drop table if exists t1, t2;
 #
+# Bug#57113: ha_partition::extra(ha_extra_function):
+#            Assertion `m_extra_cache' failed
+CREATE TABLE t1
+(id INT NOT NULL PRIMARY KEY,
+name VARCHAR(16) NOT NULL,
+year YEAR,
+INDEX name (name(8))
+)
+PARTITION BY HASH(id) PARTITIONS 2;
+INSERT INTO t1 VALUES ( 1, 'FooBar', '1924' );
+CREATE TABLE t2 (id INT);
+INSERT INTO t2 VALUES (1),(2);
+UPDATE t1, t2 SET t1.year = '1955' WHERE t1.name = 'FooBar';
+DROP TABLE t1, t2;
+#
 # Bug#55458: Partitioned MyISAM table gets crashed by multi-table update 
 #
 CREATE TABLE t1 (

=== modified file 'mysql-test/t/partition.test'
--- a/mysql-test/t/partition.test	2010-08-10 08:43:12 +0000
+++ b/mysql-test/t/partition.test	2010-09-30 13:30:53 +0000
@@ -15,6 +15,28 @@ drop table if exists t1, t2;
 --enable_warnings
 
 --echo #
+--echo # Bug#57113: ha_partition::extra(ha_extra_function):
+--echo #            Assertion `m_extra_cache' failed
+CREATE TABLE t1
+(id INT NOT NULL PRIMARY KEY,
+ name VARCHAR(16) NOT NULL,
+ year YEAR,
+ INDEX name (name(8))
+)
+PARTITION BY HASH(id) PARTITIONS 2;
+
+INSERT INTO t1 VALUES ( 1, 'FooBar', '1924' );
+
+CREATE TABLE t2 (id INT);
+
+INSERT INTO t2 VALUES (1),(2);
+
+UPDATE t1, t2 SET t1.year = '1955' WHERE t1.name = 'FooBar';
+
+DROP TABLE t1, t2;
+
+
+--echo #
 --echo # Bug#55458: Partitioned MyISAM table gets crashed by multi-table update 
 --echo #
 CREATE TABLE t1 (

=== modified file 'sql/ha_partition.cc'
--- a/sql/ha_partition.cc	2010-09-07 15:56:43 +0000
+++ b/sql/ha_partition.cc	2010-09-30 13:30:53 +0000
@@ -5550,7 +5550,6 @@ int ha_partition::extra(enum ha_extra_fu
     DBUG_RETURN(prepare_for_rename());
     break;
   case HA_EXTRA_PREPARE_FOR_UPDATE:
-    DBUG_ASSERT(m_extra_cache);
     /*
       Needs to be run on the first partition in the range now, and 
       later in late_extra_cache, when switching to a new partition to scan.
@@ -5820,19 +5819,22 @@ void ha_partition::late_extra_cache(uint
 {
   handler *file;
   DBUG_ENTER("ha_partition::late_extra_cache");
-  DBUG_PRINT("info", ("extra_cache %u partid %u size %u", m_extra_cache,
+  DBUG_PRINT("info", ("extra_cache %u prepare %u partid %u size %u",
+                      m_extra_cache, m_extra_prepare_for_update,
                       partition_id, m_extra_cache_size));
 
   if (!m_extra_cache && !m_extra_prepare_for_update)
     DBUG_VOID_RETURN;
   file= m_file[partition_id];
-  if (m_extra_cache_size == 0)
-    VOID(file->extra(HA_EXTRA_CACHE));
-  else
-    VOID(file->extra_opt(HA_EXTRA_CACHE, m_extra_cache_size));
+  if (m_extra_cache)
+  {
+    if (m_extra_cache_size == 0)
+      VOID(file->extra(HA_EXTRA_CACHE));
+    else
+      VOID(file->extra_opt(HA_EXTRA_CACHE, m_extra_cache_size));
+  }
   if (m_extra_prepare_for_update)
   {
-    DBUG_ASSERT(m_extra_cache);
     VOID(file->extra(HA_EXTRA_PREPARE_FOR_UPDATE));
   }
   m_extra_cache_part_id= partition_id;


Attachment: [text/bzr-bundle] bzr/mattias.jonsson@oracle.com-20100930133053-6qxj7wlsmed2hc39.bundle
Thread
bzr commit into mysql-5.1-bugteam branch (mattias.jonsson:3482) Bug#55458Bug#57113Mattias Jonsson30 Sep