Skip to content

Commit 0b41a4a

Browse files
Merge pull request #337 from dciabrin/OSPRH-17604
Rework retry/timeout defaults to ensure fast service failover
2 parents a09f892 + 09df39e commit 0b41a4a

File tree

9 files changed

+46
-40
lines changed

9 files changed

+46
-40
lines changed

templates/galera/bin/mysql_wsrep_notify.sh

Lines changed: 12 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -11,9 +11,14 @@ NAMESPACE=$(cat ${SERVICEACCOUNT}/namespace)
1111
TOKEN=$(cat ${SERVICEACCOUNT}/token)
1212
CACERT=${SERVICEACCOUNT}/ca.crt
1313

14-
# Retry config
15-
RETRIES=6
16-
WAIT=1
14+
# OSPRH-17604: use default timeout and retry parameters for fast failover
15+
# default parameters for curl calls to the API server
16+
: ${WSREP_NOTIFY_CURL_CONNECT_TIMEOUT:=5}
17+
: ${WSREP_NOTIFY_CURL_MAX_TIME:=30}
18+
CURL="curl --connect-timeout ${WSREP_NOTIFY_CURL_CONNECT_TIMEOUT} --max-time ${WSREP_NOTIFY_CURL_MAX_TIME}"
19+
# defaults parameters for retry on error
20+
: ${WSREP_NOTIFY_RETRIES:=30}
21+
: ${WSREP_NOTIFY_RETRY_WAIT:=1}
1722

1823

