--- 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 Opensaf-devel@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/opensaf-devel