Skip to content

Commit b2f3ea5

Browse files
author
Andrei Neagu
committed
fixed issues with failing services
1 parent d8cfe2e commit b2f3ea5

File tree

3 files changed

+25
-7
lines changed

3 files changed

+25
-7
lines changed
Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
from pydantic import BaseModel
2+
3+
4+
class RPCErrorResponse(BaseModel):
5+
str_traceback: str
6+
error_object: str

packages/service-library/src/servicelib/long_running_tasks/_rabbit/lrt_client.py

Lines changed: 12 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@
1010
from ...rabbitmq._client_rpc import RabbitMQRPCClient
1111
from .._serialization import string_to_object
1212
from ..models import RabbitNamespace, TaskBase, TaskContext, TaskId, TaskStatus
13+
from ._models import RPCErrorResponse
1314
from .namespace import get_namespace
1415

1516
_logger = logging.getLogger(__name__)
@@ -99,12 +100,18 @@ async def get_task_result(
99100
task_id=task_id,
100101
timeout_s=_RPC_TIMEOUT_NORMAL_REQUEST,
101102
)
102-
assert isinstance(serialized_result, str) # nosec
103-
task_result = string_to_object(serialized_result)
103+
assert isinstance(serialized_result, RPCErrorResponse | str) # nosec
104+
if isinstance(serialized_result, RPCErrorResponse):
105+
error = string_to_object(serialized_result.error_object)
106+
_logger.warning(
107+
"Remote task finished with error: '%s: %s'\n%s",
108+
error.__class__.__name__,
109+
error,
110+
serialized_result.str_traceback,
111+
)
112+
raise error
104113

105-
if isinstance(task_result, Exception):
106-
raise task_result
107-
return task_result
114+
return string_to_object(serialized_result)
108115

109116

110117
@log_decorator(_logger, level=logging.DEBUG)

packages/service-library/src/servicelib/long_running_tasks/_rabbit/lrt_server.py

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
import logging
2+
import traceback
23
from typing import Any
34

45
from ...rabbitmq import RPCRouter
@@ -7,6 +8,7 @@
78
from ..errors import BaseLongRunningError, TaskNotCompletedError, TaskNotFoundError
89
from ..models import TaskBase, TaskContext, TaskId, TaskStatus
910
from ..task import RegisteredTaskName
11+
from ._models import RPCErrorResponse
1012

1113
_logger = logging.getLogger(__name__)
1214

@@ -85,15 +87,18 @@ async def get_task_result(
8587
*,
8688
task_context: TaskContext,
8789
task_id: TaskId,
88-
) -> str:
90+
) -> RPCErrorResponse | str:
8991
try:
9092
return object_to_string(
9193
await _get_transferarble_task_result(
9294
long_running_manager, task_context=task_context, task_id=task_id
9395
)
9496
)
9597
except Exception as exc: # pylint:disable=broad-exception-caught
96-
return object_to_string(exc)
98+
return RPCErrorResponse(
99+
str_traceback="".join(traceback.format_tb(exc.__traceback__)),
100+
error_object=object_to_string(exc),
101+
)
97102

98103

99104
@router.expose(reraise_if_error_type=(BaseLongRunningError,))

0 commit comments

Comments
 (0)