aegis locking(5) aegis locking(5) NNAAMMEE aegis locks - how locking works, and which commands use them DDEESSCCRRIIPPTTIIOONN 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. DDiinniinngg PPhhiilloossoopphheerrss 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 _m_u_c_h less than a second. If you notice the master lock being held, it is almost always a symptom of the NFS lock daemon misbehav- ing. 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 _r_e_l_e_a_s_e_d 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 possi- ble 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.) LLiissttiinngg LLoocckkss There is a command available to list the current Aegis locks. aegis -list locks Note that the project names are change numbers are _g_u_e_s_s_e_s as the locks are hashed over a 16-bit range, and range overlaps are possible. Collisions are also possible, but fortunately rarer. KKnnoowwnn PPrroobblleemmss There is a known problem with the HP/UX NFS clients. If you see per- sistent "no locks available" error messages when _/_u_s_r_/_l_o_c_a_l_/_l_i_b_/_a_e_g_i_s is NFS mounted, try making the _/_u_s_r_/_l_o_c_a_l_/_l_i_b_/_a_e_g_i_s_/_l_o_c_k_f_i_l_e file world writable. chmod 666 /usr/local/lib/aegis/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 aca- demic. CCOOMMMMAANNDDSS The following table shows the locks taken by the various commands. Note that theoretically some of the commands take too _f_e_w 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 . SSEEEE AALLSSOO You may wish to see the manual pages of all of the above commands. Many have descriptions of the locking interactions. CCOOPPYYRRIIGGHHTT aegis version 4.25.D611 Copyright (C) 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012, 2013, 2014 Peter Miller The aegis program comes with ABSOLUTELY NO WARRANTY; for details use the '_a_e_g_i_s _-_V_E_R_S_i_o_n _L_i_c_e_n_s_e' command. This is free software and you are welcome to redistribute it under certain conditions; for details use the '_a_e_g_i_s _-_V_E_R_S_i_o_n _L_i_c_e_n_s_e' command. AAUUTTHHOORR Peter Miller E-Mail: pmiller@opensource.org.au /\/\* WWW: http://miller.emu.id.au/pmiller/ Reference Manual Aegis aegis locking(5)