polardbxengine/mysql-test/suite/x/t/macros/group_replication.macro

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