config root man

Current Path : /home/usr.opt/mysql57/mysql-test/suite/rpl/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 : //home/usr.opt/mysql57/mysql-test/suite/rpl/t/rpl_semi_sync.test

# Usage:
#
#  [--let $rpl_test_optimize_for_static_plugin_config = 1|0]
#  --source suite/rpl/t/rpl_semi_sync.test
#
# Parameters:
#
#  $rpl_test_optimize_for_static_plugin_config
#    When set to `1`, will run the contained test-cases with
#    `replication_optimize_for_static_plugin_config` option enabled.
#

# Want to skip this test from daily Valgrind execution
--source include/no_valgrind_without_big.inc
# Adding big test option for this test.
--source include/big_test.inc

source include/have_semisync_plugin.inc;
source include/not_embedded.inc;
source include/have_innodb.inc;
source include/not_gtid_enabled.inc;
source include/master-slave.inc;

let $engine_type= InnoDB;

# Suppress warnings that might be generated during the test
connection master;
disable_query_log;
call mtr.add_suppression("Timeout waiting for reply of binlog");
call mtr.add_suppression("Read semi-sync reply");
call mtr.add_suppression("Unsafe statement written to the binary log using statement format since BINLOG_FORMAT = STATEMENT.");
call mtr.add_suppression("Semi-sync master failed on net_flush.. before waiting for slave reply");
call mtr.add_suppression("Master server does not support semi-sync");
call mtr.add_suppression("Semi-sync slave .* reply");
call mtr.add_suppression("Slave SQL.*Request to stop slave SQL Thread received while applying a group that has non-transactional changes; waiting for completion of the group");
call mtr.add_suppression(".*Got an error reading communication packets.*");
enable_query_log;
--source include/sync_slave_sql_with_master.inc

# After fix of BUG#45848, semi-sync slave should not create any extra
# connections on master, save the count of connections before start
# semi-sync slave for comparison below.
connection master;
let $_connections_normal_slave= query_get_value(SHOW STATUS LIKE 'Threads_connected', Value, 1);

--echo #
--echo # Uninstall semi-sync plugins on master and slave
--echo #
connection slave;
source include/stop_slave.inc;
disable_warnings;
error 0,1305;
UNINSTALL PLUGIN rpl_semi_sync_slave;
error 0,1305;
UNINSTALL PLUGIN rpl_semi_sync_master;
enable_warnings;

connection master;
disable_warnings;
error 0,1305;
UNINSTALL PLUGIN rpl_semi_sync_slave;
error 0,1305;
UNINSTALL PLUGIN rpl_semi_sync_master;
enable_warnings;
--let $rpl_only_running_threads= 1
--let $rpl_no_start_slave= 1
--source include/rpl_reset.inc
--let $rpl_only_running_threads= 0

--echo #
--echo # Main test of semi-sync replication starts here
--echo #

source include/rpl_connection_master.inc;
let $value = query_get_value(show variables like 'rpl_semi_sync_master_enabled', Value, 1);
if ($value == No such row)
{
  disable_query_log;
  eval INSTALL PLUGIN rpl_semi_sync_master SONAME '$SEMISYNC_MASTER_PLUGIN';
  set global rpl_semi_sync_master_timeout= 60000 /* 60s */;
  set global rpl_semi_sync_master_wait_point= AFTER_COMMIT;
  enable_query_log;
}

echo [ default state of semi-sync on master should be OFF ];
show variables like 'rpl_semi_sync_master_enabled';

echo [ enable semi-sync on master ];
set global rpl_semi_sync_master_enabled = 1;
show variables like 'rpl_semi_sync_master_enabled';

echo [ status of semi-sync on master should be ON even without any semi-sync slaves ];
show status like 'Rpl_semi_sync_master_clients';
show status like 'Rpl_semi_sync_master_status';
show status like 'Rpl_semi_sync_master_yes_tx';

--echo #
--echo # BUG#45672 Semisync repl: ActiveTranx:insert_tranx_node: transaction node allocation failed
--echo # BUG#45673 Semisync reports correct operation even if no slave is connected
--echo #

