From 8e24d3a92d25aa59e6f8af6b871b706d4e2ddc91 Mon Sep 17 00:00:00 2001 From: Javier Lopez Date: Mon, 16 May 2016 12:11:19 +0200 Subject: [PATCH 1/2] job.py: Fix cancel failure on failed queue --- rq/job.py | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/rq/job.py b/rq/job.py index bb61fc4..ce1894b 100644 --- a/rq/job.py +++ b/rq/job.py @@ -473,11 +473,13 @@ class Job(object): without worrying about the internals required to implement job cancellation. """ - from .queue import Queue + from .queue import Queue, get_failed_queue pipeline = self.connection._pipeline() if self.origin: - queue = Queue(name=self.origin, connection=self.connection) - queue.remove(self, pipeline=pipeline) + q = (get_failed_queue(connection=self.connection) + if self.is_failed + else Queue(name=self.origin, connection=self.connection)) + q.remove(self, pipeline=pipeline) pipeline.execute() def delete(self, pipeline=None, remove_from_queue=True): From e92b57d128f64eb974b23f551c2f1745033a7890 Mon Sep 17 00:00:00 2001 From: Javier Lopez Date: Mon, 16 May 2016 12:12:03 +0200 Subject: [PATCH 2/2] test_job.py: Add cancel test on failed queue --- tests/test_job.py | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/tests/test_job.py b/tests/test_job.py index 30917ee..413039d 100644 --- a/tests/test_job.py +++ b/tests/test_job.py @@ -11,7 +11,7 @@ from tests.helpers import strip_microseconds from rq.compat import PY2, as_text from rq.exceptions import NoSuchJobError, UnpickleError from rq.job import Job, get_current_job, JobStatus, cancel_job -from rq.queue import Queue +from rq.queue import Queue, get_failed_queue from rq.registry import DeferredJobRegistry from rq.utils import utcformat from rq.worker import Worker @@ -435,3 +435,12 @@ class TestJob(RQTestCase): self.assertEqual(1, len(queue.get_jobs())) cancel_job(job.id) self.assertEqual(0, len(queue.get_jobs())) + + def test_create_failed_and_cancel_job(self): + """test creating and using cancel_job deletes job properly""" + failed = get_failed_queue(connection=self.testconn) + job = failed.enqueue(fixtures.say_hello) + job.set_status(JobStatus.FAILED) + self.assertEqual(1, len(failed.get_jobs())) + cancel_job(job.id) + self.assertEqual(0, len(failed.get_jobs()))