summaryrefslogtreecommitdiff
path: root/mysql-test/t/im_options.imtest
blob: 8f9bed1647380f36e2a9e62b2ec90b0f01524832 (plain)
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
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
###########################################################################
#
# This test suite checks the following statements:
#   - SET <instance id>.<option name> = <option value>;
#   - UNSET <instance id>.<option name> = <option value>;
#   - FLUSH INSTANCES;
#
# For SET/UNSET we check that:
#   - SET ignores spaces correctly;
#   - UNSET does not allow option-value part (= <option value>);
#   - SET/UNSET can be applied several times w/o error;
#   - SET/UNSET is allowed only for stopped instances;
#   - SET/UNSET updates both the configuration cache in IM and
#     the configuration file;
#
# For FLUSH INSTANCES we check that:
#   - FLUSH INSTANCES is allowed only when all instances are stopped;
#
# According to the IM implementation details, we should play at least with the
# following options:
#   - server_id
#   - port
#   - nonguarded
#
# Let's test SET statement on the option 'server_id'. It's expected that
# originally the instances have the following server ids and states:
#  - mysqld1: server_id: 1; running (online)
#  - mysqld2: server_id: 2; stopped (offline)
#
# NOTE: each CREATE INSTANCE statement must specify socket-file-name, otherwise
# this results of the test can be affected by another running test suite.
#
###########################################################################

--source include/im_check_env.inc

###########################################################################
#
# Check that SET/UNSET is allowed only for stopped instances.
#
###########################################################################

# - check that SET/UNSET is denied for running instances;

--error 3015 # ER_INSTANCE_IS_ACTIVE
UNSET mysqld1.server_id;

--error 3015 # ER_INSTANCE_IS_ACTIVE
SET mysqld1.server_id = 11;

# - check that SET/UNSET is denied for active instances:
#   - create dummy misconfigured instance;
#   - start it;
#   - try to set/unset options;

CREATE INSTANCE mysqld3
  datadir = '/',
  server_id = 3,
  socket = "$MYSQL_TMP_DIR/mysqld_3.sock";
START INSTANCE mysqld3;

# FIXME: START INSTANCE should be synchronous.
--sleep 3
# should be longer than monitoring interval and enough to start instance.

# NOTE: We can not analyze state of the instance here -- it can be Failed or
# Starting because Instance Manager is trying to start the misconfigured
# instance several times.

--error 3015 # ER_INSTANCE_IS_ACTIVE
UNSET mysqld3.server_id;

--error 3015 # ER_INSTANCE_IS_ACTIVE
SET mysqld3.server_id = 11;

STOP INSTANCE mysqld3;

# FIXME: STOP INSTANCE should be synchronous.
--sleep 3
# should be longer than monitoring interval and enough to stop instance.

--replace_column 3 VERSION_NUMBER 4 VERSION
SHOW INSTANCE STATUS mysqld3;

# - check that SET/UNSET succeed for stopped instances;
# - check that SET/UNSET can be applied multiple times;

UNSET mysqld2.server_id;
UNSET mysqld2.server_id;

--replace_column 2 option_value
SHOW INSTANCE OPTIONS mysqld2;

SET mysqld2.server_id = 2;
SET mysqld2.server_id = 2;

--replace_column 2 option_value
SHOW INSTANCE OPTIONS mysqld2;

# - check that UNSET does not allow option-value part (= <option value>);

--error ER_SYNTAX_ERROR
UNSET mysqld2.server_id = 11;

# - check that SET/UNSET working properly with multiple options;

SET mysqld2.aaa, mysqld3.bbb, mysqld2.ccc = 0010, mysqld3.ddd = 0020;

--echo --------------------------------------------------------------------
--exec grep "^aaa\$" $MYSQLTEST_VARDIR/im.cnf ;
--echo --------------------------------------------------------------------
--exec grep "^bbb\$" $MYSQLTEST_VARDIR/im.cnf ;
--echo --------------------------------------------------------------------
--exec grep '^ccc[^a-zA-Z0-9_-]' $MYSQLTEST_VARDIR/im.cnf ;
--echo --------------------------------------------------------------------
--exec grep '^ddd[^a-zA-Z0-9_-]' $MYSQLTEST_VARDIR/im.cnf ;
--echo --------------------------------------------------------------------

UNSET mysqld2.aaa, mysqld3.bbb, mysqld2.ccc, mysqld3.ddd;

--echo --------------------------------------------------------------------
--exec grep "^aaa\$" $MYSQLTEST_VARDIR/im.cnf || true;
--echo --------------------------------------------------------------------
--exec grep "^bbb\$" $MYSQLTEST_VARDIR/im.cnf || true;
--echo --------------------------------------------------------------------
--exec grep '^ccc[^a-zA-Z0-9_-]' $MYSQLTEST_VARDIR/im.cnf || true;
--echo --------------------------------------------------------------------
--exec grep '^ddd[^a-zA-Z0-9_-]' $MYSQLTEST_VARDIR/im.cnf || true;
--echo --------------------------------------------------------------------

