def test_registerLauncher(self): launcher = zk.Launcher() launcher.id = "launcher-000-001" self.zk.registerLauncher(launcher) launchers = self.zk.getRegisteredLaunchers() self.assertEqual(1, len(launchers)) self.assertEqual(launcher.id, launchers[0].id)
def run(self): self.running = True while self.running: # Don't do work if we've lost communication with the ZK cluster did_suspend = False while self.zk and (self.zk.suspended or self.zk.lost): did_suspend = True self.log.info("ZooKeeper suspended. Waiting") time.sleep(SUSPEND_WAIT_TIME) if did_suspend: self.log.info("ZooKeeper available. Resuming") # Make sure we're always registered with ZK launcher = zk.Launcher() launcher.id = self.launcher_id for prov_cfg in self.nodepool.config.providers.values(): launcher.supported_labels.update(prov_cfg.getSupportedLabels()) launcher.provider_name = self.provider_name self.zk.registerLauncher(launcher) self.updateProviderLimits( self.nodepool.config.providers.get(self.provider_name)) try: if not self.paused_handler: while not self._assignHandlers(): # _assignHandlers can take quite some time on a busy # system so sprinkle _removeCompletedHandlers in # between such that we have a chance to fulfill # requests that already have all nodes. self._removeCompletedHandlers() else: # If we are paused, one request handler could not # satisfy its assigned request, so give it # another shot. Unpause ourselves if it completed. self.paused_handler.run() if not self.paused_handler.paused: self.paused_handler = None self._removeCompletedHandlers() except Exception: self.log.exception("Error in PoolWorker:") self.stop_event.wait(self.watermark_sleep) # Cleanup on exit if self.paused_handler: self.paused_handler.unlockNodeSet(clear_allocation=True)