1
by brian
clean slate |
1 |
# include/wait_slave_status.inc |
2 |
#
|
|
3 |
# Created by Matthias Leich |
|
4 |
#
|
|
5 |
# SUMMARY |
|
6 |
#
|
|
7 |
# Waits until slave has reached certain state or maximum time reached. |
|
8 |
#
|
|
9 |
# (This script will not work, when the SHOW command delivers more than one |
|
10 |
# result record, because only the first record will be caught.) |
|
11 |
#
|
|
12 |
# USAGE |
|
13 |
#
|
|
14 |
# Set $result_pattern in test file and source this file: |
|
15 |
#
|
|
16 |
# let $result_pattern= <pattern used for LIKE on the result of |
|
17 |
# SHOW STATUS SLAVE> |
|
18 |
# --include wait_slave_status.inc |
|
19 |
#
|
|
20 |
# EXAMPLE |
|
21 |
#
|
|
22 |
# The script rpl_until.test: |
|
23 |
# ... |
|
24 |
# --replace_result $MASTER_MYPORT MASTER_MYPORT |
|
25 |
# --replace_column 1 # 9 # 23 # 33 # |
|
26 |
# --vertical_results show slave status; |
|
27 |
#
|
|
28 |
# outputs |
|
29 |
# show slave status; |
|
30 |
# Slave_IO_State # |
|
31 |
# Master_Host 127.0.0.1 |
|
32 |
# Master_User root |
|
33 |
# Master_Port MASTER_MYPORT |
|
34 |
# Connect_Retry 1 |
|
35 |
# Master_Log_File master-bin.000001 |
|
36 |
# Read_Master_Log_Pos 776 |
|
37 |
# Relay_Log_File slave-relay-bin.000004 |
|
38 |
# Relay_Log_Pos # |
|
39 |
# Relay_Master_Log_File master-bin.000001 |
|
40 |
# Slave_IO_Running Yes |
|
41 |
# Slave_SQL_Running No |
|
42 |
# Replicate_Do_DB |
|
43 |
# Replicate_Ignore_DB |
|
44 |
# Replicate_Do_Table |
|
45 |
# Replicate_Ignore_Table |
|
46 |
# Replicate_Wild_Do_Table |
|
47 |
# Replicate_Wild_Ignore_Table |
|
48 |
# Last_Errno 0 |
|
49 |
# Last_Error |
|
50 |
# Skip_Counter 0 |
|
51 |
# Exec_Master_Log_Pos 319 |
|
52 |
# Relay_Log_Space # |
|
53 |
# Until_Condition Master |
|
54 |
# Until_Log_File master-bin.000001 |
|
55 |
# Until_Log_Pos 319 |
|
56 |
# Master_SSL_Allowed No |
|
57 |
# Master_SSL_CA_File |
|
58 |
# Master_SSL_CA_Path |
|
59 |
# Master_SSL_Cert |
|
60 |
# Master_SSL_Cipher |
|
61 |
# Master_SSL_Key |
|
62 |
# Seconds_Behind_Master # |
|
63 |
#
|
|
64 |
# The main problem with the "show slave status;" in rpl_until is, that |
|
65 |
# depending on the total test engine power and the current load caused by |
|
66 |
# other processes, the expected slave status might be not reached though |
|
67 |
# it will happen in maybe some seconds. |
|
68 |
#
|
|
69 |
# The typical problem with rpl_until is that Slave_IO_Running is "No" |
|
70 |
# instead of "Yes". |
|
71 |
#
|
|
72 |
# The expected result follows the LIKE pattern: |
|
73 |
#
|
|
74 |
# let $result_pattern= '%127.0.0.1%root%1%master-bin.000001%776%slave-relay-bin.000004%master-bin.000001%Yes%No%0%0%319%Master%master-bin.000001%319%No%'; |
|
75 |
#
|
|
76 |
# The Slave_IO_Running value is the "Yes" just after the "master-bin.000001". |
|
77 |
#
|
|
78 |
# How to get this pattern ? |
|
79 |
#
|
|
80 |
# Any lines "--replace_result ..." and "--replace_colum ..." just before |
|
81 |
# the SHOW TABLE STATUS and of course the expected result itself |
|
82 |
# show us columns where the content must be unified, because it is non |
|
83 |
# deterministic or it depends on the current test environment. |
|
84 |
#
|
|
85 |
# Unfortunately "--replace_result ..." and "--replace_colum ..." do not |
|
86 |
# affect the result of our assignment let $my_val= `SHOW SLAVE STATUS`; |
|
87 |
# Therefore such content must be covered by '%'. |
|
88 |
#
|
|
89 |
# Please be careful. A more simple pattern might be dangerous, because we |
|
90 |
# might get "wrong" matches. Example: There might be several "Yes" and "No" |
|
91 |
# within one result row. |
|
92 |
#
|
|
93 |
###############################################################################
|
|
94 |
||
95 |
# We do not want to print the auxiliary commands, because they are not of |
|
96 |
# interest and their amount will vary depending how fast we get the |
|
97 |
# desired state. |
|
98 |
--disable_query_log |
|
99 |
||
100 |
# The protocol should show |
|
101 |
# - the setting of $result_pattern and |
|
102 |
# - that this file is sourced , |
|
103 |
# because this increases the chance to use the protocol as replay script. |
|
104 |
eval SELECT "let \$result_pattern= $result_pattern ;" AS ""; |
|
105 |
SELECT '--source include/wait_slave_status.inc' AS ""; |
|
106 |
||
107 |
let $show_type= SLAVE STATUS; |
|
108 |
let $show_pattern= $result_pattern; |
|
109 |
--enable_query_log |
|
110 |
||
111 |
--source include/wait_show_pattern.inc |
|
112 |
||
113 |
if (!$success) |
|
114 |
{
|
|
115 |
let $message= ! Attention: Timeout in wait_slave_status.inc. |
|
116 |
| Possible reasons with decreasing probability: |
|
117 |
| - The LIKE pattern is wrong, because the |
|
118 |
| testcase was altered or the layout of the |
|
119 |
| SHOW SLAVE STATUS result set changed. |
|
120 |
| - There is a new bug within the replication. |
|
121 |
| - We met an extreme testing environment and timeout is |
|
122 |
| too small.; |
|
123 |
--source include/show_msg80.inc |
|
124 |
--echo DEBUG INFO START (wait_slave_status.inc): |
|
125 |
--echo $result_pattern |
|
126 |
--vertical_results |
|
127 |
show slave status; |
|
128 |
--echo DEBUG INFO END |
|
129 |
}
|