[MDEV-22783] Assertion `!is_set() || (m_status == DA_OK_BULK && is_bulk_op())' failed in Diagnostics_area::set_ok_status on DELETE on partitioned table Created: 2020-06-03  Updated: 2023-11-28

Status: Confirmed
Project: MariaDB Server
Component/s: Data Manipulation - Delete
Affects Version/s: 10.3, 10.4, 10.5, 10.6, 10.7, 10.8, 10.9, 10.10
Fix Version/s: 10.4, 10.5, 10.6, 10.11, 11.0

Type: Bug Priority: Major
Reporter: Roel Van de Paar Assignee: Rucha Deodhar
Resolution: Unresolved Votes: 0
Labels: not-10.1, not-10.2, regression

Issue Links:
Relates
relates to MDEV-5628 Assertion `! is_set()' or `!is_set() ... Closed

 Description   

USE test;
SET SQL_MODE='';
CREATE TABLE t(a INT,KEY (a)) PARTITION BY KEY (a);
INSERT INTO t VALUES(0),(0);
DELETE FROM t WHERE a=(SELECT a FROM t);

Leads to:

10.5.4 8569dac1ec9f6853a0b2f3ea9bcbda67644ead24

mysqld: /test/10.5_dbg/sql/sql_error.cc:335: void Diagnostics_area::set_ok_status(ulonglong, ulonglong, const char*): Assertion `!is_set() || (m_status == DA_OK_BULK && is_bulk_op())' failed.

10.5.4 8569dac1ec9f6853a0b2f3ea9bcbda67644ead24

Core was generated by `/test/MD260520-mariadb-10.5.4-linux-x86_64-dbg/bin/mysqld --no-defaults --core-'.
Program terminated with signal SIGABRT, Aborted.
#0  __pthread_kill (threadid=<optimized out>, signo=signo@entry=6)
    at ../sysdeps/unix/sysv/linux/pthread_kill.c:57
