[serve] Don't overwrite self.handle in StarletteEndpoint (#14111)

This commit is contained in:
Edward Oakes
2021-02-15 17:51:54 -06:00
committed by GitHub
parent 4ad79ca963
commit 5e763893ea
+8 -4
View File
@@ -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):