mirror of
https://github.com/MariaDB/server.git
synced 2025-08-08 11:22:35 +03:00
Merge remote-tracking branch 'origin/bb-10.2-ext' into 10.3
Conflicts: VERSION debian/mariadb-backup-10.2.files debian/mariadb-backup-10.2.install debian/mariadb-backup-10.3.files mysql-test/unstable-tests
This commit is contained in:
42
mysql-test/suite/rpl/r/circular_serverid0.result
Normal file
42
mysql-test/suite/rpl/r/circular_serverid0.result
Normal file
@@ -0,0 +1,42 @@
|
||||
include/rpl_init.inc [topology=1->2->1]
|
||||
include/rpl_connect.inc [creating M4]
|
||||
include/rpl_connect.inc [creating M2]
|
||||
SET @old_debug= @@global.debug;
|
||||
connection M2;
|
||||
STOP SLAVE;
|
||||
SET GLOBAL debug_dbug= "+d,dbug.rows_events_to_delay_relay_logging";
|
||||
START SLAVE IO_THREAD;
|
||||
include/wait_for_slave_io_to_start.inc
|
||||
connection M2;
|
||||
CREATE TABLE t1 (a INT AUTO_INCREMENT PRIMARY KEY, b VARCHAR(30000)) ENGINE=innodb;
|
||||
connection M4;
|
||||
connection M4;
|
||||
INSERT INTO `t1` VALUES (null, repeat('a', 1024)), (null, repeat('b', 1024));
|
||||
connection M2;
|
||||
SET debug_sync='now WAIT_FOR start_sql_thread';
|
||||
START SLAVE SQL_THREAD;
|
||||
include/show_binlog_events.inc
|
||||
Log_name Pos Event_type Server_id End_log_pos Info
|
||||
slave-bin.000001 # Gtid # # GTID #-#-#
|
||||
slave-bin.000001 # Query # # use `test`; CREATE TABLE t1 (a INT AUTO_INCREMENT PRIMARY KEY, b VARCHAR(30000)) ENGINE=innodb
|
||||
SET debug_sync='now SIGNAL go_on_relay_logging';
|
||||
connection M4;
|
||||
connection M4;
|
||||
connection M2;
|
||||
connection M2;
|
||||
include/show_binlog_events.inc
|
||||
Log_name Pos Event_type Server_id End_log_pos Info
|
||||
slave-bin.000001 # Gtid # # GTID #-#-#
|
||||
slave-bin.000001 # Query # # use `test`; CREATE TABLE t1 (a INT AUTO_INCREMENT PRIMARY KEY, b VARCHAR(30000)) ENGINE=innodb
|
||||
slave-bin.000001 # Gtid # # BEGIN GTID #-#-#
|
||||
slave-bin.000001 # Annotate_rows # # INSERT INTO `t1` VALUES (null, repeat('a', 1024)), (null, repeat('b', 1024))
|
||||
slave-bin.000001 # Table_map # # table_id: # (test.t1)
|
||||
slave-bin.000001 # Write_rows_v1 # # table_id: #
|
||||
slave-bin.000001 # Write_rows_v1 # # table_id: # flags: STMT_END_F
|
||||
slave-bin.000001 # Xid # # COMMIT /* XID */
|
||||
connection M4;
|
||||
drop table t1;
|
||||
connection M2;
|
||||
SET GLOBAL debug_dbug= @old_debug;
|
||||
SET debug_sync='RESET';
|
||||
include/rpl_end.inc
|
30
mysql-test/suite/rpl/t/circular_serverid0.cnf
Normal file
30
mysql-test/suite/rpl/t/circular_serverid0.cnf
Normal file
@@ -0,0 +1,30 @@
|
||||
!include ../my.cnf
|
||||
|
||||
[mysqld.1]
|
||||
gtid-domain-id=4
|
||||
server-id=4
|
||||
#
|
||||
log-slave-updates
|
||||
slave-parallel-threads=0
|
||||
gtid-strict-mode=1
|
||||
gtid-ignore-duplicates=1
|
||||
|
||||
#
|
||||
# Max-size row events to minimum with the idea to create
|
||||
# a number of Rows_log_event per Query.
|
||||
#
|
||||
binlog-row-event-max-size=1024
|
||||
|
||||
[mysqld.2]
|
||||
gtid-domain-id=2
|
||||
server-id=2
|
||||
#
|
||||
log-slave-updates
|
||||
slave-parallel-threads=0
|
||||
gtid-strict-mode=1
|
||||
gtid-ignore-duplicates=1
|
||||
binlog-row-event-max-size=1024
|
||||
# The slave will be initialized with a @@global.dbug-var value
|
||||
skip-slave-start=1
|
||||
|
||||
|
104
mysql-test/suite/rpl/t/circular_serverid0.test
Normal file
104
mysql-test/suite/rpl/t/circular_serverid0.test
Normal file
@@ -0,0 +1,104 @@
|
||||
#
|
||||
# Testing chain/circular replication scenario of MDEV-9670
|
||||
# The effect of the bug was that we got a commit with a GTID with server_id
|
||||
#
|
||||
|
||||
--source include/have_binlog_format_row.inc
|
||||
--source include/have_innodb.inc
|
||||
--source include/have_debug.inc
|
||||
--source include/have_debug_sync.inc
|
||||
|
||||
--let $rpl_topology= 1->2->1
|
||||
--source include/rpl_init.inc
|
||||
|
||||
--let $rpl_connection_name= M4
|
||||
--let $rpl_server_number= 1
|
||||
--source include/rpl_connect.inc
|
||||
|
||||
--let $rpl_connection_name= M2
|
||||
--let $rpl_server_number= 2
|
||||
--source include/rpl_connect.inc
|
||||
|
||||
# The parameter reflects binlog-row-event-max-size @cnf.
|
||||
--let $row_size=1024
|
||||
|
||||
SET @old_debug= @@global.debug;
|
||||
|
||||
--connection M2
|
||||
STOP SLAVE;
|
||||
SET GLOBAL debug_dbug= "+d,dbug.rows_events_to_delay_relay_logging";
|
||||
START SLAVE IO_THREAD;
|
||||
--source include/wait_for_slave_io_to_start.inc
|
||||
|
||||
--connection M2
|
||||
# This query also creates a Gtid event group whose Gtid will remain in
|
||||
# ignored status for too long causing a following group split.
|
||||
|
||||
CREATE TABLE t1 (a INT AUTO_INCREMENT PRIMARY KEY, b VARCHAR(30000)) ENGINE=innodb;
|
||||
--sync_slave_with_master M4
|
||||
|
||||
# This INSERT will be logged as two Write_log events which the buggy
|
||||
# slave applier would split.
|
||||
|
||||
--connection M4
|
||||
eval INSERT INTO `t1` VALUES (null, repeat('a', $row_size)), (null, repeat('b', $row_size));
|
||||
|
||||
# START M2 IO thread and wait for its signal to follow with the SQL
|
||||
# thread start. At this moment the SQL thread shall be having 2 and
|
||||
# "half" groups to execute. The "hafl" one would be committed by the
|
||||
# buggy applier after which the IO is released to queue the rest of
|
||||
# the 3rd group which the SQL thread commits separately to complete
|
||||
# the split.
|
||||
|
||||
--connection M2
|
||||
|
||||
# wait for IO signal to start the SQL thread. IO will be hanging upon that.
|
||||
SET debug_sync='now WAIT_FOR start_sql_thread';
|
||||
|
||||
# Now the slave server has relay log whose last group is incomplete.
|
||||
# An unfixed slave server would go to "insert" a "fake"
|
||||
# Gtid_list_log_event event which actually would commit the incomplete
|
||||
# group. However before to actual commit do_apply_event() hits some assert.
|
||||
# In the fixed server the fake Gtid_list_log_event is *not* inserted
|
||||
# in the middle of a group.
|
||||
START SLAVE SQL_THREAD;
|
||||
|
||||
# Sleep for a little time to give SQL thread a chance to commit while
|
||||
# the IO thread is hanging (see
|
||||
# DBUG_EXECUTE_IF("dbug.rows_events_to_delay_relay_logging"...) in
|
||||
# queue_event). Alternatively to reproduce the case when buggy slave
|
||||
# wait for the 1st group commit
|
||||
|
||||
#--let $count= 1
|
||||
#--let $table= t1
|
||||
#--source include/wait_until_rows_count.inc
|
||||
|
||||
--sleep 2
|
||||
|
||||
# Demonstrate either no split group in the correct slave or the 1nd
|
||||
# group in the buggy one
|
||||
--source include/show_binlog_events.inc
|
||||
|
||||
# Release the IO thread
|
||||
SET debug_sync='now SIGNAL go_on_relay_logging';
|
||||
|
||||
# Sync servers
|
||||
--sync_slave_with_master M4
|
||||
--connection M4
|
||||
--sync_slave_with_master M2
|
||||
--connection M2
|
||||
|
||||
# Demonstrate replication goes correctly not to create any split, or
|
||||
# the 2nd group in the buggy slave
|
||||
--source include/show_binlog_events.inc
|
||||
|
||||
#
|
||||
# Cleanup
|
||||
#
|
||||
--connection M4
|
||||
drop table t1;
|
||||
|
||||
--connection M2
|
||||
SET GLOBAL debug_dbug= @old_debug;
|
||||
SET debug_sync='RESET';
|
||||
--source include/rpl_end.inc
|
Reference in New Issue
Block a user