# BUG#45672 When semi-sync is enabled on master, it would allocate
# transaction node even without semi-sync slave connected, and would
# finally result in transaction node allocation error.
#
# Semi-sync master will pre-allocate 'max_connections' transaction
# nodes, so here we do more than that much transactions to check if it
# will fail or not.
# select @@global.max_connections + 1;
let $i= `select @@global.max_connections + 1`;
disable_query_log;
eval create table t1 (a int) engine=$engine_type;
while ($i)
{
  eval insert into t1 values ($i);
  dec $i;
}
drop table t1;
enable_query_log;

# BUG#45673
echo [ status of semi-sync on master should be OFF ];
show status like 'Rpl_semi_sync_master_clients';
show status like 'Rpl_semi_sync_master_status';
show status like 'Rpl_semi_sync_master_yes_tx';

if ($rpl_test_optimize_for_static_plugin_config == 1)
{
  SET GLOBAL replication_optimize_for_static_plugin_config = 1;
}

# reset master and slave so the following test starts in a clean environment
--let $rpl_only_running_threads= 1
--let $rpl_no_start_slave= 1
--source include/rpl_reset.inc
--let $rpl_only_running_threads= 0

--echo #
--echo # INSTALL PLUGIN semi-sync on slave
--echo #

source include/rpl_connection_slave.inc;
let $value= query_get_value(show variables like 'rpl_semi_sync_slave_enabled', Value, 1);
if ($value == No such row)
{
  disable_query_log;
  eval INSTALL PLUGIN rpl_semi_sync_slave SONAME '$SEMISYNC_SLAVE_PLUGIN';
  enable_query_log;
}

echo [ default state of semi-sync on slave should be OFF ];
show variables like 'rpl_semi_sync_slave_enabled';

echo [ enable semi-sync on slave ];
set global rpl_semi_sync_slave_enabled = 1;
show variables like 'rpl_semi_sync_slave_enabled';
source include/start_slave.inc;

source include/rpl_connection_master.inc;
# NOTE: Rpl_semi_sync_master_client will only be updated when
# semi-sync slave has started binlog dump request
let $status_var= Rpl_semi_sync_master_clients;
let $status_var_value= 1;
source include/wait_for_status_var.inc;

echo [ initial master state after the semi-sync slave connected ];
show status like 'Rpl_semi_sync_master_clients';
show status like 'Rpl_semi_sync_master_status';
show status like 'Rpl_semi_sync_master_no_tx';
show status like 'Rpl_semi_sync_master_yes_tx';

--let $yes_tx_before= query_get_value(SHOW STATUS LIKE 'Rpl_semi_sync_master_yes_tx', Value, 1)

replace_result $engine_type ENGINE_TYPE;
eval create table t1(a int) engine = $engine_type;

# wait for the ack to arrive
--let $yes_tx_after= `SELECT $yes_tx_before + 1`
--let $status_var= Rpl_semi_sync_master_yes_tx
--let $status_var_value= $yes_tx_after
--source include/wait_for_status_var.inc

echo [ master state after CREATE TABLE statement ];
show status like 'Rpl_semi_sync_master_status';
show status like 'Rpl_semi_sync_master_no_tx';
show status like 'Rpl_semi_sync_master_yes_tx';

# After fix of BUG#45848, semi-sync slave should not create any extra
# connections on master.
let $_connections_semisync_slave= query_get_value(SHOW STATUS LIKE 'Threads_connected', Value, 1);
replace_result $_connections_semisync_slave CONNECTIONS_SEMISYNC_SLAVE;
replace_result $_connections_normal_slave CONNECTIONS_NORMAL_SLAVE;
eval select $_connections_semisync_slave - $_connections_normal_slave as 'Should be 0';

--let $yes_tx_before= query_get_value(SHOW STATUS LIKE 'Rpl_semi_sync_master_yes_tx', Value, 1)

let $i=10;
--let $acks_to_wait= 0
echo [ insert records to table ];
disable_query_log;
while ($i)
{
  eval insert into t1 values ($i);
  dec $i;
  inc $acks_to_wait;
}
enable_query_log;

