---
src/osaf/consensus/plugins/etcd3.plugin | 48 ++++++++++++++-----------
1 file changed, 27 insertions(+), 21 deletions(-)
diff --git a/src/osaf/consensus/plugins/etcd3.plugin
b/src/osaf/consensus/plugins/etcd3.plugin
index 6252eedcb..11b426e19 100644
--- a/src/osaf/consensus/plugins/etcd3.plugin
+++ b/src/osaf/consensus/plugins/etcd3.plugin
@@ -33,30 +33,36 @@ export ETCDCTL_API=3
# returns:
# 0 - success, <value> is echoed to stdout
# 1 - invalid param
+# 2 - context deadline exceeded
# other - failure
get() {
readonly key="$1"
- if output=$(etcdctl $etcd_options --dial-timeout $etcd_timeout get
"$directory$key" 2>&1)
- then
- key_=$(echo "$output" | tail -n2 | head -n1)
- value=$(echo "$output" | tail -n1)
- if [ "$key_" = "$directory$key" ]; then
- if [ "$key_" = "$value" ]; then
- # blank value returned
- echo ""
- return 0
+ while true; do
+ if output=$(etcdctl $etcd_options --dial-timeout $etcd_timeout get
"$directory$key" 2>&1)
+ then
+ key_=$(echo "$output" | tail -n2 | head -n1)
+ value=$(echo "$output" | tail -n1)
+ if [ "$key_" = "$directory$key" ]; then
+ if [ "$key_" = "$value" ]; then
+ # blank value returned
+ echo ""
+ return 0
+ else
+ echo "$value"
+ return 0
+ fi
else
- echo "$value"
- return 0
+ # key missing!
+ return 1
fi
- else
- # key missing!
- return 1
+ elif echo $etcd_options | grep -q "endpoints=localhost" &&
+ echo $output | grep -q "Error: context deadline exceeded"; then
+ return 2
fi
- else
- return 2
- fi
+ break
+ done
+ return 3
}
# set
@@ -136,7 +142,7 @@ create_key() {
return 0
fi
- if output=$(etcdctl $etcd_options --dial-timeout $etcd_timeout get
"$directory$key" | tail -n1)
+ if output=$(get $key)
then
return 1
else
@@ -243,7 +249,7 @@ lock() {
return 0
fi
- current_owner=$(etcdctl $etcd_options --dial-timeout $etcd_timeout get
"$directory$keyname" | tail -n1)
+ current_owner=$(get $keyname)
# see if we already hold the lock
if [ "$current_owner" = "$owner" ]; then
return 0
@@ -354,7 +360,7 @@ watch() {
result=$?
if [ "$result" -gt 1 ]; then
# etcd down?
- if [ "$watch_key" == "$takeover_request" ]; then
+ if [ "$watch_key" == "$takeover_request" ] && [ "$result" -ne 2 ]; then
hostname=`cat $node_name_file`
echo "$hostname SC-0 10000000 UNDEFINED"
return 0
@@ -376,7 +382,7 @@ watch() {
done
else
# etcd down?
- if [ "$watch_key" == "$takeover_request" ]; then
+ if [ "$watch_key" == "$takeover_request" ] && [ "$result" -ne 2 ]; then
hostname=`cat $node_name_file`
echo "$hostname SC-0 10000000 UNDEFINED"
return 0
--
2.17.1
_______________________________________________
Opensaf-devel mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/opensaf-devel