• Guido Trotter's avatar
    LockSet implementation and unit tests · aaae9bc0
    Guido Trotter authored
    A LockSet represents locking for a set of resources of the same type. A thread
    can acquire multiple resources at the same time, and release some or all of
    them, but cannot acquire more resources incrementally at different times
    without releasing all of them in between.
    Internally a LockSet uses a SharedLock for each resource to be able to grant
    both exclusive and shared acquisition. It also supports safe addition and
    removal of resources at runtime. Acquisitions are ordered alphabetically in
    order to grant them to be deadlock-free. A lot of assumptions about how the
    code interacts are made in order to grant both safety and speed; in order to
    document all of them the code features pretty lenghty comments.
    The test suit tries to catch most common interactions but cannot really tests
    tight race conditions, for which we still need to rely on human checking.
    This is the second basic building block for the Ganeti Lock Manager. Instance
    and Node locks will be put in LockSets to manage their acquisition and release.
    Reviewed-by: imsnah