config root man

Current Path : /usr/opt/mysql57/mysql-test/suite/group_replication/t/

FreeBSD hs32.drive.ne.jp 9.1-RELEASE FreeBSD 9.1-RELEASE #1: Wed Jan 14 12:18:08 JST 2015 root@hs32.drive.ne.jp:/sys/amd64/compile/hs32 amd64
Upload File :
Current File : //usr/opt/mysql57/mysql-test/suite/group_replication/t/gr_repeatable_read_isolation.test

################################################################################
# The aim of the testcase is to test GR with 'REPEATABLE-READ' isolation level
#
# Test:
# 0. Start 2 servers with GR
# 1. Set isolation level to 'REPEATABLE-READ' on both server1, server2
# 2. Create a table (t1), Insert some data
# 3. Check the negative scenarios with conflicting transaction,
#    3.1 set a debug sync and execute a transaction (T1) on server_1 so that it
#         is blocked before broadcast.
#    3.2 check that changes made in connection server_1 has not propogated and
#        wait until server1 reaches the debug sync point.
#    3.3 execute a conflicting transaction (T2) on server2 that will reach
#        certification first.
#    3.4 Signal the waiting thread on server1 to resume.
#    3.5 Check the error on server1, it will rollback T1 as it is conflicting
#        with T2.
#    Another conflicting transaction, but transaction will rollback
#    3.6 ROLL BACK a transaction on server1
#    3.7 Execute a transaction on server2
#    3.8 Transaction originated on server2 will be successful as ROLLED BACK
#        transactions are not broadcasted.
# 4. Check the positive scenarios with non-conflicting transaction,
#    4.1 set a debug sync and execute a transaction (T1) on server_1 so that it
#         is blocked before broadcast.
#    4.2 wait until server1 reaches the debug sync point.
#    4.3 execute a non-conflicting transaction (T2) on server2 that will reach
#        certification first.
#    4.4 Signal the waiting thread on server1 to resume.
#    4.5 Check that both T1 and T2 are executed successfully.
# 5. Validate that server1, server2 has same set of data and assert that number
#    of negatively certified quries are expected ones.
# 6. clean-up
################################################################################

--source include/big_test.inc
--source include/have_debug_sync.inc
--source ../inc/have_group_replication_plugin.inc
--source ../inc/group_replication.inc

--echo
--echo ## 1. Set global isolation level to 'REPEATABLE-READ' on server1, server2
--let $rpl_connection_name= server1
--source include/rpl_connection.inc
# Store default isolation level
SET @transaction_isolation_global_orig = @@global.transaction_isolation;
SET GLOBAL transaction_isolation= 'REPEATABLE-READ';
SET @transaction_isolation_session_orig = @@global.transaction_isolation;
SET SESSION transaction_isolation= 'REPEATABLE-READ';

--let $rpl_connection_name= server2
--source include/rpl_connection.inc
SET @transaction_isolation_global_orig = @@global.transaction_isolation;
SET GLOBAL transaction_isolation= 'REPEATABLE-READ';
SET @transaction_isolation_session_orig = @@global.transaction_isolation;
SET SESSION transaction_isolation= 'REPEATABLE-READ';

--echo
--echo ## 2. Create table and insert some data
--let $rpl_connection_name= server1
--source include/rpl_connection.inc
CREATE TABLE t1 (a INT PRIMARY KEY);
INSERT INTO t1 VALUES (10),(20);
--source include/rpl_sync.inc

--echo
--echo ## 3.1 Set a debug sync before broadcast message to group on server1
--echo ##     Commit a transaction that will be blocked before broadcast.
--let $rpl_connection_name= server_1
--source include/rpl_connection.inc
SET @debug_save= @@GLOBAL.DEBUG;
SET @@GLOBAL.DEBUG='d,group_replication_before_message_broadcast';
BEGIN;
UPDATE t1 set a= 1 where a= 10;
--send COMMIT

--echo
--echo ## 3.2 Wait until server_1 connection reaches the
--echo ##    'group_replication_before_message_broadcast' debug sync point.
--let $rpl_connection_name= server1
--source include/rpl_connection.inc

# Assert that data on t1 remain unchanged
--let $assert_text= 'Table t1 should contain a row with a=10'
--let $assert_cond= [SELECT COUNT(*) AS count FROM t1 where t1.a= 10, count, 1]= 1
--source include/assert.inc

--let $assert_text= 'Table t1 should contain a row with a=20'
--let $assert_cond= [SELECT COUNT(*) AS count FROM t1 where t1.a= 20, count, 1]= 1
--source include/assert.inc

--let $wait_condition=SELECT COUNT(*)=1 FROM INFORMATION_SCHEMA.PROCESSLIST WHERE State = 'debug sync point: now'
--source include/wait_condition.inc

--echo
--echo ## 3.3. Execute a transaction on server2, that will reach first
--echo ##    certification, since server_1 is blocked before broadcast.
--let $rpl_connection_name= server2
--source include/rpl_connection.inc
BEGIN;
UPDATE t1 SET a=3 WHERE a=10;
DELETE FROM t1 where a=20;
COMMIT;

--echo
--echo ## 3.4 Signal the waiting thread on server1 to resume.
--let $rpl_connection_name= server1
--source include/rpl_connection.inc
SET DEBUG_SYNC='now SIGNAL waiting';
SET @@GLOBAL.DEBUG= @debug_save;

--echo
--echo ## 3.5 It will end up in an error stating that it was aborted, since
--echo ##     transactions are conflicting and server2 was ordered first.
--let $rpl_connection_name= server2
--source include/rpl_connection.inc
--let $sync_slave_connection= server1
--source include/sync_slave_sql_with_master.inc