[Current thread is 1 (Thread 0x15117bd24700 (LWP 3669719))]
(gdb) bt
(gdb) (gdb) #0  __pthread_kill (threadid=<optimized out>, signo=signo@entry=6) at ../sysdeps/unix/sysv/linux/pthread_kill.c:57
#1  0x0000555efd9a5d7a in my_write_core (sig=sig@entry=6) at /test/10.5_dbg/mysys/stacktrace.c:518
#2  0x0000555efd14b385 in handle_fatal_signal (sig=6) at /test/10.5_dbg/sql/signal_handler.cc:330
#3  <signal handler called>
#4  __GI_raise (sig=sig@entry=6) at ../sysdeps/unix/sysv/linux/raise.c:51
#5  0x000015117a468801 in __GI_abort () at abort.c:79
#6  0x000015117a45839a in __assert_fail_base (fmt=0x15117a5df7d8 "%s%s%s:%u: %s%sAssertion `%s' failed.\n%n", assertion=assertion@entry=0x555efdb1b198 "!is_set() || (m_status == DA_OK_BULK && is_bulk_op())", file=file@entry=0x555efdb1b140 "/test/10.5_dbg/sql/sql_error.cc", line=line@entry=335, function=function@entry=0x555efdb1bcc0 <Diagnostics_area::set_ok_status(unsigned long long, unsigned long long, char const*)::__PRETTY_FUNCTION__> "void Diagnostics_area::set_ok_status(ulonglong, ulonglong, const char*)") at assert.c:92
#7  0x000015117a458412 in __GI___assert_fail (assertion=assertion@entry=0x555efdb1b198 "!is_set() || (m_status == DA_OK_BULK && is_bulk_op())", file=file@entry=0x555efdb1b140 "/test/10.5_dbg/sql/sql_error.cc", line=line@entry=335, function=function@entry=0x555efdb1bcc0 <Diagnostics_area::set_ok_status(unsigned long long, unsigned long long, char const*)::__PRETTY_FUNCTION__> "void Diagnostics_area::set_ok_status(ulonglong, ulonglong, const char*)") at assert.c:101
#8  0x0000555efce573af in Diagnostics_area::set_ok_status (this=0x15115901ab90, affected_rows=affected_rows@entry=0, last_insert_id=last_insert_id@entry=0, message=message@entry=0x0) at /test/10.5_dbg/sql/sql_error.cc:335
#9  0x0000555efd30dfc9 in my_ok (message=0x0, id=0, affected_rows_arg=0, thd=0x151159015088) at /test/10.5_dbg/sql/sql_class.h:5198
#10 mysql_delete (thd=thd@entry=0x151159015088, table_list=0x151159074198, conds=<optimized out>, order_list=order_list@entry=0x151159019b40, limit=18446744073709551615, options=0, result=0x0) at /test/10.5_dbg/sql/sql_delete.cc:486
#11 0x0000555efcea35a7 in mysql_execute_command (thd=thd@entry=0x151159015088) at /test/10.5_dbg/sql/sql_parse.cc:4787
#12 0x0000555efceae02e in mysql_parse (thd=thd@entry=0x151159015088, rawbuf=<optimized out>, length=<optimized out>, parser_state=parser_state@entry=0x15117bd233d0, is_com_multi=is_com_multi@entry=false, is_next_command=is_next_command@entry=false) at /test/10.5_dbg/sql/sql_parse.cc:7991
#13 0x0000555efce9ab42 in dispatch_command (command=command@entry=COM_QUERY, thd=thd@entry=0x151159015088, packet=packet@entry=0x151159067089 "DELETE FROM t WHERE a=(SELECT a FROM t)", packet_length=packet_length@entry=39, is_com_multi=is_com_multi@entry=false, is_next_command=is_next_command@entry=false) at /test/10.5_dbg/sql/sql_parse.cc:1874
#14 0x0000555efce9931c in do_command (thd=0x151159015088) at /test/10.5_dbg/sql/sql_parse.cc:1355
#15 0x0000555efcff373f in do_handle_one_connection (connect=<optimized out>, connect@entry=0x15115ac453a8, put_in_cache=put_in_cache@entry=true) at /test/10.5_dbg/sql/sql_connect.cc:1411
#16 0x0000555efcff3e5b in handle_one_connection (arg=arg@entry=0x15115ac453a8) at /test/10.5_dbg/sql/sql_connect.cc:1313
#17 0x0000555efd45314e in pfs_spawn_thread (arg=0x151179845888) at /test/10.5_dbg/storage/perfschema/pfs.cc:2201
#18 0x000015117b14b6db in start_thread (arg=0x15117bd24700) at pthread_create.c:463
#19 0x000015117a54988f in clone () at ../sysdeps/unix/sysv/linux/x86_64/clone.S:95

Bug confirmed present in:
MariaDB: 10.3.24 (dbg), 10.4.14 (dbg), 10.5.4 (dbg)

Bug confirmed not present in:
MariaDB: 10.1.46 (dbg), 10.1.46 (opt), 10.2.33 (dbg), 10.2.33 (opt), 10.3.24 (opt), 10.4.14 (opt), 10.5.4 (opt)
MySQL: 5.5.62 (dbg), 5.5.62 (opt), 5.6.47 (dbg), 5.6.47 (opt), 5.7.29 (dbg), 5.7.29 (opt), 8.0.19 (dbg), 8.0.19 (opt)

10.2.33 (dbg)

10.2.33>DELETE FROM t WHERE a=(SELECT a FROM t);
ERROR 1093 (HY000): Table 't' is specified twice, both as a target for 'DELETE' and as a separate source for data



 Comments   
Comment by Elena Stepanova [ 2020-08-14 ]

It is not a regression. You'll get the same problem on earlier versions if you use a different table in the subquery. Which makes it likely to be the same as MDEV-5628.

Comment by Roel Van de Paar [ 2022-06-29 ]

This testcase reproduces in 10.4+ only:

CREATE TABLE t0 (a INT) ENGINE=InnoDB PARTITION BY KEY(a);
INSERT INTO t0 VALUES (0),(0),(0),(0),(0),(0),(0),(0),(0),(0),(0),(0);
DELETE FROM t0 WHERE a=(SELECT * FROM t0 WHERE a=0);

Leads to:

10.10.0 63961a08a6203f4d58363a9321e4cf9c8b07a9fe (Debug)

