79 lines
2.5 KiB
Plaintext
79 lines
2.5 KiB
Plaintext
|
|
--source include/have_binlog_format_row.inc
|
|
--source include/have_xengine.inc
|
|
--source include/master-slave.inc
|
|
--source include/have_gtid.inc
|
|
--source include/not_valgrind.inc
|
|
|
|
# This is a test case for issue#655 -- SingleDelete on Primary Key may
|
|
# cause extra rows than Secondary Keys
|
|
|
|
call mtr.add_suppression("Recovery from master pos");
|
|
|
|
connection master;
|
|
--disable_warnings
|
|
drop table if exists r1;
|
|
--enable_warnings
|
|
create table r1 (id1 int, id2 int, primary key (id1, id2), index i (id2)) engine=xengine;
|
|
insert into r1 values (1, 1000);
|
|
|
|
sync_slave_with_master;
|
|
connection slave;
|
|
set global xengine_force_flush_memtable_now=1;
|
|
--let slave_data_dir= query_get_value(SELECT @@DATADIR, @@DATADIR, 1)
|
|
--let slave_binlog_file= query_get_value(SHOW MASTER STATUS, File, 1)
|
|
--let slave_pid_file= query_get_value(SELECT @@pid_file, @@pid_file, 1)
|
|
--exec echo "wait" > $MYSQLTEST_VARDIR/tmp/mysqld.2.expect
|
|
|
|
--write_file $MYSQL_TMP_DIR/truncate_tail_binlog.sh
|
|
#!/bin/bash
|
|
|
|
F=$slave_data_dir/$slave_binlog_file
|
|
SIZE=`stat -c %s $F`
|
|
NEW_SIZE=`expr $SIZE - 100`
|
|
truncate -s $NEW_SIZE $F
|
|
rc=$?
|
|
if [[ $rc != 0 ]]; then
|
|
exit 1
|
|
fi
|
|
|
|
kill -9 `head -1 $slave_pid_file`
|
|
|
|
exit 0
|
|
EOF
|
|
--chmod 0755 $MYSQL_TMP_DIR/truncate_tail_binlog.sh
|
|
--exec $MYSQL_TMP_DIR/truncate_tail_binlog.sh
|
|
|
|
--exec echo "wait" > $MYSQLTEST_VARDIR/tmp/mysqld.2.expect
|
|
|
|
# Crash recovery (losing some binlogs) with slave_use_idempotent_for_recovery may
|
|
# replay same transactions with slave_exec_mode=idempotent implicitly enabled.
|
|
# On slave, the last insert is converted to update with the same key.
|
|
# It should be treated as SD and Put (same as singledelete_idempotent_table.test).
|
|
|
|
--source include/rpl_start_server.inc
|
|
--source include/start_slave.inc
|
|
|
|
# Due to the binlogs being truncated, the slave may still think it's processed up to
|
|
# the truncated binlog and select master_pos_wait() can return prematurely. Add
|
|
# a new transaction to the master to force master_pos_wait() to wait.
|
|
connection master;
|
|
insert into r1 values (2,2000);
|
|
sync_slave_with_master;
|
|
|
|
connection slave;
|
|
delete r1 from r1 force index (i) where id2=1000;
|
|
select id1,id2 from r1 force index (primary) where id1=1 and id2=1000;
|
|
select id2 from r1 force index (i) where id1=1 and id2=1000;
|
|
set global xengine_compact_cf='default';
|
|
select id1,id2 from r1 force index (primary) where id1=1 and id2=1000;
|
|
select id2 from r1 force index (i) where id1=1 and id2=1000;
|
|
|
|
connection master;
|
|
drop table r1;
|
|
|
|
--remove_file $MYSQL_TMP_DIR/truncate_tail_binlog.sh
|
|
--source include/rpl_end.inc
|
|
|
|
|