':param IReactorTime reactor: Used to schedule delays in the loop.
:param IDeployer deployer: Used to discover local state and calculate
necessary changes to match desired configuration.'

def __init__(self, reactor, deployer):

    self.reactor = reactor
    self.deployer = deployer
    self.cluster_state = None
    self.client = None
    self._last_discovered_local_state = None
    self._last_acknowledged_state = None
    self._sleep_timeout = None
    self._unconverged_sleep = _UnconvergedDelay()
