33set +x
44set -o errexit
55
6+
7+ function info() {
8+ echo " [$( date +' %Y-%m-%d %H:%M:%S' ) ] $* "
9+ }
10+
11+ info " Start to leave FE member"
12+
613leader_host=" "
714leave_member_host=" "
815leave_member_port=" "
916leave_role=" "
10- helper_endpoints=" "
17+ # always use 0 pod FQDN as helper_endpoints
18+ helper_endpoints=$( echo " $POD_FQDN_LIST " | cut -d, -f1)
19+ helper_pod_name=$( echo " $helper_endpoints " | cut -d: -f1 | cut -d. -f1)
1120candidate_names=" "
1221
13- function info() {
14- echo " [$( date +' %Y-%m-%d %H:%M:%S' ) ] $* "
15- }
1622
1723# root@x-fe-0:/opt/starrocks# mysql -h 127.0.0.1 -P 9030 -e "show frontends"
1824# # +-----------------------------------------+------------------------------------------------------+-------------+----------+-----------+---------+--------------------+----------+----------+-----------+------+-------+-------------------+---------------------+---------------------+----------+--------+-----------------------------+------------------+
@@ -24,10 +30,23 @@ function info() {
2430# +-----------------------------------------+------------------------------------------------------+-------------+----------+-----------+---------+--------------------+----------+----------+-----------+------+-------+-------------------+---------------------+---------------------+----------+--------+-----------------------------+------------------+
2531
2632function show_frontends() {
27- mysql -N -B -h " ${FE_DISCOVERY_ADDR} " -P 9030 -u" ${DORIS_USER} " -p" ${DORIS_PASSWORD} " -e " show frontends"
33+ local retry_count=0
34+ local max_retries=20
35+ local retry_interval=6
36+ while (( retry_count < max_retries )) ; do
37+ if mysql -N -B -h " ${FE_DISCOVERY_ADDR} " -P 9030 -u" ${DORIS_USER} " -p" ${DORIS_PASSWORD} " -e " show frontends" ; then
38+ return 0
39+ fi
40+ retry_count=$(( retry_count + 1 ))
41+ info " Failed to execute 'show frontends', retrying in ${retry_interval} seconds... (${retry_count} /${max_retries} )" >&2
42+ sleep ${retry_interval}
43+ done
44+ info " Failed to execute 'show frontends' after ${max_retries} retries." >&2
45+ exit 1
2846}
2947
3048function switch_leader() {
49+ info " switch leader from ${leader_host} to ${candidate_names} , address:${helper_endpoints} "
3150 java -jar /opt/apache-doris/fe/lib/je-18.3.14-doris-SNAPSHOT.jar DbGroupAdmin -helperHosts " ${helper_endpoints} " -groupName PALO_JOURNAL_GROUP -transferMaster -force " ${candidate_names} " 5000
3251}
3352
@@ -50,24 +69,18 @@ while IFS= read -r line; do
5069 edit_log_port=$( echo " $line " | awk ' {print $3}' )
5170 role=$( echo " $line " | awk ' {print $8}' )
5271 is_master=$( echo " $line " | awk ' {print $9}' )
53- is_leaving=False
5472 if [[ ${ip} == ${KB_LEAVE_MEMBER_POD_NAME} * ]]; then
55- is_leaving=True
5673 leave_member_host=${ip}
5774 leave_member_port=${edit_log_port}
5875 leave_role=${role}
5976 fi
6077 if [ " ${is_master} " == " true" ]; then
6178 leader_host=${ip}
6279 fi
63- if [ " ${is_leaving} " == " False" ] && [ " ${role} " == " FOLLOWER" ]; then
64- if [ -n " ${helper_endpoints} " ]; then
65- helper_endpoints=${helper_endpoints} ,${ip} :${edit_log_port}
66- candidate_names=${candidate_names} ,${name}
67- else
68- helper_endpoints=${ip} :${edit_log_port}
69- candidate_names=${name}
70- fi
80+
81+ if [[ ${ip} == " ${helper_endpoints} " ]]; then
82+ candidate_names=${name}
83+ helper_endpoints=${ip} :${edit_log_port}
7184 fi
7285done <<< " $output"
7386
@@ -82,10 +95,11 @@ if [ -z "${leave_member_host}" ] || [ -z "${leave_member_port}" ]; then
8295 exit 0
8396fi
8497
85- # The leader will exit if lost it's leader role
86- if [[ ${leader_host} == ${KB_LEAVE_MEMBER_POD_NAME} * ]]; then
98+ if [[ ${KB_AGENT_POD_NAME} != ${helper_pod_name} ]]; then
8799 switch_leader
88100 wait_for_leader_switched
89101fi
90102
91103mysql -h " ${leader_host} " -u" ${DORIS_USER} " -p" ${DORIS_PASSWORD} " -P 9030 -e " alter system drop ${leave_role} '${leave_member_host} :${leave_member_port} ';"
104+
105+ info " leave member ${leave_member_host} :${leave_member_port} success"
0 commit comments