Exemplo n.º 1
0
class BaseTCPConnector(Connector, RequireEncryptionMixin):
    _executor = ThreadPoolExecutor(2, thread_name_prefix="TCP-Executor")
    _resolver = netutil.ExecutorResolver(close_executor=False, executor=_executor)
    client = TCPClient(resolver=_resolver)

    async def connect(self, address, deserialize=True, **connection_args):
        self._check_encryption(address, connection_args)
        ip, port = parse_host_port(address)
        kwargs = self._get_connect_args(**connection_args)

        try:
            stream = await self.client.connect(
                ip, port, max_buffer_size=MAX_BUFFER_SIZE, **kwargs
            )

            # Under certain circumstances tornado will have a closed connnection with an error and not raise
            # a StreamClosedError.
            #
            # This occurs with tornado 5.x and openssl 1.1+
            if stream.closed() and stream.error:
                raise StreamClosedError(stream.error)

        except StreamClosedError as e:
            # The socket connect() call failed
            convert_stream_closed_error(self, e)

        local_address = self.prefix + get_stream_address(stream)
        return self.comm_class(
            stream, local_address, self.prefix + address, deserialize
        )
Exemplo n.º 2
0
class GatewayConnector(Connector):
    _executor = ThreadPoolExecutor(2)
    _resolver = netutil.ExecutorResolver(close_executor=False,
                                         executor=_executor)
    client = TCPClient(resolver=_resolver)

    async def connect(self, address, deserialize=True, **connection_args):
        ip, port, path = parse_gateway_address(address)
        sni = "daskgateway-" + path
        ctx = connection_args.get("ssl_context")
        if not isinstance(ctx, ssl.SSLContext):
            raise TypeError("Gateway expects a `ssl_context` argument of type "
                            "ssl.SSLContext, instead got %s" % ctx)

        try:
            plain_stream = await self.client.connect(
                ip, port, max_buffer_size=MAX_BUFFER_SIZE)
            stream = await plain_stream.start_tls(False,
                                                  ssl_options=ctx,
                                                  server_hostname=sni)
            if stream.closed() and stream.error:
                raise StreamClosedError(stream.error)

        except StreamClosedError as e:
            # The socket connect() call failed
            convert_stream_closed_error(self, e)

        local_address = "tls://" + get_stream_address(stream)
        peer_address = "gateway://" + address
        return TLS(stream, local_address, peer_address, deserialize)
Exemplo n.º 3
0
class BaseTCPConnector(Connector, RequireEncryptionMixin):
    if PY3:  # see github PR #2403 discussion for more info
        _executor = ThreadPoolExecutor(2)
        _resolver = netutil.ExecutorResolver(close_executor=False,
                                             executor=_executor)
    else:
        _resolver = None
    client = TCPClient(resolver=_resolver)

    @gen.coroutine
    def connect(self, address, deserialize=True, **connection_args):
        self._check_encryption(address, connection_args)
        ip, port = parse_host_port(address)
        kwargs = self._get_connect_args(**connection_args)

        try:
            stream = yield BaseTCPConnector.client.connect(
                ip, port, max_buffer_size=MAX_BUFFER_SIZE, **kwargs)

            # Under certain circumstances tornado will have a closed connnection with an error and not raise
            # a StreamClosedError.
            #
            # This occurs with tornado 5.x and openssl 1.1+
            if stream.closed() and stream.error:
                raise StreamClosedError(stream.error)

        except StreamClosedError as e:
            # The socket connect() call failed
            convert_stream_closed_error(self, e)

        local_address = self.prefix + get_stream_address(stream)
        raise gen.Return(
            self.comm_class(stream, local_address, self.prefix + address,
                            deserialize))
Exemplo n.º 4
0
 def _get_client(cls):
     if not hasattr(cls, "_client"):
         resolver = netutil.ExecutorResolver(
             close_executor=False, executor=cls._executor
         )
         cls._client = TCPClient(resolver=resolver)
     return cls._client
Exemplo n.º 5
0
 def client(self):
     # The `TCPClient` is cached on the class itself to avoid creating
     # excess `ThreadPoolExecutor`s. We delay creation until inside an async
     # function to avoid accessing an IOLoop from a context where a backing
     # event loop doesn't exist.
     cls = type(self)
     if not hasattr(type(self), "_client"):
         resolver = netutil.ExecutorResolver(
             close_executor=False, executor=cls._executor
         )
         cls._client = TCPClient(resolver=resolver)
     return cls._client
Exemplo n.º 6
0
class BaseTCPConnector(Connector, RequireEncryptionMixin):
    _executor = ThreadPoolExecutor(2, thread_name_prefix="TCP-Executor")
    _resolver = netutil.ExecutorResolver(close_executor=False,
                                         executor=_executor)
    client = TCPClient(resolver=_resolver)

    async def connect(self, address, deserialize=True, **connection_args):
        self._check_encryption(address, connection_args)
        ip, port = parse_host_port(address)
        kwargs = self._get_connect_args(**connection_args)

        try:
            stream = await self.client.connect(ip,
                                               port,
                                               max_buffer_size=MAX_BUFFER_SIZE,
                                               **kwargs)
            # Under certain circumstances tornado will have a closed connnection with an error and not raise
            # a StreamClosedError.
            #
            # This occurs with tornado 5.x and openssl 1.1+
            if stream.closed() and stream.error:
                raise StreamClosedError(stream.error)

        except StreamClosedError as e:
            # The socket connect() call failed
            convert_stream_closed_error(self, e)
        except SSLCertVerificationError as err:
            raise FatalCommClosedError(
                "TLS certificate does not match. Check your security settings. "
                "More info at https://distributed.dask.org/en/latest/tls.html"
            ) from err
        except SSLError as err:
            raise FatalCommClosedError() from err

        local_address = self.prefix + get_stream_address(stream)
        comm = self.comm_class(stream, local_address, self.prefix + address,
                               deserialize)

        return comm