[serve] Add list_backends and list_endpoints (#8737)

This commit is contained in:
Edward Oakes
2020-06-02 17:14:10 -05:00
committed by GitHub
parent e9ce47bb6b
commit 2e82e05e4b
5 changed files with 135 additions and 12 deletions
+17 -7
View File
@@ -1,10 +1,20 @@
from ray.serve.api import (init, create_backend, delete_backend,
create_endpoint, delete_endpoint, set_traffic,
get_handle, stat, update_backend_config,
get_backend_config, accept_batch) # noqa: E402
from ray.serve.api import (
init, create_backend, delete_backend, create_endpoint, delete_endpoint,
set_traffic, get_handle, stat, update_backend_config, get_backend_config,
accept_batch, list_backends, list_endpoints) # noqa: E402
__all__ = [
"init", "create_backend", "delete_backend", "create_endpoint",
"delete_endpoint", "set_traffic", "get_handle", "stat",
"update_backend_config", "get_backend_config", "accept_batch"
"init",
"create_backend",
"delete_backend",
"create_endpoint",
"delete_endpoint",
"set_traffic",
"get_handle",
"stat",
"update_backend_config",
"get_backend_config",
"accept_batch",
"list_backends",
"list_endpoints",
]
+19
View File
@@ -141,6 +141,16 @@ def delete_endpoint(endpoint):
retry_actor_failures(master_actor.delete_endpoint, endpoint)
@_ensure_connected
def list_endpoints():
"""Returns a dictionary of all registered endpoints.
The dictionary keys are endpoint names and values are dictionaries
of the form: {"methods": List[str], "traffic": Dict[str, float]}.
"""
return retry_actor_failures(master_actor.get_all_endpoints)
@_ensure_connected
def update_backend_config(backend_tag, config_options):
"""Update a backend configuration for a backend tag.
@@ -200,6 +210,15 @@ def create_backend(backend_tag,
backend_config, replica_config)
@_ensure_connected
def list_backends():
"""Returns a dictionary of all registered backends.
Dictionary maps backend tags to backend configs.
"""
return retry_actor_failures(master_actor.get_all_backends)
@_ensure_connected
def delete_backend(backend_tag):
"""Delete the given backend.
+14 -4
View File
@@ -446,12 +446,22 @@ class ServeMaster:
return self.workers
def get_all_backends(self):
"""Used for validation by the API client."""
return list(self.backends.keys())
"""Returns a dictionary of backend tag to backend config dict."""
backends = {}
for backend_tag, (_, config, _) in self.backends.items():
backends[backend_tag] = config.__dict__
return backends
def get_all_endpoints(self):
"""Used for validation by the API client."""
return [endpoint for endpoint, methods in self.routes.values()]
"""Returns a dictionary of endpoint to endpoint config."""
endpoints = {}
for route, (endpoint, methods) in self.routes.items():
endpoints[endpoint] = {
"route": route if route.startswith("/") else None,
"methods": methods,
"traffic": self.traffic_policies.get(endpoint, {})
}
return endpoints
async def set_traffic(self, endpoint_name, traffic_policy_dictionary):
"""Sets the traffic policy for the specified endpoint."""
+62
View File
@@ -426,3 +426,65 @@ def test_parallel_start(serve_instance):
handle = serve.get_handle("test-parallel")
ray.get(handle.remote(), timeout=10)
def test_list_endpoints(serve_instance):
serve.init()
def f():
pass
serve.create_endpoint("endpoint", "/api", methods=["GET", "POST"])
serve.create_endpoint("endpoint2", methods=["POST"])
serve.create_backend("backend", f)
serve.set_traffic("endpoint2", {"backend": 1.0})
endpoints = serve.list_endpoints()
assert "endpoint" in endpoints
assert endpoints["endpoint"] == {
"route": "/api",
"methods": ["GET", "POST"],
"traffic": {}
}
assert "endpoint2" in endpoints
assert endpoints["endpoint2"] == {
"route": None,
"methods": ["POST"],
"traffic": {
"backend": 1.0
}
}
serve.delete_endpoint("endpoint")
assert "endpoint2" in serve.list_endpoints()
serve.delete_endpoint("endpoint2")
assert len(serve.list_endpoints()) == 0
def test_list_backends(serve_instance):
serve.init()
@serve.accept_batch
def f():
pass
serve.create_backend("backend", f, config={"max_batch_size": 10})
backends = serve.list_backends()
assert len(backends) == 1
assert "backend" in backends
assert backends["backend"]["max_batch_size"] == 10
serve.create_backend("backend2", f, config={"num_replicas": 10})
backends = serve.list_backends()
assert len(backends) == 2
assert backends["backend2"]["num_replicas"] == 10
serve.delete_backend("backend")
backends = serve.list_backends()
assert len(backends) == 1
assert "backend2" in backends
serve.delete_backend("backend2")
assert len(serve.list_backends()) == 0