mysqld: /test/10.10_dbg/sql/sql_error.cc:335: void Diagnostics_area::set_ok_status(ulonglong, ulonglong, const char*): Assertion `!is_set() || (m_status == DA_OK_BULK && is_bulk_op())' failed.

10.10.0 63961a08a6203f4d58363a9321e4cf9c8b07a9fe (Debug)

Core was generated by `/test/MD290622-mariadb-10.10.0-linux-x86_64-dbg/bin/mysqld --no-defaults --core'.
Program terminated with signal SIGABRT, Aborted.
#0  __GI_raise (sig=sig@entry=6) at ../sysdeps/unix/sysv/linux/raise.c:50
[Current thread is 1 (Thread 0x1514cc0b0700 (LWP 137537))]
(gdb) bt
#0  __GI_raise (sig=sig@entry=6) at ../sysdeps/unix/sysv/linux/raise.c:50
#1  0x00001514e4226859 in __GI_abort () at abort.c:79
#2  0x00001514e4226729 in __assert_fail_base (fmt=0x1514e43bc588 "%s%s%s:%u: %s%sAssertion `%s' failed.\n%n", assertion=0x55e2935d0590 "!is_set() || (m_status == DA_OK_BULK && is_bulk_op())", file=0x55e2935d0468 "/test/10.10_dbg/sql/sql_error.cc", line=335, function=<optimized out>) at assert.c:92
#3  0x00001514e4237fd6 in __GI___assert_fail (assertion=assertion@entry=0x55e2935d0590 "!is_set() || (m_status == DA_OK_BULK && is_bulk_op())", file=file@entry=0x55e2935d0468 "/test/10.10_dbg/sql/sql_error.cc", line=line@entry=335, function=function@entry=0x55e2935d05c8 "void Diagnostics_area::set_ok_status(ulonglong, ulonglong, const char*)") at assert.c:101
#4  0x000055e2929ad175 in Diagnostics_area::set_ok_status (this=0x151494006b60, affected_rows=affected_rows@entry=0, last_insert_id=last_insert_id@entry=0, message=message@entry=0x0) at /test/10.10_dbg/sql/sql_error.h:1031
#5  0x000055e2929a6b01 in my_ok (message=0x0, id=0, affected_rows_arg=0, thd=0x151494000db8) at /test/10.10_dbg/sql/sql_class.h:5616
#6  mysql_delete (thd=thd@entry=0x151494000db8, table_list=0x151494013d30, conds=<optimized out>, order_list=order_list@entry=0x151494005ac0, limit=18446744073709551615, options=<optimized out>, result=<optimized out>) at /test/10.10_dbg/sql/sql_delete.cc:515
#7  0x000055e292a0386b in mysql_execute_command (thd=thd@entry=0x151494000db8, is_called_from_prepared_stmt=is_called_from_prepared_stmt@entry=false) at /test/10.10_dbg/sql/sql_limit.h:85
#8  0x000055e2929ef372 in mysql_parse (thd=thd@entry=0x151494000db8, rawbuf=<optimized out>, length=<optimized out>, parser_state=parser_state@entry=0x1514cc0af470) at /test/10.10_dbg/sql/sql_parse.cc:8036
#9  0x000055e2929fc95a in dispatch_command (command=command@entry=COM_QUERY, thd=thd@entry=0x151494000db8, packet=packet@entry=0x15149400b6c9 "DELETE FROM t0 WHERE a=(SELECT * FROM t0 WHERE a=0)", packet_length=packet_length@entry=51, blocking=blocking@entry=true) at /test/10.10_dbg/sql/sql_class.h:1364
#10 0x000055e2929ff064 in do_command (thd=0x151494000db8, blocking=blocking@entry=true) at /test/10.10_dbg/sql/sql_parse.cc:1407
#11 0x000055e292b5efde in do_handle_one_connection (connect=<optimized out>, connect@entry=0x55e2963c7568, put_in_cache=put_in_cache@entry=true) at /test/10.10_dbg/sql/sql_connect.cc:1418
#12 0x000055e292b5f4e7 in handle_one_connection (arg=0x55e2963c7568) at /test/10.10_dbg/sql/sql_connect.cc:1312
#13 0x00001514e4737609 in start_thread (arg=<optimized out>) at pthread_create.c:477
#14 0x00001514e4323133 in clone () at ../sysdeps/unix/sysv/linux/x86_64/clone.S:95

