Skip to content
  • Michael Hanselmann's avatar
    SharedLock: Implement downgrade from exclusive to shared mode · 3dbe3ddf
    Michael Hanselmann authored
    
    
    If a job needs to modify a resource and then wait for a result, it must
    acquire the resource lock in exclusive mode. In some cases it would be
    possible to only have a shared lock for waiting. Until now it was not
    possible to change a lock's mode once it'd been acquired. Releasing and
    re-acquiring might have been possible, but would require many more
    checks and can introduce new issues.
    
    With this patch a new method, named “downgrade”, is added to Ganeti's
    own SharedLock class. It can only be called when the lock is held in
    exclusive mode and changes it to shared. If there are any pending shared
    acquires on the same priority, they're moved to the front of the queue
    and notified (jumping ahead of exclusive acquires).
    
    In a lockset the internal lock will be downgraded if, and only if, all
    individual locks owned by the current thread are either released or
    acquired in shared mode.
    
    Unittests are provided.
    
    Signed-off-by: default avatarMichael Hanselmann <hansmi@google.com>
    Reviewed-by: default avatarGuido Trotter <ultrotter@google.com>
    3dbe3ddf