File: gr_assert_mpm_consistency.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 (137 lines) | stat: -rw-r--r-- 4,716 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
# ==== Purpose ====
#
# Assert MPM consistency for ONLINE and RECOVERING members.
#
# Confirms all members have:
# 1. SPM mode not set,
# 2. Enforce_update_everywhere_checks is not set,
# 3. Have no secondary roles,
# 4. Only lowest versions are writable,
# 5. ONLINE and RECOVERING numbers are same in each member,
# 6. No member in ERROR state.(configuration changes only aborts operation)
#
# ==== Usage ====
#
#   --let $lowest_version_of_group=group_lowest_version
#   --source include/gr_assert_mpm_consistency.inc
#
# Parameters:
#   $lowest_version_of_group
#     Lowest version of the group.
#

--let $include_filename= gr_assert_mpm_consistency.inc
--source include/begin_include_file.inc

--let $_server_index= 1
--let $_active_members_of_group=
--let $_saved_connection= $CURRENT_CONNECTION
--disable_query_log

# Discover if all servers are 8.0.35 or higher version.
--let $_server_8_0_lts= true
while ($_server_index <= $rpl_server_count)
{
  --let $rpl_connection_name= server_spm_consistency$_server_index
  --let $rpl_server_number= $_server_index
  --source include/rpl_connect.inc
  --let $rpl_connection_name= server_spm_consistency$_server_index
  --source include/rpl_connection.inc

  --let $_version_major= `SELECT sys.version_major()`
  --let $_version_minor= `SELECT sys.version_minor()`
  --let $_version_patch= `SELECT sys.version_patch()`

  if ($_version_major != 8)
  {
    --let $_server_8_0_lts= false
    --let $_server_index= $rpl_server_count
  }

  if ($_version_minor != 0)
  {
    --let $_server_8_0_lts= false
    --let $_server_index= $rpl_server_count
  }

  if ($_version_patch < 35)
  {
    --let $_server_8_0_lts= false
    --let $_server_index= $rpl_server_count
  }

  --connection default
  --disconnect server_spm_consistency$_server_index
  --inc $_server_index
}

while ($_server_index <= $rpl_server_count)
{
  --let $rpl_connection_name= server_spm_consistency$_server_index
  --let $rpl_server_number= $_server_index
  --source include/rpl_connect.inc
  --let $rpl_connection_name= server_spm_consistency$_server_index
  --source include/rpl_connection.inc

  let $_this_member_id= query_get_value(SELECT @@SERVER_UUID, @@SERVER_UUID, 1);
  let $_is_member_in_error= `SELECT member_state IN ("ERROR") FROM performance_schema.replication_group_members WHERE member_id="$_this_member_id"`;
  if ($_is_member_in_error)
  {
    --die "Please check server \$_server_index is in ERROR state."
  }
  let $_is_plugin_running= `SELECT member_state IN ("ONLINE", "RECOVERY") FROM performance_schema.replication_group_members WHERE member_id="$_this_member_id"`;
  if ($_is_plugin_running)
  {
    --let $skip_checking_read_only= 1
    --source include/gr_assert_multi_primary_mode.inc

    # Do not rely on this. Manually set lowest version of group.
    # Tests will fail when major version moves from 9 -> 10
    if (!$lowest_version_of_group)
    {
      --let lowest_version_of_group = query_get_value(SELECT member_version FROM performance_schema.replication_group_members ORDER BY member_version ASC LIMIT 1,member_version,1)
    }
    --let $_am_i_writable= query_get_value(SELECT COUNT(*) AS COUNT FROM performance_schema.replication_group_members WHERE member_version="$lowest_version_of_group" AND member_id="$_this_member_id", COUNT, 1)

    # Starting on 8.0.35, inclusive, all 8.0 patch versions are compatible,
    # thence allowed to do writes.
    if ($_server_8_0_lts)
    {
      --let $_am_i_writable= true
    }

    if ($_am_i_writable)
    {
      --let $assert_text= The super_read_only mode should be 0 here.
      --let $assert_cond= "[SELECT @@GLOBAL.super_read_only]" = 0;
      --source include/assert.inc
    }
    if (!$_am_i_writable)
    {
      --let $assert_text= The super_read_only mode should be 1 here.
      --let $assert_cond= "[SELECT @@GLOBAL.super_read_only]" = 1;
      --source include/assert.inc
    }

    if (!$_active_members_of_group)
    {
      let $_active_members_of_group= `SELECT COUNT(*) AS COUNT FROM performance_schema.replication_group_members WHERE member_state IN ("ONLINE", "RECOVERY")`;
    }
    if ($_active_members_of_group)
    {
      --let $assert_text= 'Number of active members are same across group.'
      --let $assert_cond= [SELECT COUNT(*) AS COUNT FROM performance_schema.replication_group_members WHERE member_state IN ("ONLINE", "RECOVERY")] = $_active_members_of_group
      --source include/assert.inc
    }
  }
  --connection default
  --disconnect server_spm_consistency$_server_index

  --inc $_server_index
}
--let $lowest_version_of_group=
--enable_query_log
--connection $_saved_connection

--let $include_filename= gr_assert_mpm_consistency.inc
--source include/end_include_file.inc