[devel] [PATCH 1/5] osaf: extend API to include a create key and an enhanced set key function [#2795]
- add create_key function (fails if key already exists) - add setkey_match_prev function (set value if previous value matches) - add missing quotes - add etcd3.plugin --- src/osaf/consensus/plugins/etcd.plugin | 86 +++- src/osaf/consensus/plugins/etcd3.plugin | 366 +++ src/osaf/consensus/plugins/sample.plugin | 67 +- 3 files changed, 501 insertions(+), 18 deletions(-) create mode 100644 src/osaf/consensus/plugins/etcd3.plugin diff --git a/src/osaf/consensus/plugins/etcd.plugin b/src/osaf/consensus/plugins/etcd.plugin index 586059b32..6ed85ac92 100644 --- a/src/osaf/consensus/plugins/etcd.plugin +++ b/src/osaf/consensus/plugins/etcd.plugin @@ -29,7 +29,7 @@ readonly etcd_timeout="5s" # 0 - success, is echoed to stdout # non-zero - failure get() { - readonly key=$1 + readonly key="$1" if value=$(etcdctl $etcd_options --timeout $etcd_timeout get "$directory$key" 2>&1) then @@ -49,8 +49,8 @@ get() { # 0 - success # non-zero - failure setkey() { - readonly key=$1 - readonly value=$2 + readonly key="$1" + readonly value="$2" if etcdctl $etcd_options --timeout $etcd_timeout set "$directory$key" \ "$value" >/dev/null @@ -61,6 +61,58 @@ setkey() { fi } +# create +# create and set to in key-value store. Fails if the key +# already exists +# params: +# $1 - +# $2 - +# returns: +# 0 - success +# 1 - already exists +# 2 or above - other failure +create_key() { + readonly key="$1" + readonly value="$2" + + if output=$(etcdctl $etcd_options --timeout $etcd_timeout mk "$directory$key" \ +"$value" 2>&1) + then +return 0 + else +if echo $output | grep "already exists" +then + return 1 +fi + fi + + return 2 +} + +# set +# set to in key-value store, if the existing value matches +# +# params: +# $1 - +# $2 - +# $3 - +# returns: +# 0 - success +# non-zero - failure +setkey_match_prev() { + readonly key="$1" + readonly value="$2" + readonly prev="$3" + + if etcdctl $etcd_options --timeout $etcd_timeout set "$directory$key" \ +"$value" --swap-with-value "$prev" >/dev/null + then +return 0 + else +return 1 + fi +} + # erase # erase in key-value store # params: @@ -69,7 +121,7 @@ setkey() { # 0 - success # non-zero - failure erase() { - readonly key=$1 + readonly key="$1" if etcdctl $etcd_options --timeout $etcd_timeout \ rm "$directory$key" >/dev/null 2>&1 @@ -90,8 +142,8 @@ erase() { # 2 or above - other failure # NOTE: if lock is already acquired by , then timeout is extended lock() { - readonly owner=$1 - readonly timeout=$2 + readonly owner="$1" + readonly timeout="$2" if etcdctl $etcd_options --timeout $etcd_timeout \ mk "$directory$keyname" "$owner" \ @@ -145,7 +197,7 @@ lock_owner() { # 2 or above - other failure # unlock() { - readonly owner=$1 + readonly owner="$1" readonly forced=${2:-false} if [ "$forced" = false ]; then @@ -185,7 +237,7 @@ unlock() { # 0 - success, is echoed to stdout # non-zero - failure watch() { - readonly key=$1 + readonly key="$1" if value=$(etcdctl $etcd_options --timeout $etcd_timeout \ watch "$directory$key" 2>&1) @@ -216,6 +268,22 @@ case "$1" in setkey "$2" "$3" exit $? ;; + set_if_prev) +if [ "$#" -ne 4 ]; then + echo "Usage: $0 set " + exit 1 +fi +setkey_match_prev "$2" "$3" "$4" +exit $? +;; + create) +if [ "$#" -ne 3 ]; then + echo "Usage: $0 create " + exit 1 +fi +create_key "$2" "$3" +exit $? +;; erase) if [ "$#" -ne 2 ]; then echo "Usage: $0 erase " @@ -269,7 +337,7 @@ case "$1" in exit $? ;; *) -echo "Usage: $0 {get|set|erase|lock|unlock|lock_owner|watch|watch_lock}" +echo "Usage: $0 {get|set|create|set_if_prev|erase|lock|unlock|lock_owner|watch|watch_lock}" ;; esac diff --git a/src/osaf/consensus/plugins/etcd3.plugin b/src/osaf/consensus/plugins/etcd3.plugin new file mode 100644 index 0..451440567 --- /dev/null +++ b/src/osaf/consensus/plugins/etcd3.plugin @@ -0,0 +1,366 @@ +#!/usr/bin/env bash +# -*- OpenSAF -*- +# +# (C) Copyright 2018 Ericsson AB 2018 - All Rights Reserved. +# +# This program is distributed in the hope that it will be useful, but +# WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY +# or FITNESS FOR A PARTICULAR PURPOSE. This file and program are licensed +# under the GNU Lesser General Public License Version 2.1, February 1999. +# The complete license can be accessed from the following location: +# http://opensource.org/licenses/lgpl-license.php +# See the Copying file included with the OpenSAF distribution for full +# licensing terms. +# +# Please note: this API is subject to change and may be modified +# in a future version of OpenSAF. Future API versions may not be +# backward compatible. This plugin may need to be adapted. + +readonly
[devel] [PATCH 1/5] osaf: extend API to include a create key and an enhanced set key function [#2795]
- add create_key function (fails if key already exists) - add setkey_match_prev function (set value if previous value matches) - add missing quotes - add etcd3.plugin --- src/osaf/consensus/plugins/etcd.plugin | 86 +++- src/osaf/consensus/plugins/etcd3.plugin | 355 +++ src/osaf/consensus/plugins/sample.plugin | 67 +- 3 files changed, 490 insertions(+), 18 deletions(-) create mode 100644 src/osaf/consensus/plugins/etcd3.plugin diff --git a/src/osaf/consensus/plugins/etcd.plugin b/src/osaf/consensus/plugins/etcd.plugin index 586059b32..6ed85ac92 100644 --- a/src/osaf/consensus/plugins/etcd.plugin +++ b/src/osaf/consensus/plugins/etcd.plugin @@ -29,7 +29,7 @@ readonly etcd_timeout="5s" # 0 - success, is echoed to stdout # non-zero - failure get() { - readonly key=$1 + readonly key="$1" if value=$(etcdctl $etcd_options --timeout $etcd_timeout get "$directory$key" 2>&1) then @@ -49,8 +49,8 @@ get() { # 0 - success # non-zero - failure setkey() { - readonly key=$1 - readonly value=$2 + readonly key="$1" + readonly value="$2" if etcdctl $etcd_options --timeout $etcd_timeout set "$directory$key" \ "$value" >/dev/null @@ -61,6 +61,58 @@ setkey() { fi } +# create +# create and set to in key-value store. Fails if the key +# already exists +# params: +# $1 - +# $2 - +# returns: +# 0 - success +# 1 - already exists +# 2 or above - other failure +create_key() { + readonly key="$1" + readonly value="$2" + + if output=$(etcdctl $etcd_options --timeout $etcd_timeout mk "$directory$key" \ +"$value" 2>&1) + then +return 0 + else +if echo $output | grep "already exists" +then + return 1 +fi + fi + + return 2 +} + +# set +# set to in key-value store, if the existing value matches +# +# params: +# $1 - +# $2 - +# $3 - +# returns: +# 0 - success +# non-zero - failure +setkey_match_prev() { + readonly key="$1" + readonly value="$2" + readonly prev="$3" + + if etcdctl $etcd_options --timeout $etcd_timeout set "$directory$key" \ +"$value" --swap-with-value "$prev" >/dev/null + then +return 0 + else +return 1 + fi +} + # erase # erase in key-value store # params: @@ -69,7 +121,7 @@ setkey() { # 0 - success # non-zero - failure erase() { - readonly key=$1 + readonly key="$1" if etcdctl $etcd_options --timeout $etcd_timeout \ rm "$directory$key" >/dev/null 2>&1 @@ -90,8 +142,8 @@ erase() { # 2 or above - other failure # NOTE: if lock is already acquired by , then timeout is extended lock() { - readonly owner=$1 - readonly timeout=$2 + readonly owner="$1" + readonly timeout="$2" if etcdctl $etcd_options --timeout $etcd_timeout \ mk "$directory$keyname" "$owner" \ @@ -145,7 +197,7 @@ lock_owner() { # 2 or above - other failure # unlock() { - readonly owner=$1 + readonly owner="$1" readonly forced=${2:-false} if [ "$forced" = false ]; then @@ -185,7 +237,7 @@ unlock() { # 0 - success, is echoed to stdout # non-zero - failure watch() { - readonly key=$1 + readonly key="$1" if value=$(etcdctl $etcd_options --timeout $etcd_timeout \ watch "$directory$key" 2>&1) @@ -216,6 +268,22 @@ case "$1" in setkey "$2" "$3" exit $? ;; + set_if_prev) +if [ "$#" -ne 4 ]; then + echo "Usage: $0 set " + exit 1 +fi +setkey_match_prev "$2" "$3" "$4" +exit $? +;; + create) +if [ "$#" -ne 3 ]; then + echo "Usage: $0 create " + exit 1 +fi +create_key "$2" "$3" +exit $? +;; erase) if [ "$#" -ne 2 ]; then echo "Usage: $0 erase " @@ -269,7 +337,7 @@ case "$1" in exit $? ;; *) -echo "Usage: $0 {get|set|erase|lock|unlock|lock_owner|watch|watch_lock}" +echo "Usage: $0 {get|set|create|set_if_prev|erase|lock|unlock|lock_owner|watch|watch_lock}" ;; esac diff --git a/src/osaf/consensus/plugins/etcd3.plugin b/src/osaf/consensus/plugins/etcd3.plugin new file mode 100644 index 0..df05be540 --- /dev/null +++ b/src/osaf/consensus/plugins/etcd3.plugin @@ -0,0 +1,355 @@ +#!/usr/bin/env bash +# -*- OpenSAF -*- +# +# (C) Copyright 2018 Ericsson AB 2018 - All Rights Reserved. +# +# This program is distributed in the hope that it will be useful, but +# WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY +# or FITNESS FOR A PARTICULAR PURPOSE. This file and program are licensed +# under the GNU Lesser General Public License Version 2.1, February 1999. +# The complete license can be accessed from the following location: +# http://opensource.org/licenses/lgpl-license.php +# See the Copying file included with the OpenSAF distribution for full +# licensing terms. +# +# Please note: this API is subject to change and may be modified +# in a future version of OpenSAF. Future API versions may not be +# backward compatible. This plugin may need to be adapted. + +readonly
[devel] [PATCH 1/5] osaf: extend API to include a create key and an enhanced set key function [#2795]
- add create_key function (fails if key already exists) - add setkey_match_prev function (set value if previous value matches) - add missing quotes --- src/osaf/consensus/plugins/etcd.plugin | 86 ++ 1 file changed, 77 insertions(+), 9 deletions(-) diff --git a/src/osaf/consensus/plugins/etcd.plugin b/src/osaf/consensus/plugins/etcd.plugin index 586059b32..6ed85ac92 100644 --- a/src/osaf/consensus/plugins/etcd.plugin +++ b/src/osaf/consensus/plugins/etcd.plugin @@ -29,7 +29,7 @@ readonly etcd_timeout="5s" # 0 - success, is echoed to stdout # non-zero - failure get() { - readonly key=$1 + readonly key="$1" if value=$(etcdctl $etcd_options --timeout $etcd_timeout get "$directory$key" 2>&1) then @@ -49,8 +49,8 @@ get() { # 0 - success # non-zero - failure setkey() { - readonly key=$1 - readonly value=$2 + readonly key="$1" + readonly value="$2" if etcdctl $etcd_options --timeout $etcd_timeout set "$directory$key" \ "$value" >/dev/null @@ -61,6 +61,58 @@ setkey() { fi } +# create +# create and set to in key-value store. Fails if the key +# already exists +# params: +# $1 - +# $2 - +# returns: +# 0 - success +# 1 - already exists +# 2 or above - other failure +create_key() { + readonly key="$1" + readonly value="$2" + + if output=$(etcdctl $etcd_options --timeout $etcd_timeout mk "$directory$key" \ +"$value" 2>&1) + then +return 0 + else +if echo $output | grep "already exists" +then + return 1 +fi + fi + + return 2 +} + +# set +# set to in key-value store, if the existing value matches +# +# params: +# $1 - +# $2 - +# $3 - +# returns: +# 0 - success +# non-zero - failure +setkey_match_prev() { + readonly key="$1" + readonly value="$2" + readonly prev="$3" + + if etcdctl $etcd_options --timeout $etcd_timeout set "$directory$key" \ +"$value" --swap-with-value "$prev" >/dev/null + then +return 0 + else +return 1 + fi +} + # erase # erase in key-value store # params: @@ -69,7 +121,7 @@ setkey() { # 0 - success # non-zero - failure erase() { - readonly key=$1 + readonly key="$1" if etcdctl $etcd_options --timeout $etcd_timeout \ rm "$directory$key" >/dev/null 2>&1 @@ -90,8 +142,8 @@ erase() { # 2 or above - other failure # NOTE: if lock is already acquired by , then timeout is extended lock() { - readonly owner=$1 - readonly timeout=$2 + readonly owner="$1" + readonly timeout="$2" if etcdctl $etcd_options --timeout $etcd_timeout \ mk "$directory$keyname" "$owner" \ @@ -145,7 +197,7 @@ lock_owner() { # 2 or above - other failure # unlock() { - readonly owner=$1 + readonly owner="$1" readonly forced=${2:-false} if [ "$forced" = false ]; then @@ -185,7 +237,7 @@ unlock() { # 0 - success, is echoed to stdout # non-zero - failure watch() { - readonly key=$1 + readonly key="$1" if value=$(etcdctl $etcd_options --timeout $etcd_timeout \ watch "$directory$key" 2>&1) @@ -216,6 +268,22 @@ case "$1" in setkey "$2" "$3" exit $? ;; + set_if_prev) +if [ "$#" -ne 4 ]; then + echo "Usage: $0 set " + exit 1 +fi +setkey_match_prev "$2" "$3" "$4" +exit $? +;; + create) +if [ "$#" -ne 3 ]; then + echo "Usage: $0 create " + exit 1 +fi +create_key "$2" "$3" +exit $? +;; erase) if [ "$#" -ne 2 ]; then echo "Usage: $0 erase " @@ -269,7 +337,7 @@ case "$1" in exit $? ;; *) -echo "Usage: $0 {get|set|erase|lock|unlock|lock_owner|watch|watch_lock}" +echo "Usage: $0 {get|set|create|set_if_prev|erase|lock|unlock|lock_owner|watch|watch_lock}" ;; esac -- 2.14.1 -- Check out the vibrant tech community on one of the world's most engaging tech sites, Slashdot.org! http://sdm.link/slashdot ___ Opensaf-devel mailing list Opensaf-devel@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/opensaf-devel