diff --git a/python/ray/serve/http_proxy.py b/python/ray/serve/http_proxy.py index f6fa25bb3..1aad3e9f4 100644 --- a/python/ray/serve/http_proxy.py +++ b/python/ray/serve/http_proxy.py @@ -37,6 +37,9 @@ class ServeStarletteEndpoint: def __init__(self, client, endpoint_tag: EndpointTag): self.client = client self.endpoint_tag = endpoint_tag + # This will be lazily populated when the first request comes in. + # TODO(edoakes): we should be able to construct the handle here, but + # that currently breaks pytest. This seems like a bug. self.handle = None async def __call__(self, scope, receive, send): @@ -45,14 +48,15 @@ class ServeStarletteEndpoint: headers = {k.decode(): v.decode() for k, v in scope["headers"]} if self.handle is None: self.handle = self.client.get_handle(self.endpoint_tag, sync=False) - self.handle = self.handle.options( + + object_ref = await self.handle.options( method_name=headers.get("X-SERVE-CALL-METHOD".lower(), DEFAULT.VALUE), shard_key=headers.get("X-SERVE-SHARD-KEY".lower(), DEFAULT.VALUE), http_method=scope["method"].upper(), - http_headers=headers) - request = build_starlette_request(scope, http_body_bytes) - object_ref = await self.handle.remote(request) + http_headers=headers).remote( + build_starlette_request(scope, http_body_bytes)) + result = await object_ref if isinstance(result, RayTaskError):