# Wait for acks from slave to avoid test failures on slow platforms.
--let $yes_tx_after= `SELECT $yes_tx_before + $acks_to_wait`
let $status_var= Rpl_semi_sync_master_yes_tx;
let $status_var_value= $yes_tx_after;
let $status_timeout= 2400;
let $status_fail_query= SHOW STATUS LIKE 'Rpl_semi_sync%';
source include/wait_for_status_var.inc;

echo [ master status after inserts ];
show status like 'Rpl_semi_sync_master_status';
show status like 'Rpl_semi_sync_master_no_tx';
show status like 'Rpl_semi_sync_master_yes_tx';

--source include/sync_slave_sql_with_master.inc
echo [ on slave ];

echo [ slave status after replicated inserts ];
show status like 'Rpl_semi_sync_slave_status';

select count(distinct a) from t1;
select min(a) from t1;
select max(a) from t1;

--echo
--echo # BUG#50157
--echo # semi-sync replication crashes when replicating a transaction which
--echo # include 'CREATE TEMPORARY TABLE `MyISAM_t` SELECT * FROM `Innodb_t` ;

source include/rpl_connection_master.inc;
SET SESSION AUTOCOMMIT= 0;
CREATE TABLE t2(c1 INT) ENGINE=innodb;
--source include/sync_slave_sql_with_master.inc

connection master;
BEGIN;
--echo
--echo # Even though it is in a transaction, this statement is binlogged into binlog
--echo # file immediately.
--disable_warnings
CREATE TEMPORARY TABLE t3 SELECT c1 FROM t2 where 1=1;
--enable_warnings
--echo
--echo # These statements will not be binlogged until the transaction is committed
INSERT INTO t2 VALUES(11);
INSERT INTO t2 VALUES(22);
COMMIT;

DROP TABLE t2, t3;
SET SESSION AUTOCOMMIT= 1;
--source include/sync_slave_sql_with_master.inc


--echo #
--echo # Test semi-sync master will switch OFF after one transaction
--echo # timeout waiting for slave reply.
--echo #
connection slave;
source include/stop_slave.inc;

source include/rpl_connection_master.inc;
# Kill the dump thread(s) on master for previous slave connection
source include/stop_dump_threads.inc;
# Rpl_semi_sync_master_clients should be 0, once the dump thread(s) have exited.
let $status_var= Rpl_semi_sync_master_clients;
let $status_var_value= 0;
source include/wait_for_status_var.inc;

# The first semi-sync check should be on because after slave stop,
# there are no transactions on the master.
echo [ master status should be ON ];
show status like 'Rpl_semi_sync_master_status';
show status like 'Rpl_semi_sync_master_no_tx';
show status like 'Rpl_semi_sync_master_yes_tx';
show status like 'Rpl_semi_sync_master_clients';

echo [ semi-sync replication of these transactions will fail ];
insert into t1 values (500);

# Wait for the semi-sync replication of this transaction to timeout
let $status_var= Rpl_semi_sync_master_status;
let $status_var_value= OFF;
source include/wait_for_status_var.inc;

# The second semi-sync check should be off because one transaction
# times out during waiting.
echo [ master status should be OFF ];
show status like 'Rpl_semi_sync_master_status';
show status like 'Rpl_semi_sync_master_no_tx';
show status like 'Rpl_semi_sync_master_yes_tx';

# Semi-sync status on master is now OFF, so all these transactions
# will be replicated asynchronously.
let $i=10;
disable_query_log;
while ($i)
{
  eval delete from t1 where a=$i;
  dec $i;
}
enable_query_log;

insert into t1 values (100);

echo [ master status should be OFF ];
show status like 'Rpl_semi_sync_master_status';
show status like 'Rpl_semi_sync_master_no_tx';
show status like 'Rpl_semi_sync_master_yes_tx';

--echo #
--echo # Test semi-sync status on master will be ON again when slave catches up
--echo #

# Save the master position for later use.
save_master_pos;

source include/rpl_connection_slave.inc;
echo [ slave status should be OFF ];
show status like 'Rpl_semi_sync_slave_status';
source include/start_slave.inc;
sync_with_master;

echo [ slave status should be ON ];
show status like 'Rpl_semi_sync_slave_status';

select count(distinct a) from t1;
select min(a) from t1;
select max(a) from t1;

