ack, review only/Thanks HansN
On 1/21/19 04:52, Gary Lee wrote:
> The 'watch' command does not return if the etcd server goes down.
> We need to poll the etcd server to properly check we still have
> connectivity to the etcd server.
> ---
> src/osaf/consensus/plugins/etcd3.plugin | 50
> ++++++++++++++++++++++++++-------
> 1 file changed, 40 insertions(+), 10 deletions(-)
>
> diff --git a/src/osaf/consensus/plugins/etcd3.plugin
> b/src/osaf/consensus/plugins/etcd3.plugin
> index b3814c9..4998df0 100644
> --- a/src/osaf/consensus/plugins/etcd3.plugin
> +++ b/src/osaf/consensus/plugins/etcd3.plugin
> @@ -17,9 +17,12 @@
> # backward compatible. This plugin may need to be adapted.
>
> readonly keyname="opensaf_consensus_lock"
> +readonly takeover_request="takeover_request"
> +readonly node_name_file="/etc/opensaf/node_name"
> readonly directory="/opensaf/"
> readonly etcd_options=""
> -readonly etcd_timeout="10s"
> +readonly etcd_timeout="3s"
> +readonly heartbeat_interval=2
>
> export ETCDCTL_API=3
>
> @@ -29,7 +32,8 @@ export ETCDCTL_API=3
> # $1 - <key>
> # returns:
> # 0 - success, <value> is echoed to stdout
> -# non-zero - failure
> +# 1 - invalid param
> +# other - failure
> get() {
> readonly key="$1"
>
> @@ -51,7 +55,7 @@ get() {
> return 1
> fi
> else
> - return 1
> + return 2
> fi
> }
>
> @@ -101,7 +105,8 @@ setkey() {
> # returns:
> # 0 - success
> # 1 - already exists
> -# 2 or above - other failure
> +# 2 - invalid param
> +# 3 or above - other failure
> create_key() {
> readonly key="$1"
> readonly value="$2"
> @@ -114,7 +119,7 @@ create_key() {
> lease_id=$(echo $output | awk '{print $2}')
> lease_param="--lease="$lease_id""
> else
> - return 2
> + return 3
> fi
> else
> lease_param=""
> @@ -135,7 +140,7 @@ create_key() {
> then
> return 1
> else
> - return 2
> + return 3
> fi
> }
>
> @@ -149,6 +154,7 @@ create_key() {
> # $4 - <timeout>
> # returns:
> # 0 - success
> +# 1 - invalid param
> # non-zero - failure
> setkey_match_prev() {
> readonly key="$1"
> @@ -326,10 +332,34 @@ unlock() {
> # non-zero - failure
> watch() {
> readonly watch_key="$1"
> - etcdctl $etcd_options --dial-timeout $etcd_timeout \
> - watch "$directory$watch_key" | grep -m0 \"\" 2>&1
> - get "$watch_key"
> - return 0
> +
> + # get baseline
> + orig_value=$(get "$watch_key")
> + result=$?
> +
> + if [ "$result" -le "1" ]; then
> + while true
> + do
> + sleep $heartbeat_interval
> + current_value=$(get "$watch_key")
> + result=$?
> + if [ "$result" -gt "1" ]; then
> + # etcd down?
> + if [ "$watch_key" == "$takeover_request" ]; then
> + hostname=`cat $node_name_file`
> + echo "$hostname SC-0 10000000 UNDEFINED"
> + return 0
> + else
> + return 1
> + fi
> + elif [ "$orig_value" != "$current_value" ]; then
> + echo $current_value
> + return 0
> + fi
> + done
> + fi
> +
> + return 1
> }
>
> # argument parsing
_______________________________________________
Opensaf-devel mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/opensaf-devel