File: rpl_semi_sync_uninstall_plugin.test

package info (click to toggle)
mysql-5.5 5.5.60-0%2Bdeb8u1
  • links: PTS, VCS
  • area: main
  • in suites: jessie
  • size: 201,012 kB
  • sloc: cpp: 648,063; ansic: 552,041; perl: 48,017; pascal: 25,099; sh: 15,065; yacc: 13,088; cs: 4,647; xml: 4,178; sql: 3,380; makefile: 1,368; lex: 639; awk: 54
file content (144 lines) | stat: -rw-r--r-- 5,901 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
###############################################################################
# Bug#17638477 UNINSTALL AND INSTALL SEMI-SYNC PLUGIN CAUSES SLAVES TO BREAK
#  Problem: Uninstallation of Semi sync plugin should be blocked when it is
#  in use.
#  Test case: Uninstallation of semi sync should be allowed
#   On Master:
#     1) When there is no dump thread
#     2) When there are no semi sync slaves (i.e., async replication).
#   On Slave:
#     1) When there is no I/O thread
#     2) When there are no semi sync enabled I/O thread (i.e.,async replication).
###############################################################################

--source include/have_semisync_plugin.inc
--source include/not_embedded.inc
--source include/have_binlog_format_statement.inc
--source include/master-slave.inc

###############################################################################
# Case 1: Uninstallation of semi sync plugins should be allowed when it is
#  not in use i.e., when asynchronous replication is active.
###############################################################################
# Step 1.1: Install semi sync master plugin on master
--replace_result $SEMISYNC_MASTER_PLUGIN SEMISYNC_MASTER_PLUGIN
eval INSTALL PLUGIN rpl_semi_sync_master SONAME '$SEMISYNC_MASTER_PLUGIN';

# Step 1.2: Install semi sync slave plugin on slave
--connection slave
--replace_result $SEMISYNC_SLAVE_PLUGIN SEMISYNC_SLAVE_PLUGIN
eval INSTALL PLUGIN rpl_semi_sync_slave SONAME '$SEMISYNC_SLAVE_PLUGIN';

# Step 1.3: Uninstallation of semisync plugin on master and slave should be
#  allowed at this state as there is no semi sync replication enabled between
#  master and slave.
UNINSTALL PLUGIN rpl_semi_sync_slave;
--connection master
UNINSTALL PLUGIN rpl_semi_sync_master;

# Step 1.4: Check that replication is working fine at the end of the test case.
CREATE TABLE t1(i int);
INSERT INTO t1 values (1);
DROP TABLE t1;
--sync_slave_with_master

###############################################################################
# Case 2: Uninstallation of semi sync plugins should be disallowed
#  when it is in use i.e., when semi sync replication is active
###############################################################################
# Step 2.1: Install and enable semi sync replication between master and slave
--source include/install_semisync.inc

# Step 2.2: Check that rpl_semi_sync_slave uninstallation on Slave is not
#  possible at this state
--connection slave
call mtr.add_suppression("Plugin 'rpl_semi_sync_slave' cannot be uninstalled now");
--error ER_UNKNOWN_ERROR
UNINSTALL PLUGIN rpl_semi_sync_slave;

# Step 2.3: Check that rpl_semi_sync_master uninstallation on Master is not
#  possible at this state
--connection master
call mtr.add_suppression("Plugin 'rpl_semi_sync_master' cannot be uninstalled now");
--error ER_UNKNOWN_ERROR
UNINSTALL PLUGIN rpl_semi_sync_master;

# Step 2.4: Check that replication is working fine at the end of the test case.
CREATE TABLE t1(i int);
INSERT INTO t1 values (2);
DROP TABLE t1;
--sync_slave_with_master

# Step 2.5: Make sure rpl_semi_sync_master_status on Master and
# rpl_semi_sync_slave_staus on Slave are ON
--let $slave_status=[show status like "Rpl_semi_sync_slave_status", Value, 1]
--let assert_cond= "$slave_status" = "ON"
--let assert_text= semi sync slave status should be ON.
--source include/assert.inc

--connection master
--let $master_status=[show status like "Rpl_semi_sync_master_status", Value, 1]
--let assert_cond= "$master_status" = "ON"
--let assert_text= semi sync master status should be ON.
--source include/assert.inc

--let $master_clients=[show status like "Rpl_semi_sync_master_clients", Value, 1]
--let assert_cond= $master_clients = 1
--let assert_text= semi sync master clients should be 1.
--source include/assert.inc

###############################################################################
# Case 3: Uninstallation of semi sync plugin should be disallowed when there
#  are semi sync slaves even though rpl_semi_sync_master_enabled= OFF;.
###############################################################################
# Step 3.1: Disable semi sync on master
--connection master
SET GLOBAL rpl_semi_sync_master_enabled = OFF;

# Step 3.2: Check that still Rpl_semi_sync_master_clients is 1
--let $master_clients=[show status like "Rpl_semi_sync_master_clients", Value, 1]
--let assert_cond= $master_clients = 1
--let assert_text= semi sync master clients should be 1.
--source include/assert.inc

# Step 3.3: Since Rpl_semi_sync_master_clients is 1, uninstallation of
#  rpl_semi_sync_master should be disallowed.
--error ER_UNKNOWN_ERROR
UNINSTALL PLUGIN rpl_semi_sync_master;

###############################################################################
# Case 4: Uninstallation of semi sync plugin should be allowed when it is not
#  in use. Same as Case 1 but this case is to check the case after enabling and
#  disabling semi sync replication.
###############################################################################

# Step 4.1: Stop IO thread on slave.
--connection slave
--source include/stop_slave.inc

# Step 4.2: Disable semi sync on slave.
SET GLOBAL rpl_semi_sync_slave_enabled = OFF;

# Step 4.3: Start IO thread on slave.
--source include/start_slave.inc

# Step 4.4: Uninstall semi sync plugin, it should be successful now.
UNINSTALL PLUGIN rpl_semi_sync_slave;

# Step 4.5: On Master, wait until semi sync slaves is '0'.
--connection master
--let $status_var= Rpl_semi_sync_master_clients
--let $status_var_value= 0
--source include/wait_for_status_var.inc

# Step 4.6: So uninstalling semi sync plugin should be allowed
UNINSTALL PLUGIN rpl_semi_sync_master;

# Step 4.7: Check that replication is working fine at the end of the test case
CREATE TABLE t1(i int);
INSERT INTO t1 values (3);
DROP TABLE t1;
--sync_slave_with_master

# Cleanup
source include/rpl_end.inc;