diff --git a/doc/examples/hooks/ethers b/doc/examples/hooks/ethers index 469af6b25a0b409ee8ab9cc52fd3c6e2de87f113..8725f0377ca10713e0132f6b4fff4af8fc5aa492 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 || exit 1 + trap "$LOCKFILE_REMOVE -l $LOCKFILE" EXIT } update_ethers_from_new() {