102 lines
3.5 KiB
PHP
102 lines
3.5 KiB
PHP
# ==== Purpose ====
|
|
#
|
|
# Assert that the binary log contains a specific sequence of logical
|
|
# timestamps.
|
|
#
|
|
# ==== Usage ====
|
|
#
|
|
# --let $binlog_file= FILENAME
|
|
# [--let $binlog_position= OFFSET]
|
|
# --let $logical_timestamps= LC1 SN1[;LC2 SN2[;LC3 SN3...]]
|
|
# [--let $logical_timestamps_mix= LC1 SN1[;LC2 SN2[;LC3 SN3...]]]
|
|
# [--let $save_binlog_position= 1]
|
|
# [--let $dont_print_logical_timestamps= 1]
|
|
# --source include/assert_logical_timestamps.inc
|
|
#
|
|
# Parameters:
|
|
#
|
|
# $binlog_file
|
|
# The binary log to look in.
|
|
#
|
|
# $binlog_position
|
|
# By default, this script starts reading from the beginning of the
|
|
# binary log. Set this to start reading from some specific offset.
|
|
#
|
|
# $logical_timestamps
|
|
# This is a semicolon-separated list of pairs of logical
|
|
# timestamps. Each pair consists of 'last_committed' as an
|
|
# integer, followed by space, followed by 'sequence_number' as an
|
|
# integer. Note that this is whitespace-sensitive so there should
|
|
# not be any other space characters than those separating
|
|
# last_committed from sequence_number.
|
|
#
|
|
# $logical_timestamps_mix
|
|
# This is an optional list to be used instead of $logical_timestamps if
|
|
# the current binlog format is mixed. It is reset at the end of
|
|
# this include file.
|
|
#
|
|
# $save_binlog_position
|
|
# If this flag is set, the script will source
|
|
# include/save_binlog_position.inc after it has finished the
|
|
# assert, making the next invocation automatically continue where
|
|
# this invocation ended. This is convenient if the script is to
|
|
# be called multiple times in a sequence.
|
|
#
|
|
# $dont_print_logical_timestamps
|
|
# By default, $logical_timestamps is printed to the result log. If
|
|
# this flag is set, that is suppressed.
|
|
|
|
if ($logical_timestamps_mix == '')
|
|
{
|
|
--let $include_filename= include/assert_logical_timestamps.inc [$logical_timestamps]
|
|
}
|
|
if ($logical_timestamps_mix != '')
|
|
{
|
|
--let $include_filename= include/assert_logical_timestamps.inc [logical_timestamps=$logical_timestamps logical_timestamps_mix=$logical_timestamps_mix]
|
|
}
|
|
if ($dont_print_logical_timestamps)
|
|
{
|
|
--let $include_filename= include/assert_logical_timestamps.inc
|
|
}
|
|
--source include/begin_include_file.inc
|
|
|
|
--let $expected_logical_timestamps= $logical_timestamps
|
|
if ($logical_timestamps_mix != '')
|
|
{
|
|
--let $binlog_format= `SELECT @@GLOBAL.binlog_format`
|
|
if ($binlog_format == 'MIXED')
|
|
{
|
|
--let $expected_logical_timestamps= $logical_timestamps_mix
|
|
}
|
|
}
|
|
|
|
--let $assert_file= `SELECT CONCAT('$MYSQLTEST_VARDIR/tmp/_alt_', UUID())`
|
|
|
|
# Run mysqlbinlog.
|
|
--let $_alt_offset=
|
|
if ($binlog_position)
|
|
{
|
|
--let $_alt_offset= --start-position=$binlog_position
|
|
}
|
|
--let $_alt_datadir= `SELECT @@datadir`
|
|
--exec $MYSQL_BINLOG --force-if-open $_alt_offset $_alt_datadir/$binlog_file > $assert_file
|
|
|
|
# Check for match.
|
|
--let $assert_select= last_committed=.*sequence_number=.*
|
|
--let $assert_match= `SELECT CONCAT('last_committed=', REPLACE(REPLACE('$expected_logical_timestamps', ';', '.*\n[^\n]*last_committed='), ' ', '\tsequence_number='))`
|
|
--let $assert_text= assert_logical_timestamps: $expected_logical_timestamps
|
|
--let $extra_debug_info= Expected logical timestamps: $expected_logical_timestamps
|
|
--source include/assert_grep.inc
|
|
|
|
--remove_file $assert_file
|
|
|
|
|
|
if ($save_binlog_position)
|
|
{
|
|
--source include/save_binlog_position.inc
|
|
}
|
|
|
|
--let $include_filename= include/assert_logical_timestamps.inc [logical_timestamps=$logical_timestamps logical_timestamps_mix=$logical_timestamps_mix]
|
|
--source include/end_include_file.inc
|
|
--let $logical_timestamps_mix=
|