예제 #1
0
    def report_missing(self, missing_children):
        """Report missing children.

        Returns:
            True if reporting was successful. False otherwise.
        """
        client = None
        try:
            request = ReportMissingRequest()
            request.scheduler_id = self._scheduler_id
            request.hosts = missing_children
            chairman_list = StaticServerSet(self._config.chairman_list)
            client_timeout = self._config.thrift_timeout_sec
            client = Client(Chairman.Client, "Chairman", chairman_list,
                            client_timeout=client_timeout)
            res = client.report_missing(request)
            if res.result != ReportMissingResultCode.OK:
                rc = ReportMissingResultCode._VALUES_TO_NAMES[res.result]
                self._logger.warn("Failed to send %s: %s" % (request, rc))
                return False
            return True
        except Exception:
            self._logger.warn("Failed to send %s" % request, exc_info=True)
            return False
        finally:
            if client:
                client.close()
예제 #2
0
    def test_close_async(self):
        client = Client(Echoer.Client, "echo", self.serverset,
                        acquisition_timeout=5)

        def close_soon():
            time.sleep(0.1)
            client.close()

        Thread(target=close_soon).start()
        client.echo("foobar")
예제 #3
0
    def test_client_timeout_connect(self):
        client = Client(Echoer.Client, "echo", self.serverset)
        client.client_timeout = 0.1

        # Connect to unreachable host 1.1.1.1
        self.serverset.add_server(("1.1.1.1", PORT))

        t = time.time()
        try:
            client.echo("foobar")
        except:
            pass
        duration = time.time() - t
        assert_that(duration < 0.2, equal_to(True),
                    "duration: %f, should be around 0.1" % duration)
예제 #4
0
    def test_add_server(self):
        client = Client(Echoer.Client, "echo", self.serverset)

        def add_server():
            # make the call below wait until there is a server present
            time.sleep(0.2)
            self.serverset.add_server(("localhost", PORT))

        Thread(target=add_server).start()

        assert_that(client.echo("foobar"), equal_to("foobar"))
        assert_that(client.echo("foobar2"), equal_to("foobar2"))

        assert_that(len(client._acquired_clients), equal_to(0))
        assert_that(len(client._clients), equal_to(1))
        assert_that(len(client._servers), equal_to(1))
        client.close()
예제 #5
0
    def test_client_timeout(self):
        client = Client(Echoer.Client, "echo", self.serverset)
        client.client_timeout = 0.1

        self.serverset.add_server(("localhost", PORT))

        client.echo("sleep")
        client.close()
예제 #6
0
 def test_max_clients(self):
     client = Client(Echoer.Client,
                     "echo",
                     self.serverset,
                     acquisition_timeout=0.1,
                     max_clients=0)
     client.echo("foobar")
     client.close()
    def _unregister(self):
        """Unregister the host with the chairman.

        :raise: ErrorUnregistering if there was an error from the server
        :raise: socket.timeout if there was a timeout making the request
        :raise: common.photon_thrift.client.TimeoutError if there was a
                timeout acquiring a client
        """
        server_set = StaticServerSet(self.chairman_list)
        client = Client(Chairman.Client, "Chairman", server_set,
                        client_timeout=REGISTRATION_TIMEOUT)
        try:
            host_handler = common.services.get(Host.Iface)
            res = host_handler.get_host_config_no_logging(GetConfigRequest())
            response = client.unregister_host(UnregisterHostRequest(
                res.hostConfig.agent_id))
            if response.result != UnregisterHostResultCode.OK:
                result = UnregisterHostResultCode._VALUES_TO_NAMES[
                    response.result]
                raise Exception("Failed to unregister: %s" % result)
            self._logger.info("Unregistered with Chairman")
        finally:
            client.close()
예제 #8
0
    def test_remove_server(self):
        client = Client(Echoer.Client, "echo", self.serverset)

        self.serverset.add_server(("localhost", PORT + 1))

        try:
            client.echo("foobar")
            raise AssertionError("Client should have failed")
        except TTransportException:
            pass

        self.serverset.remove_server(("localhost", PORT + 1))
        assert_that(len(client._clients), equal_to(0))
        self.serverset.add_server(("localhost", PORT))

        assert_that(len(client._servers), equal_to(1))
        assert_that(client.echo("foobar"), equal_to("foobar"))
        client.close()
예제 #9
0
    def test_add_server(self):
        client = Client(Echoer.Client, "echo", self.serverset)

        def add_server():
            # make the call below wait until there is a server present
            time.sleep(0.2)
            self.serverset.add_server(("localhost", PORT))

        Thread(target=add_server).start()

        assert_that(client.echo("foobar"), equal_to("foobar"))
        assert_that(client.echo("foobar2"), equal_to("foobar2"))

        assert_that(len(client._acquired_clients), equal_to(0))
        assert_that(len(client._clients), equal_to(1))
        assert_that(len(client._servers), equal_to(1))
        client.close()
예제 #10
0
    def test_remove_server(self):
        client = Client(Echoer.Client, "echo", self.serverset)

        self.serverset.add_server(("localhost", PORT + 1))

        try:
            client.echo("foobar")
            raise AssertionError("Client should have failed")
        except TTransportException:
            pass

        self.serverset.remove_server(("localhost", PORT + 1))
        assert_that(len(client._clients), equal_to(0))
        self.serverset.add_server(("localhost", PORT))

        assert_that(len(client._servers), equal_to(1))
        assert_that(client.echo("foobar"), equal_to("foobar"))
        client.close()
예제 #11
0
 def test_close_sync(self):
     client = Client(Echoer.Client, "echo", self.serverset)
     client.close()
     client.echo("foobar")
예제 #12
0
 def test_timeout(self):
     client = Client(Echoer.Client, "echo", self.serverset,
                     acquisition_timeout=0.1)
     client.echo("foobar")
     client.close()
예제 #13
0
 def test_close_sync(self):
     client = Client(Echoer.Client, "echo", self.serverset)
     client.close()
     client.echo("foobar")