1# ==== Purpose ====
2#
3# Configure N servers to be in single primary mode.
4#
5# It does not change the current connection.
6#
7# ==== Usage ====
8#
9#   --let $rpl_server_count= N
10#   [--let $reset_single_primary_mode=1|0]
11#   --source ../inc/single_primary_mode.inc
12#
13# Parameters:
14#   $rpl_server_count
15#     See include/master-slave.inc
16#
17#   $reset_single_primary_mode
18#     To check whether we are going to set or
19#     reset the single primary mode configuration
20#
21
22--let $include_filename= single_primary_mode.inc
23--source include/begin_include_file.inc
24
25if (!$reset_single_primary_mode)
26{
27  --let $reset_single_primary_mode= 0
28}
29
30--let $_i_set_single_primary_mode= 1
31--let $_saved_connection= $CURRENT_CONNECTION
32
33--disable_query_log
34
35while ($_i_set_single_primary_mode <= $rpl_server_count)
36{
37  --let $rpl_connection_name= server_aux_$_i_set_single_primary_mode
38  --let $rpl_server_number= $_i_set_single_primary_mode
39  --source include/rpl_connect.inc
40  --let $rpl_connection_name= server_aux_$_i_set_single_primary_mode
41  --source include/rpl_connection.inc
42
43  # plugin cannot be running for us to setup these configs
44  let $_this_member_id=
45    query_get_value(SELECT @@SERVER_UUID, @@SERVER_UUID, 1);
46  let $_is_plugin_running=
47    `SELECT member_state IN ("ONLINE", "UNREACHABLE", "RECOVERY", "ERROR")
48       FROM performance_schema.replication_group_members
49      WHERE member_id="$_this_member_id"`;
50
51  if ($_is_plugin_running)
52  {
53    --die "Cannot set/reset single primary mode while the plugin is running!"
54  }
55
56  if (!$reset_single_primary_mode)
57  {
58    SET GLOBAL group_replication_enforce_update_everywhere_checks= FALSE;
59    SET GLOBAL group_replication_single_primary_mode= TRUE;
60  }
61
62  if ($reset_single_primary_mode)
63  {
64    SET GLOBAL group_replication_single_primary_mode= FALSE;
65    SET GLOBAL group_replication_enforce_update_everywhere_checks= TRUE;
66  }
67
68  --connection default
69  --disconnect server_aux_$_i_set_single_primary_mode
70
71  --inc $_i_set_single_primary_mode
72}
73
74--enable_query_log
75
76--let $reset_single_primary_mode=
77
78--connection $_saved_connection
79
80--let $include_filename= single_primary_mode.inc
81--source include/end_include_file.inc
82