Skip to content

Commit 812fa4a

Browse files
mehdigmirasylvinus
authored andcommitted
Save abort traceback (#149)
Fixes #148 * when aborting, save exception * add AbortOnFailed test task * test that traceback is saved when aborting
1 parent 239e2bd commit 812fa4a

3 files changed

Lines changed: 40 additions & 3 deletions

File tree

mrq/job.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -433,7 +433,7 @@ def save_abort(self):
433433
"dateexpires": dateexpires
434434
}
435435

436-
self._save_status("abort", updates)
436+
self._save_status("abort", updates, exception=True)
437437

438438
def _save_status(self, status, updates=None, exception=False, w=None, j=None):
439439

tests/tasks/general.py

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -147,13 +147,31 @@ def run(self, params):
147147
raise Exception(params.get("message", ""))
148148

149149

150+
class InAbortException(BaseException):
151+
pass
152+
153+
150154
class Abort(Task):
151155

152156
def run(self, params):
153157

154158
abort_current_job()
155159

156160

161+
class AbortOnFailed(Task):
162+
def run(self, params):
163+
164+
log.info("Will abort this task")
165+
166+
connections.mongodb_jobs.tests_inserts.insert(params)
167+
try:
168+
raise InAbortException
169+
except InAbortException:
170+
abort_current_job()
171+
172+
raise Exception("Should not be reached")
173+
174+
157175
class ReturnParams(Task):
158176

159177
def run(self, params):

tests/test_abort.py

Lines changed: 21 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
1-
from mrq.job import Job
2-
from mrq.queue import Queue
31
from datetime import datetime
42
from datetime import timedelta
53

4+
from mrq.queue import Queue
5+
66

77
def test_abort(worker):
88

@@ -19,3 +19,22 @@ def test_abort(worker):
1919
assert job["status"] == "abort"
2020
assert job.get("dateexpires") is not None
2121
assert job["dateexpires"] < datetime.utcnow() + timedelta(hours=24)
22+
23+
24+
def test_abort_traceback_history(worker):
25+
26+
worker.start(flags="--config tests/fixtures/config-tracebackhistory.py")
27+
28+
worker.send_task("tests.tasks.general.Abort", {"a": 41}, block=True, accept_statuses=["abort"])
29+
30+
job = worker.mongodb_jobs.mrq_jobs.find()[0]
31+
32+
assert len(job["traceback_history"]) == 1
33+
assert not job["traceback_history"][0].get("original_traceback")
34+
35+
worker.send_task("tests.tasks.general.AbortOnFailed", {"a": 41}, block=True, accept_statuses=["abort"])
36+
37+
job = worker.mongodb_jobs.mrq_jobs.find({"path": "tests.tasks.general.AbortOnFailed"})[0]
38+
39+
assert len(job["traceback_history"]) == 1
40+
assert "InAbortException" in job["traceback_history"][0].get("original_traceback")

0 commit comments

Comments
 (0)