181 lines
5.5 KiB
Plaintext
181 lines
5.5 KiB
Plaintext
################################################################
|
|
#
|
|
# This file contains following Group Replication helper macros:
|
|
#
|
|
# * Setsession - SESSION_NAME
|
|
# * Connect_to_instance - SESSION_NAME_PREFIX SERVER_INDEX TCP_PORT
|
|
# * Connect_to_all_mysqld_instances - SESSION_NAME_PREFIX NUMBER_OF_SERVERS_TO_INITIALIZE
|
|
# * GR_clear_bootstrap_group - NUMBER_OF_SERVERS_TO_INITIALIZE
|
|
# * GR_start_and_bootstrap - NUMBER_OF_SERVERS_TO_INITIALIZE GROUP_NAME EXPECTED_STATE
|
|
# * GR_start - GROUP_NAME EXPECTED_STATE
|
|
# * GR_stop
|
|
# * GR_start_applier_sql_thread
|
|
# * GR_stop_applier_sql_thread
|
|
# * GR_wait_for_number_of_members - EXPECTED_NUMBER_OF_MEMBERS
|
|
# * GR_wait_for_member_state - EXPECTED_STATE
|
|
# * GR_wait_for_uuid_and_member_state - UUID EXPECTED_STATE
|
|
#
|
|
|
|
|
|
#
|
|
## General macros
|
|
#
|
|
-->macro Setsession %NAME%
|
|
quiet;
|
|
echo [connection %NAME%];
|
|
setsession %NAME%;
|
|
noquiet;
|
|
-->endmacro
|
|
|
|
|
|
-->macro Connect_to_instance %PREFIX% %INSTANCE_ID% %PORT%
|
|
varlet %OPTION_CLIENT_PORT% %PORT%;
|
|
newsession %PREFIX%_%INSTANCE_ID% %OPTION_CLIENT_USER%;
|
|
-->endmacro
|
|
|
|
|
|
-->macro Connect_to_all_mysqld_instances %PREFIX% %NUMBER_OF_SERVERS%
|
|
repeat %NUMBER_OF_SERVERS% %ITERATION%;
|
|
varlet %ITERATION_SESSION% %ITERATION%;
|
|
varinc %ITERATION_SESSION% 1;
|
|
varlet %PORT_NAME% %SERVER_XPORT_%ITERATION_SESSION%%;
|
|
callmacro Connect_to_instance %PREFIX% %ITERATION_SESSION% %PORT_NAME%;
|
|
endrepeat;
|
|
-->endmacro
|
|
|
|
|
|
#
|
|
## Group-replication specific macros
|
|
#
|
|
-->macro GR_clear_bootstrap_group %NUMBER_OF_SERVERS%
|
|
noquery_result;
|
|
repeat %NUMBER_OF_SERVERS% %ITERATION%;
|
|
varlet %__SESSION% %NUMBER_OF_SERVERS%;
|
|
varinc %__SESSION% -%ITERATION%;
|
|
callmacro Setsession server_%__SESSION%;
|
|
SET GLOBAL group_replication_bootstrap_group= 0;
|
|
endrepeat;
|
|
query_result;
|
|
-->endmacro
|
|
|
|
|
|
-->macro GR_start_and_bootstrap %NUMBER_OF_SERVERS% %GR_NAME% %EXPECTED_STATE%
|
|
callmacro Setsession server_1;
|
|
noquery_result;
|
|
SET GLOBAL group_replication_bootstrap_group= 1;
|
|
query_result;
|
|
callmacro GR_start %GR_NAME% %EXPECTED_STATE%;
|
|
callmacro GR_clear_bootstrap_group %NUMBER_OF_SERVERS%;
|
|
-->endmacro
|
|
|
|
|
|
-->macro GR_start %GR_NAME% %EXPECTED_STATE%
|
|
noquery_result;
|
|
varsub %GR_NAME%;
|
|
SET GLOBAL group_replication_group_name='%GR_NAME%';
|
|
START GROUP_REPLICATION;
|
|
query_result;
|
|
|
|
callmacro GR_wait_for_member_state %EXPECTED_STATE%;
|
|
-->endmacro
|
|
|
|
|
|
-->macro GR_stop
|
|
noquery_result;
|
|
STOP GROUP_REPLICATION;
|
|
quiet;
|
|
wait_for 1 SELECT COUNT(*)=1
|
|
FROM performance_schema.replication_connection_status connection_status
|
|
WHERE connection_status.channel_name="group_replication_applier"
|
|
AND connection_status.service_state="OFF";
|
|
wait_for 1 SELECT @@GLOBAL.super_read_only=1;
|
|
wait_for 1 SELECT @@GLOBAL.read_only=1;
|
|
noquiet;
|
|
SET GLOBAL read_only= FALSE;
|
|
query_result;
|
|
-->endmacro
|
|
|
|
|
|
-->macro GR_start_applier_sql_thread
|
|
noquery_result;
|
|
START SLAVE SQL_THREAD FOR CHANNEL "group_replication_applier";
|
|
quiet;
|
|
wait_for 1 SELECT service_state="ON"
|
|
FROM performance_schema.replication_applier_status
|
|
WHERE channel_name="group_replication_applier";
|
|
noquiet;
|
|
query_result;
|
|
-->endmacro
|
|
|
|
|
|
-->macro GR_stop_applier_sql_thread
|
|
noquery_result;
|
|
STOP SLAVE SQL_THREAD FOR CHANNEL "group_replication_applier";
|
|
quiet;
|
|
wait_for 1 SELECT service_state="OFF"
|
|
FROM performance_schema.replication_applier_status
|
|
WHERE channel_name="group_replication_applier";
|
|
noquiet;
|
|
query_result;
|
|
-->endmacro
|
|
|
|
|
|
-->macro GR_wait_for_number_of_members %EXPECTED_NUMBER_OF_MEMBERS%
|
|
echo [waiting for '%EXPECTED_NUMBER_OF_MEMBERS%' members];
|
|
quiet;
|
|
noquery_result;
|
|
wait_for %EXPECTED_NUMBER_OF_MEMBERS% SELECT COUNT(*)
|
|
FROM performance_schema.replication_group_members;
|
|
noquiet;
|
|
query_result;
|
|
-->endmacro
|
|
|
|
|
|
-->macro GR_wait_for_member_state %STATE%
|
|
echo [waiting for member_state to be equal '%STATE%'];
|
|
quiet;
|
|
noquery_result;
|
|
wait_for 1 SELECT COUNT(*)=1 FROM performance_schema.replication_group_members
|
|
WHERE member_id=@@SERVER_UUID AND
|
|
member_state="%STATE%";
|
|
stmtsql SELECT COUNT(*)=1
|
|
FROM performance_schema.replication_group_members group_members
|
|
WHERE group_members.member_id= @@SERVER_UUID
|
|
AND group_members.member_state="ONLINE"
|
|
AND group_members.member_role = "PRIMARY"
|
|
AND group_members.member_version =
|
|
(SELECT member_version FROM performance_schema.replication_group_members
|
|
ORDER BY member_version ASC LIMIT 1);
|
|
recvtovar %IS_PRIMARY%;
|
|
|
|
## Workaround for missing 'if' statement in mysqlxtest syntax.
|
|
wait_for 1 SELECT @@GLOBAL.read_only = '0' OR !%IS_PRIMARY%;
|
|
noquiet;
|
|
query_result;
|
|
-->endmacro
|
|
|
|
|
|
-->macro GR_wait_for_uuid_and_member_state %UUID% %STATE%
|
|
echo [waiting for concrete member with member_state to be equal '%STATE%'];
|
|
quiet;
|
|
noquery_result;
|
|
wait_for 1 SELECT COUNT(*)=1 FROM performance_schema.replication_group_members
|
|
WHERE member_id='%UUID%' AND
|
|
member_state="%STATE%";
|
|
stmtsql SELECT COUNT(*)=1
|
|
FROM performance_schema.replication_group_members group_members
|
|
WHERE group_members.member_id like '%UUID%'
|
|
AND group_members.member_state like "%STATE%"
|
|
AND group_members.member_role = "PRIMARY"
|
|
AND group_members.member_version =
|
|
(SELECT member_version FROM performance_schema.replication_group_members
|
|
ORDER BY member_version ASC LIMIT 1);
|
|
recvtovar %IS_PRIMARY%;
|
|
|
|
## Workaround for missing 'if' statement in mysqlxtest syntax.
|
|
wait_for 1 SELECT @@GLOBAL.read_only = '0' OR !%IS_PRIMARY%;
|
|
noquiet;
|
|
query_result;
|
|
-->endmacro
|
|
|