NAME
aegis locks - how locking works, and which commands use them
DESCRIPTION
Aegis maintains a database of information about the projects in its
care, and the various changes, both completed and in progress. In
order to ensure the integrity of this database, and also your project
repository, it uses locks.
From time to time, these locks are visible to the users, because they
will be told that a command is waiting for a particular lock. For some
transactions, this can be a long wait.
Dining Philosophers
While UNIX supplies locks in various flavors, if you need an entire set
of locks simultaneously, there is no elegant “all or nothing ”
interface available. This is unsurprising, as this is one of the
classic computer science problems, known as the Dining Philosophers
problem.
The master lock is used to solve the Dining Philosophers problem, and
is meant to be very transient. It is only held while the other locks
which are required (frequently two or more, hence the problem) are
requested - non-blocking. Once they are all obtained (or not, and any
partials given back) the master lock is released. It is usually held
for much less than a second. If you notice the master lock being held,
it is almost always a symptom of the NFS lock daemon misbehaving.
If the lock(s) could not be obtained, the blocking lock is waited on
(without the master). This is when the "waiting for" message is
issued. When obtained, it is released and the whole cycle starts
again. This is why you occasionally see a series of "waiting for"
messages. (This could maybe be optimized some, but it is still
possible to block on yet another lock, and they you have to release all
and wait again. As yet, I’m not convinced the extra code complexity is
required.)
Listing Locks
There is a command available to list the current Aegis locks.
aegis -list locks
Note that the project names are change numbers are guesses as the locks
are hashed over a 16-bit range, and range overlaps are possible.
Collisions are also possible, but fortunately rarer.
Known Problems
There is a known problem with the HP/UX NFS clients. If you see
persistent "no locks available" error messages when is NFS mounted,
try making the /lockfile file world writable. chmod 666 /lockfile
There is the possibility of a denial of service attack (which is why
the default is 0600) but since you are presently denied service anyway,
it’s academic.
COMMANDS
The following table shows the locks taken by the various commands.
Note that theoretically some of the commands take too few locks, but
this has yet to prove to be a problem in practice. Also, "project
state file" and "change state file" are the same thing for branches, it
just depends which way you are looking at them at the time.
Command Global Project Project Ancestor Change User
State State Baseline Baselines State State
File File File File
----------------------------------------------------------------------------------
aeb (dev) . . shared shared exclusive .
aeb (int) . . . shared exclusive .
aeca . . . . exclusive .
aechown . . . . exclusive exclusive
aeclean . . . . exclusive .
aeclone . exclusive . . exclusive exclusive
aecp . , , , exclusive .
aecpu . . . . exclusive .
aed . , , , exclusive .
aedb . . . . exclusive exclusive
aedbu . . . . exclusive exclusive
aede . , . . exclusive exclusive
aedeu . . . . exclusive exclusive
aedn . exclusive . . . .
aeib . exclusive . . exclusive exclusive
aeibu . exclusive . . exclusive exclusive
aeifail . exclusive . . exclusive exclusive
aeipass . exclusive exclusive . exclusive exclusive
aemv . , , , exclusive .
aena . exclusive . . . .
aenbr . exclusive . . . .
aenbru exclusive exclusive . . . .
aenc . exclusive . . . .
aencu . exclusive . . . .
aend . exclusive . . . .
aenf . . . . exclusive .
aenfu . . . . exclusive .
aeni . exclusive . . . .
aenpa exclusive . . . . .
aenpr exclusive . . . . .
aenrv . exclusive . . . .
aent . exclusive . . exclusive .
aentu . . . . exclusive .
aepa . exclusive . . . .
aera . exclusive . . . .
aerd . exclusive . . . .
aerfail . . . . exclusive exclusive
aeri . exclusive . . . .
aerm . , . . exclusive .
aermu . . . . exclusive .
aermpr exclusive . . . . .
aerpa exclusive . . . . .
aerpass . . . . exclusive .
aerpu . . . . exclusive .
aerrv . exclusive . . . .
aet . . , , exclusive .
SEE ALSO
You may wish to see the manual pages of all of the above commands.
Many have descriptions of the locking interactions.
COPYRIGHT
aegis version 4.24.3.D001
Copyright (C) 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999,
2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010 Peter
Miller
The aegis program comes with ABSOLUTELY NO WARRANTY; for details use
the ’aegis -VERSion License’ command. This is free software and you
are welcome to redistribute it under certain conditions; for details
use the ’aegis -VERSion License’ command.
AUTHOR
Peter Miller E-Mail: millerp@canb.auug.org.au
/\/\* WWW: http://www.canb.auug.org.au/~millerp/