Skip to content

Commit 23ae5db

Browse files
wallashssdtrifiro
authored andcommitted
fix: duplicate stacktrace on engine error
Signed-off-by: Wallas Santos <[email protected]>
1 parent d66fff7 commit 23ae5db

File tree

2 files changed

+37
-0
lines changed

2 files changed

+37
-0
lines changed

src/vllm_tgis_adapter/grpc/grpc_server.py

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@
1414
from grpc_health.v1 import health, health_pb2, health_pb2_grpc
1515
from grpc_reflection.v1alpha import reflection
1616
from vllm.engine.async_llm_engine import AsyncLLMEngine
17+
from vllm.engine.multiprocessing import MQEngineDeadError
1718
from vllm.entrypoints.openai.serving_completion import merge_async_iterators
1819
from vllm.inputs import LLMInputs
1920
from vllm.sampling_params import RequestOutputKind, SamplingParams
@@ -149,6 +150,9 @@ async def _handle_exception(
149150
service_metrics.count_request_failure(FailureReasonLabel.GENERATE)
150151
else:
151152
service_metrics.count_request_failure(FailureReasonLabel.UNKNOWN)
153+
if isinstance(e, MQEngineDeadError):
154+
logger.error(e)
155+
return
152156
logger.exception("%s failed", func.__name__)
153157
raise e
154158

tests/test_grpc_server.py

Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,5 @@
1+
import asyncio
2+
13
import pytest
24

35
from .utils import GrpcClient
@@ -90,3 +92,34 @@ def test_request_id(grpc_client, mocker):
9092

9193
spy.assert_called_once()
9294
assert spy.spy_return == request_id.hex
95+
96+
97+
def test_error_handling(mocker):
98+
from vllm.engine.multiprocessing import MQEngineDeadError
99+
100+
from vllm_tgis_adapter.grpc.grpc_server import _handle_exception, logger
101+
102+
def dummy_func():
103+
pass
104+
105+
class DummyEngine:
106+
errored = False
107+
is_running = True
108+
109+
class DummyArg:
110+
engine = DummyEngine()
111+
112+
# General error handling
113+
key_error = KeyError()
114+
dummy_arg_0 = DummyArg()
115+
with pytest.raises(KeyError):
116+
asyncio.run(_handle_exception(key_error, dummy_func, dummy_arg_0))
117+
118+
engine_error = MQEngineDeadError("foo:bar")
119+
120+
# Engine error handling
121+
spy = mocker.spy(logger, "error")
122+
123+
# Does not raises exception
124+
asyncio.run(_handle_exception(engine_error, dummy_func, dummy_arg_0))
125+
spy.assert_called_once_with(engine_error)

0 commit comments

Comments
 (0)