Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
MDEV-8203 Assert in Query_log_event::do_apply_event()
This happens because the master writes a table_map event to the binary log, but no row event. The slave has a check that there should always be a row event if there was a table_map event, which causes a crash. Fixed by remembering in the cache what kind of events are logged and ignore cached statements which is just a table map event.
- Loading branch information
Showing
8 changed files
with
209 additions
and
28 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,44 @@ | ||
include/master-slave.inc | ||
[connection master] | ||
create or replace table t1(id int)engine=innodb; | ||
create or replace table t3(id int)engine=myisam; | ||
create or replace function t99 (a int) | ||
returns int(10) | ||
MODIFIES SQL DATA | ||
begin | ||
if (a > 100) | ||
then | ||
insert into t3 values (a); | ||
end if; | ||
return a; | ||
end// | ||
begin; | ||
insert into t1 values(t99(1)); | ||
insert into t1 values(t99(101)); | ||
commit; | ||
select * from t1; | ||
id | ||
1 | ||
101 | ||
select * from t3; | ||
id | ||
101 | ||
insert into t1 values(t99(1)); | ||
drop function t99; | ||
drop table t1,t3; | ||
connection slave; | ||
connection master; | ||
CREATE TABLE t1 (i INT) ENGINE=InnoDB; | ||
CREATE TABLE t2 (j INT) ENGINE=MyISAM; | ||
CREATE TRIGGER tr AFTER INSERT ON t1 FOR EACH ROW | ||
BEGIN | ||
SET @a = unknown_column_just_to_raise_an_error; | ||
INSERT INTO t2 VALUES (NULL) ; | ||
END|| | ||
INSERT INTO t1 VALUES (1); | ||
ERROR 42S22: Unknown column 'unknown_column_just_to_raise_an_error' in 'field list' | ||
connection slave; | ||
connection master; | ||
drop trigger tr; | ||
drop table t1,t2; | ||
include/rpl_end.inc |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,72 @@ | ||
# | ||
# Test mixing transactional and non transactional tables | ||
# | ||
|
||
--source include/master-slave.inc | ||
--source include/have_innodb.inc | ||
--source include/have_binlog_format_row.inc | ||
|
||
# | ||
# Test updating conditionally a non transactinal table in a function | ||
# This verifies that we don't write only a table map for a non transactional, | ||
# without any row events | ||
# The original bug caused a crash on the slave when doing a sync_slave | ||
# | ||
|
||
create or replace table t1(id int)engine=innodb; | ||
create or replace table t3(id int)engine=myisam; | ||
|
||
delimiter //; | ||
create or replace function t99 (a int) | ||
returns int(10) | ||
MODIFIES SQL DATA | ||
begin | ||
if (a > 100) | ||
then | ||
insert into t3 values (a); | ||
end if; | ||
return a; | ||
end// | ||
delimiter ;// | ||
begin; | ||
insert into t1 values(t99(1)); | ||
insert into t1 values(t99(101)); | ||
commit; | ||
select * from t1; | ||
select * from t3; | ||
insert into t1 values(t99(1)); | ||
|
||
drop function t99; | ||
drop table t1,t3; | ||
|
||
sync_slave_with_master; | ||
connection master; | ||
|
||
# | ||
# MDEV-8203 | ||
# Assertion `!current_stmt_is_commit || !rgi->tables_to_lock' failed in | ||
# Query_log_event::do_apply_event(rpl_group_info*, const char*, uint32) | ||
# | ||
|
||
CREATE TABLE t1 (i INT) ENGINE=InnoDB; | ||
CREATE TABLE t2 (j INT) ENGINE=MyISAM; | ||
|
||
--delimiter || | ||
CREATE TRIGGER tr AFTER INSERT ON t1 FOR EACH ROW | ||
BEGIN | ||
SET @a = unknown_column_just_to_raise_an_error; | ||
INSERT INTO t2 VALUES (NULL) ; | ||
END|| | ||
--delimiter ; | ||
|
||
--error ER_BAD_FIELD_ERROR | ||
INSERT INTO t1 VALUES (1); | ||
--sync_slave_with_master | ||
|
||
connection master; | ||
|
||
drop trigger tr; | ||
drop table t1,t2; | ||
|
||
# End of 4.1 tests | ||
--source include/rpl_end.inc |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Oops, something went wrong.