Skip to content

Instantly share code, notes, and snippets.

@RomanSaveljev
Last active November 25, 2015 12:33
Show Gist options
  • Save RomanSaveljev/7b244c2fa180a9e71282 to your computer and use it in GitHub Desktop.
Save RomanSaveljev/7b244c2fa180a9e71282 to your computer and use it in GitHub Desktop.
Exploring NFS file locking

Pre-requisites

  • NFSv4
  • Have all_squash in /etc/exports, like so:
/opt/vmlocks 10.0.1.38(rw,sync,all_squash) 10.0.1.244(rw,sync,all_squash)

Testing

  • Mount /opt/vmlocks under /mnt (lock option should be there by default)
  • Copy t.sh contents (see below)
  • Copy runner.sh contents (see below)
  • Run test sequence in different machines:
echo {1..50} | xargs -n 1 -P 2 flock -o /mnt/a ./t.sh
  • Keep it running for some time

Notes

  • There is a certain delay before a remote senses file unlocking by another machine
#!/bin/bash
PARALLEL=$1
TOTAL=$2
for I in $(seq ${TOTAL})
do
for J in $(seq ${PARALLEL})
do
echo ${I}_${J}
done | xargs -n 1 -P ${PARALLEL} flock -o /mnt/a ssh ${SSH_LOGIN} nfs-locking/t.sh
sleep $(printf "0.%03d\n" $(shuf -i 1-999 -n 1))
done
#!/bin/bash
set -e
RESOURCE=/tmp/resource
[ -f "${RESOURCE}" ] && echo FAILURE $1 && exit 1
date >"${RESOURCE}"
sleep 0.1
rm "${RESOURCE}"
echo SUCCESS $1 1>&2
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment