Skip to content

Commit

Permalink
MDEV-28986: rpl tests sometimes failing on freebsd builders
Browse files Browse the repository at this point in the history
The rpl_row_img_sequence test can fail on resource
constrained buildbot machines due to its high
space consumption. To reduce this footprint, the
test is split into three parts, one for each value
of the binlog_row_img variable.
  • Loading branch information
bnestere committed Sep 20, 2022
1 parent fc8a765 commit b6bf7cd
Show file tree
Hide file tree
Showing 10 changed files with 2,509 additions and 2,311 deletions.
2,290 changes: 0 additions & 2,290 deletions mysql-test/suite/rpl/r/rpl_row_img_sequence.result

This file was deleted.

767 changes: 767 additions & 0 deletions mysql-test/suite/rpl/r/rpl_row_img_sequence_full.result

Large diffs are not rendered by default.

797 changes: 797 additions & 0 deletions mysql-test/suite/rpl/r/rpl_row_img_sequence_min.result

Large diffs are not rendered by default.

796 changes: 796 additions & 0 deletions mysql-test/suite/rpl/r/rpl_row_img_sequence_noblob.result

Large diffs are not rendered by default.

48 changes: 48 additions & 0 deletions mysql-test/suite/rpl/t/rpl_row_img_sequence_full.test
Original file line number Diff line number Diff line change
@@ -0,0 +1,48 @@
#
# Purpose:
# The rpl_row_img_sequence group of tests verify that sequence MDL updates,
# i.e. NEXTVAL and SETVAL, respect the binlog_row_image variable value when
# written into the binary log. In particular, it ensures that only changed
# columns are written with MINIMAL image mode, and all columns are written
# otherwise. This test focuses on validating the behavior of
# binlog_row_img=FULL.
#
# Methodology
# After issuing a sequence update, ensure that both 1) it was replicated
# correctly, and 2) it was binlogged respective to the binlog_row_image value.
# The sequence table does not use caching to ensure each update is immediately
# binlogged. Each command is binlogged into its own unique log file, and the
# entirety of the file is analyzed for correctness of its sequence event.
# Specifically, mysqlbinlog is used in verbose mode so it outputs the columns
# which belong to the event, and the columns are analyzed to ensure the correct
# ones were logged. rpl_row_img_general_loop.inc is used to test with multiple
# chained replicas, varying engines between InnoDB and MyISAM.
#
# References:
# MDEV-28487: sequences not respect value of binlog_row_image with select
# nextval(seq_gen)
#

--let $rpl_topology= 1->2->3
--source include/rpl_init.inc
--source include/have_binlog_format_row.inc

--connection server_1
--source include/have_innodb.inc
--connection server_2
--source include/have_innodb.inc
--connection server_3
--source include/have_innodb.inc
--connection server_1

--echo #
--echo # binlog_row_image=FULL should write all columns to the binary log
--echo #
--let $row_img_set=server_1:FULL:N,server_2:FULL:Y,server_3:FULL:Y
--source include/rpl_row_img_set.inc
--let $expected_columns=(1,2,3,4,5,6,7,8)
--let row_img_test_script= include/rpl_row_img_sequence.inc
--source include/rpl_row_img_general_loop.inc

--source include/rpl_end.inc
--echo # End of tests
21 changes: 21 additions & 0 deletions mysql-test/suite/rpl/t/rpl_row_img_sequence_min.cnf
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
!include include/default_mysqld.cnf

[mysqld.1]
log-slave-updates
innodb
gtid_domain_id=0

[mysqld.2]
log-slave-updates
innodb
gtid_domain_id=1

[mysqld.3]
log-slave-updates
innodb
gtid_domain_id=2

[ENV]
SERVER_MYPORT_1= @mysqld.1.port
SERVER_MYPORT_2= @mysqld.2.port
SERVER_MYPORT_3= @mysqld.3.port
Original file line number Diff line number Diff line change
@@ -1,9 +1,11 @@
#
# Purpose:
# This test verifies that sequence DML updates, i.e. NEXTVAL and SETVAL,
# respect the binlog_row_image variable value when written into the binary log.
# In particular, it ensures that only changed columns are written with MINIMAL
# image mode, and all columns are written otherwise.
# The rpl_row_img_sequence group of tests verify that sequence MDL updates,
# i.e. NEXTVAL and SETVAL, respect the binlog_row_image variable value when
# written into the binary log. In particular, it ensures that only changed
# columns are written with MINIMAL image mode, and all columns are written
# otherwise. This test focuses on validating the behavior of
# binlog_row_img=MINIMAL.
#
# Methodology
# After issuing a sequence update, ensure that both 1) it was replicated
Expand Down Expand Up @@ -34,32 +36,17 @@
--connection server_1