--let $rpl_connection_name= server_1
--source include/rpl_connection.inc
--error ER_TRANSACTION_ROLLBACK_DURING_COMMIT
--reap

--echo
--echo ## 3.6 ROLL BACK a transaction on server1
--let $rpl_connection_name= server_1
--source include/rpl_connection.inc
BEGIN;
UPDATE t1 set a= 30 where a= 3;
--send ROLLBACK

--echo
--echo ## 3.7 Execute a transaction on server2
--let $rpl_connection_name= server2
--source include/rpl_connection.inc
BEGIN;
UPDATE t1 SET a=10 WHERE a=3;
COMMIT;
--let $sync_slave_connection= server1
--source include/sync_slave_sql_with_master.inc

--echo
--echo ## 3.8 Transaction originated on server2 will be successful as ROLLED BACK
--echo ##     transactions are not broadcasted.
--let $rpl_connection_name= server_1
--source include/rpl_connection.inc
--reap

--echo ## Validating data on server1 and server2
--let $rpl_connection_name= server1
--source include/rpl_connection.inc
--let $assert_text= 'Table t1 has a row with a=10'
--let $assert_cond= "[SELECT COUNT(*) AS count FROM t1 WHERE t1.a = 10, count, 1]" = "1"
--source include/assert.inc

--let $assert_text= 'Table t1 will contain 1 row after the above execution'
--let $assert_cond= "[SELECT COUNT(*) AS count FROM t1, count, 1]" = "1"
--source include/assert.inc

# Check that t1 on Server1, Server2 has same data
--let $diff_tables= server1:test.t1, server2:test.t1
--source include/diff_tables.inc

--echo
--echo ## Checking the positive case in which there is no conflict.
--echo
--echo ## 4.1 Commit a transaction that will be block before broadcast.
--echo ##    Set a debug sync before broadcast message to group on server1
--let $rpl_connection_name= server_1
--source include/rpl_connection.inc
SELECT * FROM t1;
SET @@GLOBAL.DEBUG='d,group_replication_before_message_broadcast';
BEGIN;
INSERT INTO t1 VALUES (2);
--send COMMIT

--echo
--echo ## 4.2 Wait until server_1 connection reaches the
--echo ## group_replication_before_message_broadcast debug sync point.
--let $rpl_connection_name= server1
--source include/rpl_connection.inc
--let $wait_condition=SELECT COUNT(*)=1 FROM INFORMATION_SCHEMA.PROCESSLIST WHERE State = 'debug sync point: now'
--source include/wait_condition.inc

--echo
--echo ## 4.3 Execute a non-conflicting transaction on server2, that will reach
--echo ##    first certification, since server_1 is blocked before broadcast.
--let $rpl_connection_name= server2
--source include/rpl_connection.inc
UPDATE t1 SET a=1 where a=10;
--let $sync_slave_connection= server1
--source include/sync_slave_sql_with_master.inc

--echo
--echo ## 4.4 Signal the waiting thread on server_1 to resume.
--let $rpl_connection_name= server1
--source include/rpl_connection.inc
SET DEBUG_SYNC='now SIGNAL waiting';
SET DEBUG_SYNC= 'RESET';
SET @@GLOBAL.DEBUG= @debug_save;

--echo
--echo ## 4.5 Transaction will be executed
--let $rpl_connection_name= server_1
--source include/rpl_connection.inc
--reap

--source include/rpl_sync.inc
--echo
--echo ## 5. Assert that number of certified transactions are the
--echo ##    expected ones.
--let $rpl_connection_name= server1
--source include/rpl_connection.inc

--let $assert_text= 'Table t1 should contain a row with a=1'
--let $assert_cond= "[SELECT COUNT(*) AS count FROM t1 WHERE t1.a = 1, count, 1]" = "1"
--source include/assert.inc

--let $assert_text= 'Table t1 should contain a row with a=2'
--let $assert_cond= "[SELECT COUNT(*) AS count FROM t1 WHERE t1.a = 2, count, 1]" = "1"
--source include/assert.inc

--let $assert_text= 'Table t1 will contain 2 rows after the above execution'
--let $assert_cond= "[SELECT COUNT(*) AS count FROM t1, count, 1]" = "2"
--source include/assert.inc

--let $assert_text= 'The value of Count_Transactions_Checked should be 7 after starting group replication'
--let $assert_cond= "[SELECT Count_Transactions_Checked from performance_schema.replication_group_member_stats where member_id in (SELECT @@server_uuid), Count_Transactions_Checked, 1]" = "7"
--source include/assert.inc

--let $assert_text= The value of Count_Conflicts_Detected should be 1 after starting group replication
--let $assert_cond= "[SELECT Count_Conflicts_Detected from performance_schema.replication_group_member_stats where member_id in (SELECT @@server_uuid), Count_Conflicts_Detected, 1]" = "1"
--source include/assert.inc

# Check that t1 on Server1, Server2 is same
--let $diff_tables= server1:test.t1, server2:test.t1
--source include/diff_tables.inc

--echo
--echo ## 6. Clean up.

# Restore original isolation levels
SET GLOBAL transaction_isolation= @transaction_isolation_global_orig;
SET SESSION transaction_isolation= @transaction_isolation_session_orig;

--let $rpl_connection_name= server2
--source include/rpl_connection.inc

SET GLOBAL transaction_isolation= @transaction_isolation_global_orig;
SET SESSION transaction_isolation= @transaction_isolation_session_orig;
# Drop table
DROP TABLE t1;

--source ../inc/group_replication_end.inc

Man Man