1924
##
@@ -66,7 +71,7 @@ function api_server {
6671
request="$request -d @-"
6772
fi
6873
local output
69-
output=$(curl -s --cacert ${CACERT} --header "Content-Type:application/json" --header "Authorization: Bearer ${TOKEN}" --request $request ${APISERVER}/api/v1/namespaces/${NAMESPACE}/services/${service})
74+
output=$(${CURL} -s --cacert ${CACERT} --header "Content-Type:application/json" --header "Authorization: Bearer ${TOKEN}" --request $request ${APISERVER}/api/v1/namespaces/${NAMESPACE}/services/${service})
7075

7176
local rc=$?
7277
if [ $rc != 0 ]; then
@@ -109,8 +114,8 @@ function parse_output {
109114
# Generic retry logic for an action function
110115
function retry {
111116
local action=$1
112-
local retries=$RETRIES
113-
local wait=$WAIT
117+
local retries=$WSREP_NOTIFY_RETRIES
118+
local wait=$WSREP_NOTIFY_RETRY_WAIT
114119
local rc=1
115120

116121
$action
@@ -132,7 +137,7 @@ function retry {
132137
mysql_probe_state reprobe
133138
done
134139
if [ $rc -ne 0 ]; then
135-
log_error "Could not run action after ${RETRIES} tries. Stop retrying."
140+
log_error "Could not run action after ${WSREP_NOTIFY_RETRIES} tries. Stop retrying."
136141
fi
137142
return $rc
138143
}

tests/chainsaw/tests/service/chainsaw-test.yaml

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -74,6 +74,11 @@ spec:
7474
check:
7575
# we dont want "ERROR 1047 (08S01) at line 495: WSREP has not yet prepared node for application use"
7676
(find_first($stdout,'(08S01)') == NULL): true
77+
catch: &catch_logs
78+
- script:
79+
content: |
80+
# get full logs for all pods except copy logs from kolla start
81+
oc logs -n $NAMESPACE --prefix=true --tail=-1 -l galera/name=openstack | grep -v -e ' INFO:'
7782
7883
- name: Service failover on pod crash
7984
description: Check that service is failing over when the current endpoint pod crashes
@@ -97,6 +102,7 @@ spec:
97102
check:
98103
($stdout != $endpoint): true
99104
- script: *no_wsrep_in_failover_check
105+
catch: *catch_logs
100106

101107
- name: No failover on random pod restart
102108
description: Check that service is not impacted when a pod that is not the current endpoint is stopped
@@ -114,3 +120,4 @@ spec:
114120
check:
115121
($stdout == $endpoint): true
116122
- script: *no_wsrep_in_failover_check
123+
catch: *catch_logs

tests/kuttl/common/assert_sample_deployment.yaml

Lines changed: 0 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -130,29 +130,3 @@ apiVersion: v1
130130
kind: ConfigMap
131131
metadata:
132132
name: openstack-config-data
133-
---
134-
apiVersion: kuttl.dev/v1beta1
135-
kind: TestAssert
136-
commands:
137-
- script: |
138-
# when using image digests the containerImage URLs are SHA's so we verify them with a script
139-
tupleTemplate='{{ range (index .spec.template.spec.containers 1).env }}{{ .name }}{{ "#" }}{{ .value}}{{"\n"}}{{ end }}'
140-
imageTuples=$(oc get -n openstack-operators deployment mariadb-operator-controller-manager -o go-template="$tupleTemplate")
141-
# format of imageTuple is: RELATED_IMAGE_MARIADB_<service>#<image URL with SHA> separated by newlines
142-
for ITEM in $(echo $imageTuples); do
143-
# it is an image
144-
if echo $ITEM | grep 'RELATED_IMAGE' &> /dev/null; then
145-
NAME=$(echo $ITEM | sed -e 's|^RELATED_IMAGE_MARIADB_\([^_]*\)_.*|\1|')
146-
IMG_FROM_ENV=$(echo $ITEM | sed -e 's|^.*#\(.*\)|\1|')
147-
template='{{ (index .spec.template.spec.containers 0).image }}'
148-
case $NAME in
149-
IMAGE)
150-
STATEFUL_SET_IMG=$(oc get -n $NAMESPACE statefulset openstack-galera -o go-template="$template")
151-
;;
152-
esac
153-
if [ "$STATEFUL_SET_IMG" != "$IMG_FROM_ENV" ]; then
154-
echo "$NAME image does not equal $VALUE"
155-
exit 1
156-
fi
157-
fi
158-
done

tests/kuttl/tests/account_create/05-assert.yaml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ kind: TestAssert
44
commands:
55
- script: |
66
set -e
7-
${MARIADB_KUTTL_DIR:-tests/kuttl/tests}/../common/scripts/check_db_account.sh openstack-galera-0 kuttldb_accounttest someuser dbsecret1
7+
../../common/scripts/check_db_account.sh openstack-galera-0 kuttldb_accounttest someuser dbsecret1
88
# ensure db users are configured without TLS connection restriction
99
oc rsh -n ${NAMESPACE} -c galera openstack-galera-0 /bin/sh -c 'mysql -uroot -p${DB_ROOT_PASSWORD} -e "show grants for \`someuser\`@\`%\`;"' | grep 'GRANT USAGE' | grep -v 'REQUIRE SSL'
1010
---

tests/kuttl/tests/account_create/07-assert.yaml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,4 +3,4 @@ apiVersion: kuttl.dev/v1beta1
33
kind: TestAssert
44
commands:
55
- script: |
6-
${MARIADB_KUTTL_DIR:-tests/kuttl/tests}/../common/scripts/check_db_account.sh openstack-galera-0 kuttldb_accounttest someuser dbsecret1 --reverse
6+
../../common/scripts/check_db_account.sh openstack-galera-0 kuttldb_accounttest someuser dbsecret1 --reverse

tests/kuttl/tests/database_create/03-assert.yaml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -13,8 +13,8 @@ commands:
1313
# for legacy secret non-present, test that a mariadb username was *not* made
1414
- script: |
1515
set -euxo pipefail
16-
${MARIADB_KUTTL_DIR:-tests/kuttl/tests}/../common/scripts/check_db_account.sh openstack-galera-0 kuttldb_utf8 kuttldb_utf_8 12345678 --reverse
16+
../../common/scripts/check_db_account.sh openstack-galera-0 kuttldb_utf8 kuttldb_utf_8 12345678 --reverse
1717
# for legacy secret present, test that a mariadb username was made
1818
- script: |
1919
set -euxo pipefail
20-
${MARIADB_KUTTL_DIR:-tests/kuttl/tests}/../common/scripts/check_db_account.sh openstack-galera-0 kuttldb_legacy_secret kuttldb_legacy_secret dbsecret1
20+
../../common/scripts/check_db_account.sh openstack-galera-0 kuttldb_legacy_secret kuttldb_legacy_secret dbsecret1
Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
apiVersion: kuttl.dev/v1beta1
2+
kind: TestStep
3+
delete:
4+
- apiVersion: mariadb.openstack.org/v1beta1
5+
kind: Galera
6+
name: openstack
7+
- apiVersion: v1
8+
kind: Secret
9+
name: kuttl-galera-tls
10+
commands:
11+
- script: |
12+
oc delete -n $NAMESPACE pvc mysql-db-openstack-galera-0 mysql-db-openstack-galera-1 mysql-db-openstack-galera-2
13+
for i in `oc get pv | awk '/mysql-db.*galera/ {print $1}'`; do oc patch pv $i -p '{"spec":{"claimRef": null}}'; done

tests/kuttl/tests/galera_deploy_tls/03-teardown.yaml

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -7,9 +7,6 @@ delete:
77
- apiVersion: v1
88
kind: Secret
99
name: kuttl-galera-tls
10-
- apiVersion: v1
11-
kind: Secret
12-
name: kuttldb-secret
1310
commands:
1411
- script: |
1512
oc delete -n $NAMESPACE pvc mysql-db-openstack-galera-0 mysql-db-openstack-galera-1 mysql-db-openstack-galera-2
Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
apiVersion: kuttl.dev/v1beta1
2+
kind: TestStep
3+
delete:
4+
- apiVersion: mariadb.openstack.org/v1beta1
5+
kind: Galera
6+
name: openstack
7+
commands:
8+
- script: |
9+
oc delete -n $NAMESPACE pvc mysql-db-openstack-galera-0 mysql-db-openstack-galera-1 mysql-db-openstack-galera-2
10+
for i in `oc get pv | awk '/mysql-db.*galera/ {print $1}'`; do oc patch pv $i -p '{"spec":{"claimRef": null}}'; done

0 commit comments

Comments
 (0)