--echo #
--echo # Test Case 1) binlog_row_image=MINIMAL should write only columns
--echo # 1 and 8 to the binary log
--echo # binlog_row_image=MINIMAL should write only columns 1 and 8 to the
--echo # binary log
--echo #
--let $row_img_set=server_1:MINIMAL:N,server_2:MINIMAL:Y,server_3:MINIMAL:Y
--source include/rpl_row_img_set.inc
--let $expected_columns=(1,8)
--let row_img_test_script= include/rpl_row_img_sequence.inc
--source include/rpl_row_img_general_loop.inc

--echo #
--echo # Test Case 2) binlog_row_image=NOBLOB should write all columns to the
--echo # binary log
--echo #
--let $row_img_set=server_1:NOBLOB:N,server_2:NOBLOB:Y,server_3:NOBLOB:Y
--source include/rpl_row_img_set.inc
--let $expected_columns=(1,2,3,4,5,6,7,8)
--source include/rpl_row_img_general_loop.inc

--echo #
--echo # Test Case 3) binlog_row_image=NOBLOB should write all columns to the
--echo # binary log
--echo #
--let $row_img_set=server_1:FULL:N,server_2:FULL:Y,server_3:FULL:Y
--source include/rpl_row_img_set.inc
--let $expected_columns=(1,2,3,4,5,6,7,8)
--source include/rpl_row_img_general_loop.inc

--source include/rpl_end.inc
--echo # End of tests
21 changes: 21 additions & 0 deletions mysql-test/suite/rpl/t/rpl_row_img_sequence_noblob.cnf
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
!include include/default_mysqld.cnf

[mysqld.1]
log-slave-updates
innodb
gtid_domain_id=0

[mysqld.2]
log-slave-updates
innodb
gtid_domain_id=1

[mysqld.3]
log-slave-updates
innodb
gtid_domain_id=2

[ENV]
SERVER_MYPORT_1= @mysqld.1.port
SERVER_MYPORT_2= @mysqld.2.port
SERVER_MYPORT_3= @mysqld.3.port
51 changes: 51 additions & 0 deletions mysql-test/suite/rpl/t/rpl_row_img_sequence_noblob.test
Original file line number Diff line number Diff line change
@@ -0,0 +1,51 @@
#
# Purpose:
# The rpl_row_img_sequence group of tests verify that sequence MDL updates,
# i.e. NEXTVAL and SETVAL, respect the binlog_row_image variable value when
# written into the binary log. In particular, it ensures that only changed
# columns are written with MINIMAL image mode, and all columns are written
# otherwise. This test focuses on validating the behavior of
# binlog_row_img=NOBLOB.
#
# Methodology
# After issuing a sequence update, ensure that both 1) it was replicated
# correctly, and 2) it was binlogged respective to the binlog_row_image value.
# The sequence table does not use caching to ensure each update is immediately
# binlogged. Each command is binlogged into its own unique log file, and the
# entirety of the file is analyzed for correctness of its sequence event.
# Specifically, mysqlbinlog is used in verbose mode so it outputs the columns
# which belong to the event, and the columns are analyzed to ensure the correct
# ones were logged. rpl_row_img_general_loop.inc is used to test with multiple
# chained replicas, varying engines between InnoDB and MyISAM.
#
# References:
# MDEV-28487: sequences not respect value of binlog_row_image with select
# nextval(seq_gen)
#

--let $rpl_topology= 1->2->3
--source include/rpl_init.inc
--source include/have_binlog_format_row.inc

--connection server_1
--source include/have_innodb.inc
--connection server_2
--source include/have_innodb.inc
--connection server_3
--source include/have_innodb.inc
--connection server_1

--echo #
--echo # binlog_row_image=NOBLOB should write all columns to the binary logs
--echo #
--let $row_img_set=server_1:NOBLOB:N,server_2:NOBLOB:Y,server_3:NOBLOB:Y
--source include/rpl_row_img_set.inc
--let $expected_columns=(1,2,3,4,5,6,7,8)
--let row_img_test_script= include/rpl_row_img_sequence.inc
--source include/rpl_row_img_general_loop.inc

--let $row_img_set=server_1:FULL:N,server_2:FULL:Y,server_3:FULL:Y
--source include/rpl_row_img_set.inc

--source include/rpl_end.inc
--echo # End of tests

0 comments on commit b6bf7cd

Please sign in to comment.