Bug #80080 Assertion `!table || (!table->read_set || bitmap_is_set(table->read_set, field_i
Submitted: 20 Jan 2016 17:22 Modified: 15 Dec 2016 22:47
Reporter: Matthias Leich Email Updates:
Status: Closed Impact on me:
None 
Category:MySQL Server: DML Severity:S2 (Serious)
Version:5.7.12-debug OS:Any
Assigned to: CPU Architecture:Any

[20 Jan 2016 17:22] Matthias Leich
Description:
Assert hit during RQG testing with concurrent DDL/DML.

Thread 1 (Thread 0x7f4e3fc52700 (LWP 10733)):
...
#3  <signal handler called>
#4  raise () from /lib64/libc.so.6
#5  abort () from /lib64/libc.so.6
#6  __assert_fail_base () from /lib64/libc.so.6
#7  __assert_fail () from /lib64/libc.so.6
#8  Field_varstring::val_str (this=0x7f4ddc0335e0, val_buffer=0x7f4ddc039880, val_ptr=0x7f4ddc0399e8)
    at sql/field.cc:7671
#9  Item_field::val_str (this=0x7f4ddc0399d8, str=0x7f4ddc039880)
    at sql/item.cc:2932
#10 Item_func_substr::val_str (this=0x7f4ddc039870, str=0x7f4ddc039880)
    at sql/item_strfunc.cc:1733
#11 Item::save_in_field_inner (this=0x7f4ddc039870, field=0x7f4ddc0111e0, no_conversions=false)
    at sql/item.cc:6809
#12 Item::save_in_field (this=0x7f4ddc039870, field=0x7f4ddc0111e0, no_conversions=false)
    at sql/item.cc:6724
#13 update_generated_read_fields (buf=0x7f4ddc0109a0 "\340\001", table=0x7f4ddc00fff0, active_index=64)
    at sql/table.cc:7593
#14 handler::ha_rnd_next (this=0x7f4ddc00e810, buf=0x7f4ddc0109a0 "\340\001")
    at sql/handler.cc:2821
#15 rr_sequential (info=0x7f4e3fc4fe10)
    at sql/records.cc:510
#16 mysql_update (thd=0x7f4ddc000b70, fields=..., values=..., limit=18446744073709551615, handle_duplicates=DUP_ERROR, found_return=0x7f4e3fc50468, updated_return=0x7f4e3fc50460)
    at sql/sql_update.cc:802
#17 Sql_cmd_update::try_single_table_update (this=0x7f4ddc006340, thd=0x7f4ddc000b70, switch_to_multitable=0x7f4e3fc5050f)
    at sql/sql_update.cc:2883
#18 Sql_cmd_update::execute (this=0x7f4ddc006340, thd=0x7f4ddc000b70)
    at sql/sql_update.cc:3010
#19 mysql_execute_command (thd=0x7f4ddc000b70, first_level=true)
    at sql/sql_parse.cc:3529
#20 mysql_parse (thd=0x7f4ddc000b70, parser_state=0x7f4e3fc516a0)
    at sql/sql_parse.cc:5518
#21 dispatch_command (thd=0x7f4ddc000b70, com_data=0x7f4e3fc51df0, command=COM_QUERY)
    at sql/sql_parse.cc:1428
#22 do_command (thd=0x7f4ddc000b70)
    at sql/sql_parse.cc:996
....
mysqld: sql/field.cc:7671: virtual String* Field_varstring::val_str(String*, String*): Assertion `!table || (!table->read_set || bitmap_is_set(table->read_set, field_index))' failed.
13:53:07 UTC - mysqld got signal 6 ;
...
Query (7f4ddc005700): UPDATE t1 SET extra = col1
Connection ID (thread ID): 15
Status: NOT_KILLED

MySQL versions checked and showing that problem:
mysql-trunk 0e7d3f36871e0089ac68bdca1743d65bdcac70c1 2016-01-20
mysql-5.7 530c5bb1dd2139751b0da75f54c705ca394572b8 2016-01-20
all compiled with debug.
The test using mysql-5.7 compiled without debug passes
== does not show effects which are obvious bad like
   unexpected server messages or crash or similar

Experiments showed that
- concurrent DDL/DML
- using a partitioned table with virtual column
seems to be required for the assert to show up.

How to repeat:
I will add more information soon.
[15 Dec 2016 22:47] Paul DuBois
Posted by developer:
 
Noted in 5.7.18, 8.0.1 changelogs.

Updating a row of a table that had partitioning on a generated column
could raise an assertion failure for debug builds, and return
incorrect results in nondebug builds.