[gRPC] Expose native pause status (#37488)

Co-authored-by: ishandhanani <82981111+ishandhanani@users.noreply.github.com>
This commit is contained in:
William Arnold
2026-09-16 15:16:52 -07:00
committed by GitHub
co-authored by ishandhanani
parent 35b7589e1a
commit f45aad44bd
11 changed files with 175 additions and 48 deletions
@@ -43,6 +43,18 @@ def _make_runtime_handle(responses):
return handle
class TestNativeGrpcReadiness(CustomTestCase):
def test_readiness_comes_from_tokenizer_manager(self):
tokenizer_manager = SimpleNamespace(is_ready=lambda: True)
handle = RuntimeHandle.__new__(RuntimeHandle)
handle.tokenizer_manager = tokenizer_manager
self.assertTrue(handle.get_is_ready())
tokenizer_manager.is_ready = lambda: False
self.assertFalse(handle.get_is_ready())
class TestNativeGrpcParallelResponses(CustomTestCase):
def test_non_streaming_returns_every_choice_before_finishing(self):
callback = _RecordingCallback()
@@ -0,0 +1,56 @@
import asyncio
import unittest
from types import SimpleNamespace
from sglang.srt.entrypoints import http_server
from sglang.srt.managers.tokenizer_manager import ServerStatus, TokenizerManager
from sglang.test.ci.ci_register import register_cpu_ci
from sglang.test.test_utils import CustomTestCase
register_cpu_ci(est_time=1, suite="base-a-test-cpu")
class TestReadyEndpoint(CustomTestCase):
def call_ready(
self,
*,
is_pause: bool = False,
gracefully_exit: bool = False,
server_status: ServerStatus = ServerStatus.Up,
):
tokenizer_manager = TokenizerManager.__new__(TokenizerManager)
tokenizer_manager.is_pause = is_pause
tokenizer_manager.gracefully_exit = gracefully_exit
tokenizer_manager.server_status = server_status
prior_state = http_server.get_global_state()
http_server.set_global_state(
SimpleNamespace(tokenizer_manager=tokenizer_manager)
)
try:
return asyncio.run(http_server.ready())
finally:
http_server._global_state = prior_state
def test_ready_while_accepting_requests(self):
self.assertEqual(self.call_ready().status_code, 200)
def test_not_ready_while_paused(self):
self.assertEqual(self.call_ready(is_pause=True).status_code, 503)
def test_not_ready_while_starting(self):
self.assertEqual(
self.call_ready(server_status=ServerStatus.Starting).status_code, 503
)
def test_not_ready_while_unhealthy(self):
self.assertEqual(
self.call_ready(server_status=ServerStatus.UnHealthy).status_code, 503
)
def test_not_ready_while_gracefully_exiting(self):
self.assertEqual(self.call_ready(gracefully_exit=True).status_code, 503)
if __name__ == "__main__":
unittest.main(verbosity=2)