Bug confirmed present in:
MariaDB: 10.4.26 (dbg), 10.5.17 (dbg), 10.7.5 (dbg), 10.8.4 (dbg), 10.9.2 (dbg), 10.10.0 (dbg)

Bug (or feature/syntax) confirmed not present in:
MariaDB: 10.3.36 (dbg), 10.3.36 (opt), 10.4.26 (opt), 10.5.17 (opt), 10.6.9 (dbg), 10.6.9 (opt), 10.7.5 (opt), 10.8.4 (opt), 10.9.2 (opt), 10.10.0 (opt)
MySQL: 5.5.62 (dbg), 5.5.62 (opt), 5.6.51 (dbg), 5.6.51 (opt), 5.7.38 (dbg), 5.7.38 (opt), 8.0.29 (dbg), 8.0.29 (opt)

Comment by Alice Sherepa [ 2023-08-02 ]

Test cases from the above are still reproducible on 10.4-11.0, but not on 11.1,11.2 ( there - ER_SUBQUERY_NO_1_ROW (1242): Subquery returns more than 1 row)

But the weird test case below is reproducible on 10.4-11.2.

--source include/have_partition.inc 
  
CREATE TABLE  t1 ( pk int) partition BY KEY (pk) ;
DELETE FROM  t1 WHERE COLUMN_ADD( 1, 3, 171, 3, 52) = pk ;

mysqld: /10.4/src/sql/sql_error.cc:335: void Diagnostics_area::set_ok_status(ulonglong, ulonglong, const char*): Assertion `!is_set() || (m_status == DA_OK_BULK && is_bulk_op())' failed.
230802 17:07:40 [ERROR] mysqld got signal 6 ;
 
Server version: 10.4.31-MariaDB-debug-log source revision: ab10a675acb8198d4c772b807b81b50f97480d28
 
/lib/x86_64-linux-gnu/libc.so.6(+0x33fd6)[0x7f1902b08fd6]
sql/sql_error.cc:340(Diagnostics_area::set_ok_status(unsigned long long, unsigned long long, char const*))[0x5590ef63e0bd]
sql/sql_class.h:5166(my_ok(THD*, unsigned long long, unsigned long long, char const*))[0x5590ef555281]
sql/sql_delete.cc:517(mysql_delete(THD*, TABLE_LIST*, Item*, SQL_I_List<st_order>*, unsigned long long, unsigned long long, select_result*))[0x5590f036719f]
sql/sql_parse.cc:4815(mysql_execute_command(THD*))[0x5590ef713ef1]
sql/sql_parse.cc:8010(mysql_parse(THD*, char*, unsigned int, Parser_state*, bool, bool))[0x5590ef72a177]
sql/sql_parse.cc:1860(dispatch_command(enum_server_command, THD*, char*, unsigned int, bool, bool))[0x5590ef7005d9]
sql/sql_parse.cc:1378(do_command(THD*))[0x5590ef6fd104]
sql/sql_connect.cc:1420(do_handle_one_connection(CONNECT*))[0x5590efb0aa09]
sql/sql_connect.cc:1325(handle_one_connection)[0x5590efb0a2ad]
perfschema/pfs.cc:1871(pfs_spawn_thread)[0x5590f07b2dae]
nptl/pthread_create.c:478(start_thread)[0x7f1903023609]
/lib/x86_64-linux-gnu/libc.so.6(clone+0x43)[0x7f1902bf4133]
 
Query (0x62b0000a1290): DELETE FROM  t1 WHERE COLUMN_ADD( 1, 3, 171, 3, 52) = pk

on non-debug:

MariaDB [test]> DELETE FROM  t1 WHERE COLUMN_ADD( 1, 3, 171, 3, 52) = pk ;
ERROR 1919 (HY000): Encountered illegal format of dynamic column string

Generated at Thu Feb 08 09:17:26 UTC 2024 using Jira 8.20.16#820016-sha1:9d11dbea5f4be3d4cc21f03a88dd11d8c8687422.