[MDEV-29691] Assertion failure in Diagnostics_area::set_error_status upon ER_TRANS_CACHE_FULL Created: 2022-10-03  Updated: 2023-11-28

Status: Open
Project: MariaDB Server
Component/s: Replication, Server
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

Type: Bug Priority: Major
Reporter: Elena Stepanova Assignee: Rucha Deodhar
Resolution: Unresolved Votes: 0
Labels: None


 Description   

--source include/have_log_bin.inc
--source include/have_binlog_format_row.inc
--source include/have_innodb.inc
 
SET @cachesize.save= @@max_binlog_cache_size;
 
CREATE TABLE t (f MEDIUMBLOB) ENGINE=InnoDB;
INSERT INTO t VALUES (REPEAT('x',1200000)),(REPEAT('x',30000));
CREATE TRIGGER tr BEFORE INSERT ON t FOR EACH ROW BEGIN END;
 
--connect (con1,localhost,root,,test)
 
SET GLOBAL MAX_BINLOG_CACHE_SIZE= 1048576;
START TRANSACTION;
--error ER_TRANS_CACHE_FULL
UPDATE t SET f = 'xx';
 
# Cleanup
--disconnect con1
--connection default
DROP TABLE t;
SET GLOBAL MAX_BINLOG_CACHE_SIZE= @cachesize.save;

10.3 dd8833bf

mysqld: /data/src/10.3/sql/sql_error.cc:445: void Diagnostics_area::set_error_status(uint, const char*, const char*, const Sql_user_condition_identity&, const Sql_condition*): Assertion `! is_set() || m_can_overwrite_status' failed.
221003 22:00:48 [ERROR] mysqld got signal 6 ;
 
#7  0x00007f543221c662 in __GI___assert_fail (assertion=0x5605fe562e40 "! is_set() || m_can_overwrite_status", file=0x5605fe5627e0 "/data/src/10.3/sql/sql_error.cc", line=445, function=0x5605fe562ea0 "void Diagnostics_area::set_error_status(uint, const char*, const char*, const Sql_user_condition_identity&, const Sql_condition*)") at assert.c:101
#8  0x00005605fc891a18 in Diagnostics_area::set_error_status (this=0x62a0000d17e8, sql_errno=1197, message=0x5605fe84a5c0 "Multi-statement transaction required more than 'max_binlog_cache_size' bytes of storage; increase this mysqld variable and try again", sqlstate=0x5605fe5dd300 "HY000", ucid=..., error_condition=0x0) at /data/src/10.3/sql/sql_error.cc:445
#9  0x00005605fc83a2a9 in THD::raise_condition (this=0x62a0000cc208, sql_errno=1197, sqlstate=0x5605fe5dd300 "HY000", level=Sql_state_errno_level::WARN_LEVEL_ERROR, ucid=..., msg=0x5605fe84a5c0 "Multi-statement transaction required more than 'max_binlog_cache_size' bytes of storage; increase this mysqld variable and try again") at /data/src/10.3/sql/sql_class.cc:1060
#10 0x00005605fc697614 in THD::raise_condition (this=0x62a0000cc208, sql_errno=1197, sqlstate=0x0, level=Sql_state_errno_level::WARN_LEVEL_ERROR, msg=0x5605fe84a5c0 "Multi-statement transaction required more than 'max_binlog_cache_size' bytes of storage; increase this mysqld variable and try again") at /data/src/10.3/sql/sql_class.h:4409
#11 0x00005605fc67ef56 in my_message_sql (error=1197, str=0x5605fe84a5c0 "Multi-statement transaction required more than 'max_binlog_cache_size' bytes of storage; increase this mysqld variable and try again", MyFlags=16) at /data/src/10.3/sql/mysqld.cc:3717
#12 0x00005605fe3a15a2 in my_message (error=1197, str=0x5605fe84a5c0 "Multi-statement transaction required more than 'max_binlog_cache_size' bytes of storage; increase this mysqld variable and try again", MyFlags=0) at /data/src/10.3/mysys/my_error.c:196
#13 0x00005605fd35b41f in MYSQL_BIN_LOG::set_write_error (this=0x5605ffb80140 <mysql_bin_log>, thd=0x62a0000cc208, is_transactional=true) at /data/src/10.3/sql/log.cc:2169
#14 0x00005605fd3723be in MYSQL_BIN_LOG::flush_and_set_pending_rows_event (this=0x5605ffb80140 <mysql_bin_log>, thd=0x62a0000cc208, event=0x0, is_transactional=true) at /data/src/10.3/sql/log.cc:5933
#15 0x00005605fc8644ad in THD::binlog_flush_pending_rows_event (this=0x62a0000cc208, stmt_end=true, is_transactional=true) at /data/src/10.3/sql/sql_class.cc:7164
#16 0x00005605fc808d79 in THD::binlog_flush_pending_rows_event (this=0x62a0000cc208, stmt_end=true) at /data/src/10.3/sql/sql_class.h:2557
#17 0x00005605fc7ced8b in close_thread_tables (thd=0x62a0000cc208) at /data/src/10.3/sql/sql_base.cc:862
#18 0x00005605fc9580b6 in mysql_execute_command (thd=0x62a0000cc208) at /data/src/10.3/sql/sql_parse.cc:6161
#19 0x00005605fc963608 in mysql_parse (thd=0x62a0000cc208, rawbuf=0x62b00003f228 "UPDATE t SET f = 'xx'", length=21, parser_state=0x7f541b3939d0, is_com_multi=false, is_next_command=false) at /data/src/10.3/sql/sql_parse.cc:7855
#20 0x00005605fc93ac56 in dispatch_command (command=COM_QUERY, thd=0x62a0000cc208, packet=0x629000140209 "UPDATE t SET f = 'xx'", packet_length=21, is_com_multi=false, is_next_command=false) at /data/src/10.3/sql/sql_parse.cc:1852
#21 0x00005605fc93780e in do_command (thd=0x62a0000cc208) at /data/src/10.3/sql/sql_parse.cc:1398
#22 0x00005605fccfa336 in do_handle_one_connection (connect=0x608000001228) at /data/src/10.3/sql/sql_connect.cc:1403
#23 0x00005605fccf9c32 in handle_one_connection (arg=0x608000001228) at /data/src/10.3/sql/sql_connect.cc:1308
#24 0x00005605fe2a529f in pfs_spawn_thread (arg=0x615000007608) at /data/src/10.3/storage/perfschema/pfs.cc:1869
#25 0x00007f54323c7ea7 in start_thread (arg=<optimized out>) at pthread_create.c:477
#26 0x00007f54322e7aef in clone () at ../sysdeps/unix/sysv/linux/x86_64/clone.S:95

Reproducible on all 10.3+, including previous minor releases.

Non-debug build returns ER_TRANS_CACHE_FULL:

UPDATE t SET f = 'xx';
ERROR HY000: Multi-statement transaction required more than 'max_binlog_cache_size' bytes of storage; increase this mysqld variable and try again


Generated at Thu Feb 08 10:10:33 UTC 2024 using Jira 8.20.16#820016-sha1:9d11dbea5f4be3d4cc21f03a88dd11d8c8687422.