Skip to content

Commit 1c2bc13

Browse files
authored
Fix TaskTimeoutException regression: crashing whole service instead of single task (#251)
1 parent 81d0bb9 commit 1c2bc13

1 file changed

Lines changed: 10 additions & 6 deletions

File tree

karton/core/karton.py

Lines changed: 10 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@
1212
from .backend import KartonBackend, KartonBind, KartonMetrics
1313
from .base import KartonBase, KartonServiceBase
1414
from .config import Config
15+
from .exceptions import TaskTimeoutError
1516
from .resource import LocalResource
1617
from .task import Task, TaskState
1718
from .utils import timeout
@@ -129,7 +130,10 @@ def __init__(
129130
self.current_task: Optional[Task] = None
130131
self._pre_hooks: List[Tuple[Optional[str], Callable[[Task], None]]] = []
131132
self._post_hooks: List[
132-
Tuple[Optional[str], Callable[[Task, Optional[Exception]], None]]
133+
Tuple[
134+
Optional[str],
135+
Callable[[Task, Optional[BaseException]], None],
136+
]
133137
] = []
134138

135139
@abc.abstractmethod
@@ -179,14 +183,14 @@ def internal_process(self, task: Task) -> None:
179183
self.process(self.current_task)
180184
else:
181185
self.process(self.current_task)
182-
except Exception as exc:
186+
except (Exception, TaskTimeoutError) as exc:
183187
saved_exception = exc
184188
raise
185189
finally:
186190
self._run_post_hooks(saved_exception)
187191

188192
self.log.info("Task done - %s", self.current_task.uid)
189-
except Exception:
193+
except (Exception, TaskTimeoutError):
190194
exc_info = sys.exc_info()
191195
exception_str = traceback.format_exception(*exc_info)
192196

@@ -260,7 +264,7 @@ def add_pre_hook(
260264

261265
def add_post_hook(
262266
self,
263-
callback: Callable[[Task, Optional[Exception]], None],
267+
callback: Callable[[Task, Optional[BaseException]], None],
264268
name: Optional[str] = None,
265269
) -> None:
266270
"""
@@ -289,7 +293,7 @@ def _run_pre_hooks(self) -> None:
289293
else:
290294
self.log.exception("Pre-hook failed")
291295

292-
def _run_post_hooks(self, exception: Optional[Exception]) -> None:
296+
def _run_post_hooks(self, exception: Optional[BaseException]) -> None:
293297
"""
294298
Run registered postprocessing hooks
295299
@@ -431,7 +435,7 @@ def _send_signaling_status_task_begin(self, task: Task) -> None:
431435
self._send_signaling_status_task("task_begin")
432436

433437
def _send_signaling_status_task_end(
434-
self, task: Task, ex: Optional[Exception]
438+
self, task: Task, ex: Optional[BaseException]
435439
) -> None:
436440
"""Send a begin status signaling task.
437441

0 commit comments

Comments
 (0)