module Nfs: sig .. end
an implementation neutral NFS lock file scheme that relies on the atomicity of link
and rename over NFS (see NFS Illustrated, atomicity for more information). There are
a few caveats compared to local file locks:
- These calls require the locker to have write access to the directory containing the
file being locked.
- Unlike a normal flock call the lock will not be removed when the calling program
exits, so unlock must be called.
- There is no protection provided to prevent a different caller from calling
unlock.
val create : ?message:string -> string -> bool
lock ?message path tries to lock the file at path by creating two new files
path.nfs_lock and path.nfs_lock.msg. path.nfs_lock will be a hard link to
path and path.nfs_lock.msg will contain message (caller's hostname and pid by
default). This lock WILL NOT be released when the calling program exits. You MUST
call unlock.
val create_exn : ?message:string -> string -> unit
lock_exn ?message path like lock, but throws an exception when it fails to obtain
the lock
val blocking_create : ?message:string -> string -> unit
lock_blocking ?message path like lock, but sleeps for 1 second between lock
attempts and does not return until it succeeds
val unlock : string -> unit
unlock path unlocks a file locked by some version of lock. There is no protection
provided to stop you from unlocking a file you have not locked
val critical_section : ?message:string -> string -> f:(unit -> 'a) -> 'a
critical_section ?message path ~f wrap function
f (including exceptions escaping
it) by first locking (using
Lock_file.Nfs.create_exn) and then unlocking the given lock
file.