Skip to content
  • Michael Hanselmann's avatar
    ganeti-watcher: Split for node groups · 16e0b9c9
    Michael Hanselmann authored
    
    
    This patch brings a huge change to ganeti-watcher to make it aware of
    node groups. Each node group is processed in its own subprocess,
    reducing the impact of long-running operations.
    
    The global watcher state file, $datadir/ganeti/watcher.data, is replaced
    with a state file per node group ($datadir/ganeti/watcher.${uuid}.data).
    
    Previously a lock on the state file was used to ensure only one instance
    of watcher was running at the same time. Some operations, e.g.
    “gnt-cluster renew-crypto”, blocked the watcher by acquiring an
    exclusive lock on the state file. Since the watcher processes now use
    different files, this method is no longer usable. Locking multiple files
    isn't atomic. Instead a dedicated lock file is used and every watcher
    process acquires a shared lock on it. If a Ganeti command wants to block
    the watcher it acquires the lock in exclusive mode.
    
    Each per-nodegroup watcher process also acquires an exclusive lock on
    its state file. This prevents multiple watchers from running for the
    same nodegroup.
    
    The code is reorganized heavily to clear up dependencies between
    functions and to get rid of the global “client” variable. The utility
    class “Watcher” is removed in favour of stand-alone utility functions.
    
    Since the parent watcher process won't wait for its children by
    default, a new option (--wait-children) was added. It is used, for
    example, by QA.
    
    Signed-off-by: default avatarMichael Hanselmann <hansmi@google.com>
    Reviewed-by: default avatarIustin Pop <iustin@google.com>
    16e0b9c9