example ethers hook: use lockfile-progs
authorGuido Trotter <ultrotter@google.com>
Wed, 5 Aug 2009 23:02:17 +0000 (00:02 +0100)
committerGuido Trotter <ultrotter@google.com>
Thu, 6 Aug 2009 08:12:22 +0000 (09:12 +0100)
Rather than writing our own locking routing, use the one implemented by
the lockfile-create program.

Signed-off-by: Guido Trotter <ultrotter@google.com>
Reviewed-by: Iustin Pop <iustin@google.com>

doc/examples/hooks/ethers

index 469af6b..8725f03 100755 (executable)
 # 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() {