From 5e763893eaef8a9b2af5e06fdd187b3b187c22d8 Mon Sep 17 00:00:00 2001 From: Edward Oakes Date: Mon, 15 Feb 2021 17:51:54 -0600 Subject: [PATCH] [serve] Don't overwrite self.handle in StarletteEndpoint (#14111) --- python/ray/serve/http_proxy.py | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) 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):