polardbxengine/mysql-test/suite/xengine_rpl_basic/t/rpl_xa_xplugin.test

164 lines
4.7 KiB
Plaintext

##############################################################################
# This test checks the basic functionality of replication with Xplugin setup.
#
# NOTE : All queries will run through mysqlx plugin using MYSQLXTEST --ssl-mode=REQUIRED.
#
# Steps involved in this test :
# 0. This test requires 2 servers.
# 1. Set up master and slave servers.
# 2. Start the slave server.
# 3. Perform ddl and dml operations on master and slave servers.
# a) master : Create table T1 and perform ddl on T1.
# b) slave : Create table T2 and perform ddl on T1 & T2.
# 4. Assert for values on on tables from slave server.
# 5. Stop slave through mysqlx.
# 6. uninstall mysqlx plugin on both master and slave servers.
# 7. clean-up
##############################################################################
--source include/have_mysqlx_plugin.inc
--let $rpl_skip_start_slave= 1
--source include/master-slave.inc
CALL mtr.add_suppression("Statement is unsafe because it is being used inside a XA transaction");
# Install Mysqlx plugin on both master and slave servers.
--source include/rpl_connection_master.inc
--source include/xplugin_wait_for_interfaces.inc
--source include/rpl_connection_slave.inc
--source include/xplugin_wait_for_interfaces.inc
# File for starting slave through X-protocol
--write_file $MYSQL_TMP_DIR/start_slave.tmp
-->sql
CHANGE MASTER TO MASTER_HOST= '127.0.0.1', MASTER_USER= 'root';
START SLAVE;
-->endsql
EOF
# Starting the slave through mysqlx
--echo Starting the slave server
--exec $MYSQLXTEST --ssl-mode=REQUIRED -u root --port=$SLAVE_X_MYPORT --file=$MYSQL_TMP_DIR/start_slave.tmp 2>&1
# Temp file for performing ddl and dml on master
--source include/rpl_connection_master.inc
--write_file $MYSQL_TMP_DIR/ddl_dml_on_master.tmp
-->sql
USE test;
CREATE TABLE T1 (C1 INT PRIMARY KEY, C2 INT );
XA START 'xstatement1';
INSERT INTO T1 VALUES (1,12);
INSERT INTO T1 VALUES (2,1234);
INSERT INTO T1 VALUES (3,98765);
UPDATE T1 SET C2 = C2 - 10;
XA END 'xstatement1';
XA PREPARE 'xstatement1';
XA COMMIT 'xstatement1';
DELETE FROM T1 WHERE C2 = 0;
-->endsql
EOF
--disable_result_log
--exec $MYSQLXTEST --ssl-mode=REQUIRED -u root --port=$MASTER_X_MYPORT --file=$MYSQL_TMP_DIR/ddl_dml_on_master.tmp 2>&1
--enable_result_log
# Wait Until slave is in sync with master
--source include/sync_slave_sql_with_master.inc
# Temp file for performing ddl and dml on slave
--write_file $MYSQL_TMP_DIR/ddl_dml_on_slave.tmp
-->sql
USE test;
CREATE TABLE T2 (C1 CHAR(20) PRIMARY KEY, C2 INT );
INSERT INTO T2 VALUES ('ABC',23);
UPDATE T2 SET C2 = C2 + 27;
INSERT INTO T1 VALUES (4,34);
INSERT INTO T2 VALUES ('ABCDEF',23);
INSERT INTO T1 VALUES (5,1234);
INSERT INTO T2 VALUES ('ABCDEFGHIJ',23);
DELETE FROM T2 WHERE C1 = 'ABC';
INSERT INTO T2 VALUES ('XYZ',23);
UPDATE T2 SET C1 = 'ABC' WHERE C1 ='XYZ';
-->endsql
EOF
--exec $MYSQLXTEST --ssl-mode=REQUIRED -u root --port=$SLAVE_X_MYPORT --file=$MYSQL_TMP_DIR/ddl_dml_on_slave.tmp 2>&1
# Asserts for values on each table.
--write_file $MYSQL_TMP_DIR/assert.tmp
-->echo Checking the value on T1
-->wait_for 2 SELECT C2 FROM test.T1 WHERE C1=1
-->echo Checking the value on T2
-->wait_for 23 SELECT C2 FROM test.T2 WHERE C1="ABC"
EOF
--exec $MYSQLXTEST --ssl-mode=REQUIRED -u root --port=$SLAVE_X_MYPORT --file=$MYSQL_TMP_DIR/assert.tmp 2>&1
# Temp for drop table on slave.
--write_file $MYSQL_TMP_DIR/delete_tables_slave.tmp
-->sql
USE test;
DROP TABLE T2;
-->endsql
EOF
# Deleting second table on slave.
--exec $MYSQLXTEST --ssl-mode=REQUIRED -u root --port=$SLAVE_X_MYPORT --file=$MYSQL_TMP_DIR/delete_tables_slave.tmp 2>&1
# Temp for drop table.
--write_file $MYSQL_TMP_DIR/delete_tables.tmp
-->sql
USE test;
DROP TABLE T1;
-->endsql
EOF
--source include/rpl_connection_master.inc
# Deleting table
--exec $MYSQLXTEST --ssl-mode=REQUIRED -u root --port=$MASTER_X_MYPORT --file=$MYSQL_TMP_DIR/delete_tables.tmp 2>&1
--source include/sync_slave_sql_with_master.inc
# Creating temp file to stop slave.
--write_file $MYSQL_TMP_DIR/stop_slave.tmp
-->stmtsql STOP SLAVE;
-->recvresult
EOF
# Stopping slave
--echo Stopping slave
--exec $MYSQLXTEST --ssl-mode=REQUIRED -u root --port=$SLAVE_X_MYPORT --file=$MYSQL_TMP_DIR/stop_slave.tmp 2>&1
--source include/rpl_connection_master.inc
--source include/rpl_connection_slave.inc
# clean-up
--remove_file $MYSQL_TMP_DIR/start_slave.tmp
--remove_file $MYSQL_TMP_DIR/ddl_dml_on_master.tmp
--remove_file $MYSQL_TMP_DIR/ddl_dml_on_slave.tmp
--remove_file $MYSQL_TMP_DIR/delete_tables.tmp
--remove_file $MYSQL_TMP_DIR/delete_tables_slave.tmp
--remove_file $MYSQL_TMP_DIR/assert.tmp
--remove_file $MYSQL_TMP_DIR/stop_slave.tmp
--source include/start_slave.inc
--source include/rpl_end.inc
--connection master
--source suite/xengine/include/check_xengine_log_error.inc