mirror of
https://github.com/MariaDB/server.git
synced 2025-01-30 18:41:56 +01:00
b3c7c8cde8
The test case was missing --source include/wait_for_binlog_checkpoint.inc. So it could occasionally fail if the checkpoint managed to occur just at the right point in time between fetching the two binlog positions to compare.
121 lines
3.3 KiB
Text
121 lines
3.3 KiB
Text
--source include/have_innodb.inc
|
|
--source include/have_log_bin.inc
|
|
--source include/have_binlog_format_mixed_or_statement.inc
|
|
|
|
RESET MASTER;
|
|
|
|
# Test that we get the correct binlog position from START TRANSACTION WITH
|
|
# CONSISTENT SNAPSHOT even when other transactions are active.
|
|
|
|
connect(con1,localhost,root,,);
|
|
connect(con2,localhost,root,,);
|
|
connect(con3,localhost,root,,);
|
|
connect(con4,localhost,root,,);
|
|
|
|
connection default;
|
|
--echo # Connection default
|
|
|
|
CREATE TABLE t1 (a INT, b VARCHAR(100), PRIMARY KEY (a,b)) ENGINE=innodb;
|
|
SHOW MASTER STATUS;
|
|
SHOW STATUS LIKE 'binlog_snapshot_%';
|
|
BEGIN;
|
|
INSERT INTO t1 VALUES (0, "");
|
|
|
|
connection con1;
|
|
--echo # Connection con1
|
|
BEGIN;
|
|
INSERT INTO t1 VALUES (1, "");
|
|
|
|
connection con2;
|
|
--echo # Connection con2
|
|
CREATE TABLE t2 (a INT PRIMARY KEY) ENGINE=myisam;
|
|
BEGIN;
|
|
INSERT INTO t1 VALUES (2, "first");
|
|
INSERT INTO t2 VALUES (2);
|
|
INSERT INTO t1 VALUES (2, "second");
|
|
|
|
connection default;
|
|
--echo # Connection default
|
|
COMMIT;
|
|
|
|
SET TRANSACTION ISOLATION LEVEL REPEATABLE READ;
|
|
START TRANSACTION WITH CONSISTENT SNAPSHOT;
|
|
|
|
connection con3;
|
|
--echo # Connection con3
|
|
BEGIN;
|
|
INSERT INTO t1 VALUES (3, "");
|
|
INSERT INTO t2 VALUES (3);
|
|
|
|
connection con4;
|
|
--echo # Connection con4
|
|
BEGIN;
|
|
INSERT INTO t1 VALUES (4, "");
|
|
COMMIT;
|
|
|
|
connection default;
|
|
--echo # Connection default
|
|
SELECT * FROM t1 ORDER BY a,b;
|
|
SHOW STATUS LIKE 'binlog_snapshot_%';
|
|
SHOW MASTER STATUS;
|
|
SELECT * FROM t2 ORDER BY a;
|
|
|
|
connection con1;
|
|
--echo # Connection con1
|
|
COMMIT;
|
|
|
|
connection con2;
|
|
--echo # Connection con2
|
|
COMMIT;
|
|
|
|
connection con3;
|
|
--echo # Connection con3
|
|
COMMIT;
|
|
FLUSH LOGS;
|
|
--source include/wait_for_binlog_checkpoint.inc
|
|
|
|
connection default;
|
|
--echo # Connection default
|
|
SELECT * FROM t1 ORDER BY a,b;
|
|
SHOW STATUS LIKE 'binlog_snapshot_%';
|
|
SHOW MASTER STATUS;
|
|
COMMIT;
|
|
SHOW STATUS LIKE 'binlog_snapshot_%';
|
|
SHOW MASTER STATUS;
|
|
|
|
--replace_regex /\/\* xid=.* \*\//\/* XID *\// /Server ver: .*, Binlog ver: .*/Server ver: #, Binlog ver: #/ /table_id: [0-9]+/table_id: #/
|
|
SHOW BINLOG EVENTS;
|
|
|
|
|
|
--echo *** MDEV-7310: last_commit_pos_offset set to wrong value after binlog rotate in group commit ***
|
|
|
|
SET @old_size= @@GLOBAL.max_binlog_size;
|
|
SET GLOBAL max_binlog_size=4096;
|
|
|
|
CREATE TABLE t3 (a INT PRIMARY KEY, b VARBINARY(8192)) ENGINE=MyISAM;
|
|
INSERT INTO t3 VALUES (10, '');
|
|
--let $bigdata= `SELECT REPEAT('a', 5000)`
|
|
eval INSERT INTO t3 VALUES (11, '$bigdata');
|
|
|
|
# The bug was that binlog_snapshot_file pointed to the new file after binlog
|
|
# rotation, but binlog_snapshot_position was the offset in the old file before
|
|
# binlog rotation. So the position was invalid.
|
|
# So here, we check that the values are consistent with SHOW MASTER STATUS,
|
|
# which uses a different code path and did not have the bug.
|
|
|
|
--source include/wait_for_binlog_checkpoint.inc
|
|
--let $snap_file= query_get_value(SHOW STATUS LIKE 'binlog_snapshot_file', Value, 1)
|
|
--let $snap_pos= query_get_value(SHOW STATUS LIKE 'binlog_snapshot_position', Value, 1)
|
|
|
|
--let $master_file= query_get_value(SHOW MASTER STATUS, File, 1)
|
|
--let $master_pos= query_get_value(SHOW MASTER STATUS, Position, 1)
|
|
|
|
--disable_query_log
|
|
eval SET @errmsg= 'ERROR: ($snap_file, $snap_pos) != ($master_file, $master_pos)';
|
|
eval SELECT IF('$snap_file' = '$master_file' AND $snap_pos = $master_pos, 'OK', @errmsg) AS test_result;
|
|
--enable_query_log
|
|
|
|
SET GLOBAL max_binlog_size=@old_size;
|
|
|
|
|
|
DROP TABLE t1,t2, t3;
|