source include/rpl_connection_master.inc;
# Wait until master semi-sync status is on again after slave catches up
# to avoid test failures on slow platforms.
let $status_var= Rpl_semi_sync_master_status;
let $status_var_value= ON;
source include/wait_for_status_var.inc;

echo [ master status should be ON again after slave catches up ];
show status like 'Rpl_semi_sync_master_status';
show status like 'Rpl_semi_sync_master_no_tx';
show status like 'Rpl_semi_sync_master_yes_tx';
show status like 'Rpl_semi_sync_master_clients';

--echo #
--echo # Test disable/enable master semi-sync on the fly.
--echo #

drop table t1;
--source include/sync_slave_sql_with_master.inc
echo [ on slave ];

source include/stop_slave.inc;

--echo #
--echo # Flush status
--echo #
connection master;
echo [ Semi-sync master status variables before FLUSH STATUS ];
SHOW STATUS LIKE 'Rpl_semi_sync_master_no_tx';
SHOW STATUS LIKE 'Rpl_semi_sync_master_yes_tx';
# Do not write the FLUSH STATUS to binlog, to make sure we'll get a
# clean status after this.
FLUSH NO_WRITE_TO_BINLOG STATUS;
echo [ Semi-sync master status variables after FLUSH STATUS ];
SHOW STATUS LIKE 'Rpl_semi_sync_master_no_tx';
SHOW STATUS LIKE 'Rpl_semi_sync_master_yes_tx';

source include/rpl_connection_master.inc;
source include/show_master_logs.inc;
show variables like 'rpl_semi_sync_master_enabled';

echo [ disable semi-sync on the fly ];
set global rpl_semi_sync_master_enabled=0;
show variables like 'rpl_semi_sync_master_enabled';
show status like 'Rpl_semi_sync_master_status';

echo [ enable semi-sync on the fly ];
set global rpl_semi_sync_master_enabled=1;
show variables like 'rpl_semi_sync_master_enabled';
show status like 'Rpl_semi_sync_master_status';

--echo #
--echo # Test RESET MASTER/SLAVE
--echo #

source include/rpl_connection_slave.inc;
source include/start_slave.inc;

source include/rpl_connection_master.inc;
replace_result $engine_type ENGINE_TYPE;
eval create table t1 (a int) engine = $engine_type;
drop table t1;

--source include/sync_slave_sql_with_master.inc
--replace_column 2 #
show status like 'Rpl_relay%';

echo [ test reset master ];
source include/rpl_connection_master.inc;

reset master;

show status like 'Rpl_semi_sync_master_status';
show status like 'Rpl_semi_sync_master_no_tx';
show status like 'Rpl_semi_sync_master_yes_tx';

source include/rpl_connection_slave.inc;
source include/stop_slave.inc;
reset slave;
reset master;

source include/rpl_connection_master.inc;
# Kill the dump thread(s) on master for previous slave connection
source include/stop_dump_threads.inc;
# Rpl_semi_sync_master_clients should be 0, once the dump thread(s) have exited.
let $status_var= Rpl_semi_sync_master_clients;
let $status_var_value= 0;
source include/wait_for_status_var.inc;

connection slave;
source include/start_slave.inc;

source include/rpl_connection_master.inc;
# Wait for dump thread to start, Rpl_semi_sync_master_clients should be
# 1 after dump thread started.
let $status_var= Rpl_semi_sync_master_clients;
let $status_var_value= 1;
source include/wait_for_status_var.inc;

replace_result $engine_type ENGINE_TYPE;
eval create table t1 (a int) engine = $engine_type;
insert into t1 values (1);
insert into t1 values (2), (3);

--source include/sync_slave_sql_with_master.inc
echo [ on slave ];
select * from t1;

source include/rpl_connection_master.inc;
# Wait until master semi-sync status is on again after slave catches up
# to avoid test failures on slow platforms.
let $status_var= Rpl_semi_sync_master_status;
let $status_var_value= ON;
source include/wait_for_status_var.inc;

echo [ master semi-sync status should be ON ];
show status like 'Rpl_semi_sync_master_status';
show status like 'Rpl_semi_sync_master_no_tx';
show status like 'Rpl_semi_sync_master_yes_tx';