# - check that if some instance name is invalid or the active is active,
#   whole SET-statement will not be executed;

--error 3000 # ER_BAD_INSTANCE_NAME
SET mysqld2.aaa, mysqld3.bbb, mysqld.ccc = 0010;

--echo --------------------------------------------------------------------
--exec grep "^aaa\$" $MYSQLTEST_VARDIR/im.cnf || true;
--echo --------------------------------------------------------------------
--exec grep "^bbb\$" $MYSQLTEST_VARDIR/im.cnf || true;
--echo --------------------------------------------------------------------
--exec grep '^ccc[^a-zA-Z0-9_-]' $MYSQLTEST_VARDIR/im.cnf || true;
--echo --------------------------------------------------------------------

--error 3015 # ER_INSTANCE_IS_ACTIVE
SET mysqld2.aaa, mysqld3.bbb, mysqld1.ccc = 0010;

--echo --------------------------------------------------------------------
--exec grep "^aaa\$" $MYSQLTEST_VARDIR/im.cnf || true;
--echo --------------------------------------------------------------------
--exec grep "^bbb\$" $MYSQLTEST_VARDIR/im.cnf || true;
--echo --------------------------------------------------------------------
--exec grep '^ccc[^a-zA-Z0-9_-]' $MYSQLTEST_VARDIR/im.cnf || true;
--echo --------------------------------------------------------------------

# - check that if some instance name is invalid or the active is active,
#   whole UNSET-statement will not be executed;

--error 3000 # ER_BAD_INSTANCE_NAME
UNSET mysqld2.server_id, mysqld3.server_id, mysqld.ccc;

--echo --------------------------------------------------------------------
--exec grep '^server_id[^a-zA-Z0-9_-]' $MYSQLTEST_VARDIR/im.cnf;
--echo --------------------------------------------------------------------

--error 3015 # ER_INSTANCE_IS_ACTIVE
UNSET mysqld2.server_id, mysqld3.server_id, mysqld1.ccc;

--echo --------------------------------------------------------------------
--exec grep '^server_id[^a-zA-Z0-9_-]' $MYSQLTEST_VARDIR/im.cnf;
--echo --------------------------------------------------------------------

DROP INSTANCE mysqld3;

# - check that spaces are handled correctly;

SET mysqld2.server_id=222;
SET mysqld2.server_id = 222;
SET   mysqld2.server_id   =  222  ;
SET   mysqld2  .  server_id  =  222  ;
SET   mysqld2  .  server_id  =  222  , mysqld2  .  aaa  , mysqld2  .  bbb  ;

--echo --------------------------------------------------------------------
--exec grep '^server_id[^a-zA-Z0-9_-]' $MYSQLTEST_VARDIR/im.cnf ;
--echo --------------------------------------------------------------------
--exec grep "^aaa\$" $MYSQLTEST_VARDIR/im.cnf ;
--echo --------------------------------------------------------------------
--exec grep "^bbb\$" $MYSQLTEST_VARDIR/im.cnf ;
--echo --------------------------------------------------------------------

UNSET mysqld2  . aaa  ,  mysqld2  .  bbb ;

--echo --------------------------------------------------------------------
--exec grep '^server_id[^a-zA-Z0-9_-]' $MYSQLTEST_VARDIR/im.cnf ;
--echo --------------------------------------------------------------------
--exec grep "^aaa\$" $MYSQLTEST_VARDIR/im.cnf || true;
--echo --------------------------------------------------------------------
--exec grep "^bbb\$" $MYSQLTEST_VARDIR/im.cnf || true;
--echo --------------------------------------------------------------------

###########################################################################
#
# Check that SET/UNSET updates both the configuration cache in IM and
# the configuration file.
#
###########################################################################

#   - check that the configuration file has been updated (i.e. contains
#     server_id=SERVER_ID for mysqld2);

--echo --------------------------------------------------------------------
--exec grep '^server_id[^a-zA-Z0-9_-]' $MYSQLTEST_VARDIR/im.cnf ;
--echo --------------------------------------------------------------------

#   - (for mysqld1) check that the running instance has not been affected:
#     connect to the instance and check that 'SHOW VARIABLES LIKE 'server_id''
#     returns zero;

--connection mysql1_con

SHOW VARIABLES LIKE 'server_id';

--connection default

#   - check that internal cache of Instance Manager has been affected;
#     TODO: we should check only server_id option here.

# SHOW INSTANCE OPTIONS mysqld2;

###########################################################################
#
# Check that FLUSH INSTANCES is allowed only when all instances are stopped.
#
###########################################################################

SHOW INSTANCES;

--error 3016 # ER_THERE_IS_ACTIVE_INSTACE
FLUSH INSTANCES;

STOP INSTANCE mysqld1;
# FIXME: STOP INSTANCE should be synchronous.
--sleep 3
# should be longer than monitoring interval and enough to stop instance.

SHOW INSTANCES;

FLUSH INSTANCES;