Bug #57113 ha_partition::extra(ha_extra_function): Assertion `m_extra_cache' failed
Submitted: 29 Sep 2010 19:25 Modified: 1 Oct 2010 19:46
Reporter: Elena Stepanova Email Updates:
Status: Duplicate Impact on me:
None 
Category:MySQL Server: Partitions Severity:S2 (Serious)
Version:5.1-bugteam-debug, 5.5.7-rc-debug OS:Any
Assigned to: Assigned Account CPU Architecture:Any
Tags: regression

[29 Sep 2010 19:25] Elena Stepanova
Description:
Version: '5.5.7-rc-debug-log'  
mysqld: sql/ha_partition.cc:5701: virtual int ha_partition::extra(ha_extra_function): Assertion `m_extra_cache' failed.
100929 21:42:01 - mysqld got signal 6 ;

#5  0x00002b07facc3fb0 in abort () from /lib64/libc.so.6
#6  0x00002b07facbc286 in __assert_fail () from /lib64/libc.so.6
#7  0x0000000000a4675b in ha_partition::extra (this=0x1a2d3e0, operation=HA_EXTRA_PREPARE_FOR_UPDATE)
    at /sql/ha_partition.cc:5701
#8  0x0000000000682372 in multi_update::send_data (this=0x19f1a68, not_used_values=@0x4588a280)
    at /sql/sql_update.cc:1693
#9  0x0000000000616f1e in end_send (join=0x1a05cf0, join_tab=0x1a0a720, end_of_records=false)
    at /sql/sql_select.cc:12546
#10 0x000000000061e3cf in evaluate_join_record (join=0x1a05cf0, join_tab=0x1a0a4c8, error=0)
    at /sql/sql_select.cc:11763
#11 0x000000000061e578 in sub_select (join=0x1a05cf0, join_tab=0x1a0a4c8, end_of_records=false)
    at /sql/sql_select.cc:11639
#12 0x000000000061e3cf in evaluate_join_record (join=0x1a05cf0, join_tab=0x1a0a270, error=0)
    at /sql/sql_select.cc:11763
#13 0x000000000061e578 in sub_select (join=0x1a05cf0, join_tab=0x1a0a270, end_of_records=false)
    at /sql/sql_select.cc:11639
#14 0x000000000062ee1c in do_select (join=0x1a05cf0, fields=0x4588a280, table=0x0, procedure=0x0)
    at /sql/sql_select.cc:11404
#15 0x000000000064129f in JOIN::exec (this=0x1a05cf0)
    at /sql/sql_select.cc:2356
#16 0x000000000063c132 in mysql_select (thd=0x196ba40, rref_pointer_array=0x196ddb8, tables=0x19f0ad8, wild_num=0,
    fields=@0x4588a280, conds=0x19f18e0, og_num=0, order=0x0, group=0x0, having=0x0, proc_param=0x0,
    select_options=1342177408, result=0x19f1a68, unit=0x196d5e8, select_lex=0x196dbe8)
    at /sql/sql_select.cc:2550
#17 0x000000000068016d in mysql_multi_update (thd=0x196ba40, table_list=0x19f0ad8, fields=0x196dcf0, values=0x196e0c8,
    conds=0x19f18e0, options=0, handle_duplicates=DUP_ERROR, ignore=false, unit=0x196d5e8, select_lex=0x196dbe8,
    result=0x4588b0c0) at /sql/sql_update.cc:1188
#18 0x00000000005ed8d8 in mysql_execute_command (thd=0x196ba40)
    at /sql/sql_parse.cc:2878
#19 0x00000000005f2c86 in mysql_parse (thd=0x196ba40,
    rawbuf=0x19f0910 "UPDATE t_celosia_ddl_partitions t1, t_celosia_ddl_no_partitions t2\nSET t1.year = '1955'\n  WHERE t1.name = 'FooBar'", length=114, parser_state=0x4588b9e0)
    at /sql/sql_parse.cc:5594
#20 0x00000000005f3868 in dispatch_command (command=COM_QUERY, thd=0x196ba40,
    packet=0x1a28b01 "UPDATE t_celosia_ddl_partitions t1, t_celosia_ddl_no_partitions t2\nSET t1.year = '1955'\n  WHERE t1.name = 'FooBar'", packet_length=114)
    at /sql/sql_parse.cc:1139
#21 0x00000000005f4cc7 in do_command (thd=0x196ba40)
    at /sql/sql_parse.cc:811
#22 0x00000000006c2d46 in do_handle_one_connection (thd_arg=0x196ba40)
    at /sql/sql_connect.cc:1192
#23 0x00000000006c2e41 in handle_one_connection (arg=0x196ba40)
    at /sql/sql_connect.cc:1131
#24 0x000000000092c01c in pfs_spawn_thread (arg=0x1a1f260)
    at /storage/perfschema/pfs.cc:1015
#25 0x00002b07fa6e4143 in start_thread () from /lib64/libpthread.so.0
#26 0x00002b07fad538cd in clone () from /lib64/libc.so.6

thd->query at 0x19f0910 = UPDATE t_celosia_ddl_partitions t1, t_celosia_ddl_no_partitions t2
SET t1.year = '1955'
  WHERE t1.name = 'FooBar'
thd->thread_id=2
thd->killed=NOT_KILLED

Not reproducible on 5.5.6-rc and 5.1.51.
Reproducible on 5.6.1-m4-debug and 5.6.99-debug (did not fit into the Version field)

How to repeat:
--source include/have_innodb.inc

--disable_warnings
DROP DATABASE IF EXISTS celosia_features;
--enable_warnings
CREATE DATABASE celosia_features;
USE celosia_features;

CREATE TABLE t_celosia_ddl_partitions (
  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 t_celosia_ddl_partitions 
  VALUES ( 1, 'FooBar', '1924' );

CREATE TABLE t_celosia_ddl_no_partitions 
  ( id INT );

INSERT INTO t_celosia_ddl_no_partitions
  VALUES ( 1 ),( 2 );

UPDATE t_celosia_ddl_partitions t1, t_celosia_ddl_no_partitions t2
  SET t1.year = '1955'
  WHERE t1.name = 'FooBar';

DROP DATABASE celosia_features;

--exit
[30 Sep 2010 13:14] Mattias Jonsson
regression introduced by the fix for bug#55458.
[30 Sep 2010 13:33] Bugs System
A patch for this bug has been committed. After review, it may
be pushed to the relevant source trees for release in the next
version. You can access the patch from:

  http://lists.mysql.com/commits/119542

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.
[30 Sep 2010 13:59] Bugs System
A patch for this bug has been committed. After review, it may
be pushed to the relevant source trees for release in the next
version. You can access the patch from:

  http://lists.mysql.com/commits/119550

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.
[30 Sep 2010 14:07] Bugs System
A patch for this bug has been committed. After review, it may
be pushed to the relevant source trees for release in the next
version. You can access the patch from:

  http://lists.mysql.com/commits/119553

3211 Mattias Jonsson	2010-09-30 [merge]
      Manual merge of post push fix for bug#55458 (bug#57113)
      into mysql-5.5-bugteam
[1 Oct 2010 19:46] Mattias Jonsson
closing as duplicate of bug#55458. (pushed fix into mysql-5.1-bugteam, mysql-5.5-bugteam and mysql-trunk-merge)
[1 Nov 2010 18:59] Bugs System
Pushed into mysql-5.1 5.1.53 (revid:build@mysql.com-20101101184443-o2olipi8vkaxzsqk) (version source revid:build@mysql.com-20101101184443-o2olipi8vkaxzsqk) (merge vers: 5.1.53) (pib:21)
[9 Nov 2010 19:46] Bugs System
Pushed into mysql-5.5 5.5.7-rc (revid:sunanda.menon@sun.com-20101109182959-otkxq8vo2dcd13la) (version source revid:sunanda.menon@sun.com-20101109182959-otkxq8vo2dcd13la) (merge vers: 5.5.7-rc) (pib:21)
[13 Nov 2010 16:05] Bugs System
Pushed into mysql-trunk 5.6.99-m5 (revid:alexander.nozdrin@oracle.com-20101113155825-czmva9kg4n31anmu) (version source revid:alexander.nozdrin@oracle.com-20101113152450-2zzcm50e7i4j35v7) (merge vers: 5.6.1-m4) (pib:21)
[13 Nov 2010 16:36] Bugs System
Pushed into mysql-next-mr (revid:alexander.nozdrin@oracle.com-20101113160336-atmtmfb3mzm4pz4i) (version source revid:vasil.dimov@oracle.com-20100629074804-359l9m9gniauxr94) (pib:21)