---
 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

Reply via email to