--echo #
--echo # Start semi-sync replication without SUPER privilege
--echo #
--source include/rpl_reset.inc

source include/rpl_connection_master.inc;
# Kill the dump thread on master for previous slave connection
source include/stop_dump_threads.inc;
# Rpl_semi_sync_master_clients should be 0, once dump thread(s) have exited
let $status_var= Rpl_semi_sync_master_clients;
let $status_var_value= 0;
source include/wait_for_status_var.inc;

# Do not binlog the following statement because it will generate
# different events for ROW and STATEMENT format
set sql_log_bin=0;
create user rpl@127.0.0.1 identified by 'rpl';
grant replication slave on *.* to rpl@127.0.0.1;
flush privileges;
set sql_log_bin=1;
# Prove of bug#77732 fixes:
# Created user's privileges - REPLICATION and SLAVE -
# alone must suffice to successful connecting even with show handler
# not compatible to 5.6.
SET @save_show_compatibility_56=@@global.show_compatibility_56;
SET @@global.show_compatibility_56=OFF;

source include/rpl_connection_slave.inc;
create user rpl@127.0.0.1 identified by 'rpl';
grant replication slave on *.* to rpl@127.0.0.1;
flush privileges;
--replace_column 2 ####
change master to master_user='rpl',master_password='rpl';
source include/start_slave.inc;
show status like 'Rpl_semi_sync_slave_status';
source include/rpl_connection_master.inc;
SET @@global.show_compatibility_56=ON;

# bug#77732 related: reconnecting to the master while the show handler
# is compatible with 5.6
--source include/rpl_connection_slave.inc
source include/stop_slave.inc;

--source include/rpl_connection_master.inc
# Added for Bug#19372027: rpl_semi_sync fails sporadically on trunk
# To ensure that master knows that the slave is stopped
Insert into t1 values (4);
# wait for semi sync binlog dump thread to stop
let $status_var= Rpl_semi_sync_master_clients;
let $status_var_value= 0;
source include/wait_for_status_var.inc;
show status like 'Rpl_semi_sync_master_status';
show status like 'Rpl_semi_sync_master_clients';

source include/rpl_connection_slave.inc;
source include/start_slave.inc;
show status like 'Rpl_semi_sync_slave_status';

--source include/rpl_connection_master.inc
# bug#77732 cleanup
SET @@global.show_compatibility_56=@save_show_compatibility_56;
# Added for Bug#19372027:rpl_semi_sync fails sporadically on trunk
let $status_var= Rpl_semi_sync_master_status;
let $status_var_value= ON;
source include/wait_for_status_var.inc;
show status like 'Rpl_semi_sync_master_status';

# Wait for the semi-sync binlog dump thread to start
let $status_var= Rpl_semi_sync_master_clients;
let $status_var_value= 1;
source include/wait_for_status_var.inc;
echo [ master semi-sync should be ON ];
show status like 'Rpl_semi_sync_master_clients';
show status like 'Rpl_semi_sync_master_no_tx';
show status like 'Rpl_semi_sync_master_yes_tx';
insert into t1 values (5);
insert into t1 values (6);

# Wait for acks from slave to avoid test failures on slow platforms.
let $status_var= Rpl_semi_sync_master_yes_tx;
let $status_var_value= 2;
source include/wait_for_status_var.inc;

echo [ master semi-sync should be ON ];
show status like 'Rpl_semi_sync_master_clients';
show status like 'Rpl_semi_sync_master_status';
show status like 'Rpl_semi_sync_master_no_tx';
show status like 'Rpl_semi_sync_master_yes_tx';

--echo #
--echo # Test semi-sync slave connect to non-semi-sync master
--echo #

# Disable semi-sync on master
--source include/sync_slave_sql_with_master.inc
echo [ on slave ];
source include/stop_slave.inc;
SHOW STATUS LIKE 'Rpl_semi_sync_slave_status';

source include/rpl_connection_master.inc;
# Kill the dump thread(s) on master for previous slave connection
source include/stop_dump_threads.inc;
# Rpl_semi_sync_master_clients should be 0, once dump thread(s) have exited
let $status_var= Rpl_semi_sync_master_clients;
let $status_var_value= 0;
source include/wait_for_status_var.inc;

