File: show_slave_status.inc

package info (click to toggle)
mysql-8.0 8.0.43-3
  • links: PTS, VCS
  • area: main
  • in suites: sid
  • size: 1,273,924 kB
  • sloc: cpp: 4,684,605; ansic: 412,450; pascal: 108,398; java: 83,641; perl: 30,221; cs: 27,067; sql: 26,594; sh: 24,181; python: 21,816; yacc: 17,169; php: 11,522; xml: 7,388; javascript: 7,076; makefile: 2,194; lex: 1,075; awk: 670; asm: 520; objc: 183; ruby: 97; lisp: 86
file content (120 lines) | stat: -rw-r--r-- 4,191 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
# ==== Purpose ====
#
# Show selected columns of output from SHOW SLAVE STATUS FOR CHANNEL channel.
#
# Note: test cases should never call SHOW SLAVE STATUS FOR CHANNEL channel,
# directly, because that outputs more information to the query log than
# what is needed for the property that is being tested.  That would
# cause maintenance problems, because (1) it is hard for a human to
# understand what property is being tested; (2) the output of many of
# the fields is non-deterministic (e.g., Slave_IO_State) or changes
# frequently (e.g., binlog positions).
#
# Instead, what you want most of the time is to source one of the
# following scripts:
#
#   include/check_slave_no_error.inc
#     Assert that Slave_SQL_Errno = Slave_IO_Errno = 0.
#
#   include/check_slave_is_running.inc
#     Assert that Slave_IO_Running = Slave_SQL_Running = 'Yes'.
#
#   include/wait_for_slave_sql_error.inc
#     Wait for the SQL thread to get a given error (and assert that
#     it has this error).
#
#   include/wait_for_slave_io_error.inc
#     Wait for the IO thread to get a given error (and assert that
#     it has this error).
#
#   include/wait_for_slave_sql_to_stop.inc
#   include/wait_for_slave_io_to_stop.inc
#   include/wait_for_slave_to_stop.inc
#     Wait for the SQL thread, the IO thread, or both to stop (and
#     assert they stop).
#
# When none of the above applies, you may use this script instead.
# However, take care so that the test never contains explicit binlog
# coordinates. Usually you can read the binlog coordinates into a
# variable and compare it to some other coordinates.
#
#
# ==== Usage ====
#
# --let $status_items= Column_Name[, Column_Name[, ...]]
# [--let $rpl_channel_name=channel_name]
# --source include/show_slave_status.inc
#
# Parameters:
#   $status_items
#     Set to the name of the column in the output of SHOW SLAVE STATUS
#     that you want to display. Example:
#
#       --let $status_items= Master_SSL_Allowed
#
#     You can show multiple columns by setting $status_items to a
#     comma-separated list. Example:
#
#       --let $status_items= Master_Log_File, Relay_Master_Log_File
#
#   $slave_field_result_replace
#     If set, one or more regex patterns for replacing variable
#     text in the error message. Syntax as --replace-regex
#
#   $slave_sql_mode
#     If set, change the slave sql mode during this macro, reverting
#     to the previous on exit. Default sql_mode is NO_BACKSLASH_ESCAPES
#     to allow replace '\' by '/' making paths OS independent. Example:
#
#       --let $slave_sql_mode= NO_BACKSLASH_ESCAPES
#
#   $rpl_channel_name
#     If set, FOR CHANNEL clause is added to SHOW SLAVE STATUS command.
#

--let $_show_slave_status_items= $status_items
if (!$status_items)
{
  --die Bug in test case: The mysqltest variable $status_items is not set.
}

--let $_show_slave_status_channel= $rpl_channel_name
if (!$rpl_channel_name)
{
  --let $_show_slave_status_channel= ''
}

--let $_slave_sql_mode= NO_BACKSLASH_ESCAPES
if ($slave_sql_mode)
{
  --let $_slave_sql_mode= $slave_sql_mode
}
--let $_previous_slave_sql_mode = `SELECT @@sql_mode`
--disable_query_log
eval SET sql_mode= '$_slave_sql_mode';
--enable_query_log

--let $show_slave_status_cmd=SHOW SLAVE STATUS
if ($rpl_channel_name)
{
  --let $show_slave_status_cmd= $show_slave_status_cmd FOR CHANNEL $rpl_channel_name
}

while ($_show_slave_status_items)
{
  --let $_show_slave_status_name= `SELECT SUBSTRING_INDEX('$_show_slave_status_items', ',', 1)`
  --let $_show_slave_status_items= `SELECT LTRIM(SUBSTRING('$_show_slave_status_items', LENGTH('$_show_slave_status_name') + 2))`

  --let $_show_slave_status_value= query_get_value($show_slave_status_cmd, $_show_slave_status_name, 1)

  --let $_show_slave_status_value = escape("\,$_show_slave_status_value)
  --let $_slave_field_result_replace= /[\\\\]/\// $slave_field_result_replace
  --replace_regex $_slave_field_result_replace
  --let $_show_slave_status_value= `SELECT REPLACE("$_show_slave_status_value", '$MYSQL_TEST_DIR', 'MYSQL_TEST_DIR')`
  --echo $_show_slave_status_name = '$_show_slave_status_value'
}


--disable_query_log
eval SET sql_mode= '$_previous_slave_sql_mode';
--enable_query_log