Rather than writing our own locking routing, use the one implemented by the lockfile-create program.
Signed-off-by: Guido Trotter <[email protected]> --- doc/examples/hooks/ethers | 22 ++++++++-------------- 1 files changed, 8 insertions(+), 14 deletions(-) diff --git a/doc/examples/hooks/ethers b/doc/examples/hooks/ethers index 469af6b..962a439 100755 --- a/doc/examples/hooks/ethers +++ b/doc/examples/hooks/ethers @@ -35,9 +35,13 @@ # bridge to /etc/ethers. TARGET_BRIDGE="br0" DAEMON_PID_FILE="/var/run/dnsmasq.pid" + +# In order to handle concurrent execution of this lock, we use the $LOCKFILE. +# LOCKFILE_CREATE and LOCKFILE_REMOVE are the path names for the lockfile-progs +# programs which we use as helpers. LOCKFILE="/var/lock/ganeti_ethers.lock" -LOCKTIMEOUT=10 -LOCKSLEEP=2 +LOCKFILE_CREATE="/usr/bin/lockfile-create" +LOCKFILE_REMOVE="/usr/bin/lockfile-remove" hooks_path=$GANETI_HOOKS_PATH [ -n "$hooks_path" ] || exit 1 @@ -46,18 +50,8 @@ instance=$GANETI_INSTANCE_NAME nic_count=$GANETI_INSTANCE_NIC_COUNT acquire_lockfile() { - NOW=$(date +%s) - TIMEOUT=$(($NOW + $LOCKTIMEOUT)) - while ! ( set -o noclobber; echo "$$" > $LOCKFILE) 2> /dev/null ; do - NOW=$(date +%s) - if [ $NOW -ge $TIMEOUT ]; then - logger -s "Cannot acquire lockfile for ethers update, giving up" - exit 1 - fi - logger -s "Cannot acquire lockfile for ethers update, waiting" - sleep $LOCKSLEEP - done - trap "rm -f $LOCKFILE" EXIT + $LOCKFILE_CREATE -l $LOCKFILE + trap "$LOCKFILE_REMOVE -l $LOCKFILE" EXIT } update_ethers_from_new() { -- 1.5.6.5