echo [ Semi-sync status on master should be ON ];
show status like 'Rpl_semi_sync_master_clients';
show status like 'Rpl_semi_sync_master_status';
set global rpl_semi_sync_master_enabled= 0;

source include/rpl_connection_slave.inc;
SHOW VARIABLES LIKE 'rpl_semi_sync_slave_enabled';
source include/start_slave.inc;

source include/rpl_connection_master.inc;
insert into t1 values (8);
let $status_var= Rpl_semi_sync_master_clients;
let $status_var_value= 1;
source include/wait_for_status_var.inc;
echo [ master semi-sync clients should be 1, status should be OFF ];
show status like 'Rpl_semi_sync_master_clients';
show status like 'Rpl_semi_sync_master_status';
--source include/sync_slave_sql_with_master.inc
echo [ on slave ];
show status like 'Rpl_semi_sync_slave_status';

# Uninstall semi-sync plugin on master
connection slave;
source include/stop_slave.inc;
connection master;
echo [ on master ];
--source include/stop_dump_threads.inc
if ($rpl_test_optimize_for_static_plugin_config == 1)
{
  SET GLOBAL replication_optimize_for_static_plugin_config = 0;
}
UNINSTALL PLUGIN rpl_semi_sync_master;
enable_query_log;
SHOW VARIABLES LIKE 'rpl_semi_sync_master_enabled';

source include/rpl_connection_slave.inc;
SHOW VARIABLES LIKE 'rpl_semi_sync_slave_enabled';
source include/start_slave.inc;

source include/rpl_connection_master.inc;
insert into t1 values (10);
--source include/sync_slave_sql_with_master.inc
echo [ on slave ];
SHOW STATUS LIKE 'Rpl_semi_sync_slave_status';

--echo #
--echo # Test non-semi-sync slave connect to semi-sync master
--echo #

connection master;
replace_result $SEMISYNC_MASTER_PLUGIN SEMISYNC_MASTER_PLUGIN;
eval INSTALL PLUGIN rpl_semi_sync_master SONAME '$SEMISYNC_MASTER_PLUGIN';
if ($rpl_test_optimize_for_static_plugin_config == 1)
{
  SET GLOBAL replication_optimize_for_static_plugin_config = 1;
}
set global rpl_semi_sync_master_timeout= 60000; /* 60s */
set global rpl_semi_sync_master_enabled= 1;

source include/rpl_connection_slave.inc;
source include/stop_slave.inc;
SHOW STATUS LIKE 'Rpl_semi_sync_slave_status';

echo [ uninstall semi-sync slave plugin ];
UNINSTALL PLUGIN rpl_semi_sync_slave;
SHOW VARIABLES LIKE 'rpl_semi_sync_slave_enabled';
source include/start_slave.inc;
SHOW STATUS LIKE 'Rpl_semi_sync_slave_status';
source include/stop_slave.inc;

echo [ reinstall semi-sync slave plugin and disable semi-sync ];
replace_result $SEMISYNC_SLAVE_PLUGIN SEMISYNC_SLAVE_PLUGIN;
eval INSTALL PLUGIN rpl_semi_sync_slave SONAME '$SEMISYNC_SLAVE_PLUGIN';
set global rpl_semi_sync_slave_enabled= 0;
SHOW VARIABLES LIKE 'rpl_semi_sync_slave_enabled';
SHOW STATUS LIKE 'Rpl_semi_sync_slave_status';
source include/start_slave.inc;
SHOW STATUS LIKE 'Rpl_semi_sync_slave_status';

--echo #
--echo # Clean up
--echo #
if ($rpl_test_optimize_for_static_plugin_config == 1)
{
  connection master;
  SET GLOBAL replication_optimize_for_static_plugin_config = 0;
}
--source include/uninstall_semisync.inc

connection slave;
--source include/stop_slave.inc
--replace_column 2 ####
change master to master_user='root',master_password='';
source include/start_slave.inc;

connection master;
drop table t1;
--source include/sync_slave_sql_with_master.inc

connection master;
drop user rpl@127.0.0.1;
flush privileges;
--source include/rpl_end.inc

Man Man