pastebin - collaborative debugging tool
rovema.kpaste.net RSS


nfsv4_num_locking_fun1.sh
Posted by Anonymous on Wed 28th Jun 2023 13:28
raw | new post
view followups (newest first): nfsv4_num_locking_fun1.sh by Anonymous
modification of post by Anonymous (view diff)

  1. #!/bin/bash
  2.  
  3. #
  4. # nfsv4_num_locking_fun1.sh - test whether locking via lock dirs or
  5. # flock(2) work if multiple NFS clients write to the same file
  6. #
  7. # For fcntl-lock(.exe) see
  8. # https://github.com/magnumripper/fcntl-lock/blob/master/fcntl-lock.c
  9. #
  10. # We use this to test the file locking of the CITI NFSv4 client for
  11. # Windows
  12. #
  13. # Written by Roland Mainz <roland.mainz@nrubsig.org>
  14. #
  15.  
  16. typeset mode="$1"
  17. typeset cmd="$2"
  18.  
  19. case "$mode" in
  20.         'lockdir')
  21.                 case "$cmd" in
  22.                         'init' | 'reset')
  23.                                 rm -f 'foo'
  24.                                 [[ -d 'mylock' ]] && rmdir 'mylock'
  25.                                 printf '0\n' >'foo'
  26.                                 ;;
  27.                         'worker')
  28.                                 for ((i=0 ; i < 100 ; i++ )) ; do
  29.                                         while ! mkdir mylock ; do sleep 5 ; done
  30.                                         typeset -i x
  31.                                         x=$( tail -n 1 foo )
  32.                                         sleep 3 ; (( x++ ))
  33.                                         echo "$x" >>foo
  34.                                         rmdir mylock
  35.                                         echo "WRITE $x"
  36.                                         sleep 7
  37.                                 done
  38.                                 ;;
  39.                         *)
  40.                                 printf $"%s: Unknown command %s.\n" "$0" "$cmd"
  41.                                 exit 1
  42.                                 ;;
  43.                 esac
  44.                 ;;
  45.         'fcntl-lock' | 'fcntl-lock.exe' | '/usr/bin/flock')
  46.                 export PATH="$PWD:$PATH"
  47.  
  48.                 case "$cmd" in
  49.                         'init' | 'reset')
  50.                                 rm -f 'foo'
  51.                                 rm -f 'mylockfile'
  52.                                 touch 'mylockfile'
  53.                                 printf '0\n' >'foo'
  54.                                 ;;
  55.                         'worker')
  56.                                 for ((i=0 ; i < 100 ; i++ )) ; do
  57.                                         $mode --exclusive 'mylockfile' bash -c \
  58.                                         'typeset -i x
  59.                                         x=$( tail -n 1 foo )
  60.                                         sleep 1 ; (( x++ ))
  61.                                         echo "$x" >>"foo"
  62.                                         echo "WRITE $x"
  63.                                         sleep 0.5'
  64.                                 done
  65.                                 ;;
  66.                         *)
  67.                                 printf $"%s: Unknown command %s.\n" "$0" "$cmd"
  68.                                 exit 1
  69.                                 ;;
  70.                 esac
  71.                 ;;
  72.         *)
  73.                 printf $"%s: Unknown mode %s.\n" "$0" "$mode"
  74.                 exit 1
  75.                 ;;
  76. esac
  77. # EOF.

Submit a correction or amendment below (click here to make a fresh posting)
After submitting an amendment, you'll be able to view the differences between the old and new posts easily.

Syntax highlighting:

To highlight particular lines, prefix each line with {%HIGHLIGHT}




All content is user-submitted.
The administrators of this site (kpaste.net) are not responsible for their content.
Abuse reports should be emailed to us at