From: Mattias Jonsson Date: September 30 2010 1:57pm Subject: bzr commit into mysql-5.1-bugteam branch (mattias.jonsson:3482) Bug#55458 Bug#57113 List-Archive: http://lists.mysql.com/commits/119550 X-Bug: 55458,57113 Message-Id: <201009301358.o8UBrNZU020257@acsinet15.oracle.com> MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="===============1386178023425536374==" --===============1386178023425536374== MIME-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit Content-Disposition: inline #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. (updated after testing the patch in 5.5). @ 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:57:33 +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:57:33 +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:57:33 +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. @@ -5558,6 +5557,8 @@ int ha_partition::extra(enum ha_extra_fu m_extra_prepare_for_update= TRUE; if (m_part_spec.start_part != NO_CURRENT_PART_ID) { + if (!m_extra_cache) + m_extra_cache_part_id= m_part_spec.start_part; DBUG_ASSERT(m_extra_cache_part_id == m_part_spec.start_part); VOID(m_file[m_part_spec.start_part]->extra(HA_EXTRA_PREPARE_FOR_UPDATE)); } @@ -5820,19 +5821,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; --===============1386178023425536374== MIME-Version: 1.0 Content-Type: text/bzr-bundle; charset="us-ascii"; name="bzr/mattias.jonsson@stripped" Content-Transfer-Encoding: 7bit Content-Disposition: inline # Bazaar merge directive format 2 (Bazaar 0.90) # revision_id: mattias.jonsson@stripped\ # lqlvzel4utv8lw0i # target_branch: file:///Users/mattiasj/mysql-bzr/b55458-51-bt/ # testament_sha1: f8c60409052f6d522d18bf1a96a80151dbabcb35 # timestamp: 2010-09-30 15:57:47 +0200 # base_revision_id: mattias.jonsson@stripped\ # lex6mcfwm40w0j0h # # Begin bundle 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 --===============1386178023425536374==--