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 )
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)
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))
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
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
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