Exemplo n.º 1
0
 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)
Exemplo n.º 2
0
    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)