Reuse failed queue jobs for duplicate retries
This commit is contained in:
+76
@@ -466,6 +466,82 @@ class QueueApiTests(unittest.TestCase):
|
||||
self.assertEqual(retried["status"], "pending")
|
||||
self.assertFalse(retried["cancel_requested"])
|
||||
|
||||
def test_add_reuses_matching_failed_job_instead_of_creating_duplicate(self):
|
||||
payload = {
|
||||
"show_id": "show-42",
|
||||
"query": "Failed Show",
|
||||
"title": "Failed Show",
|
||||
"anime_name": "Failed Show",
|
||||
"media_type": "tv",
|
||||
"mode": "dub",
|
||||
"quality": "best",
|
||||
"episodes": "11",
|
||||
"download_dir": "/tmp/example",
|
||||
"season": "2",
|
||||
"episode_offset": "13",
|
||||
}
|
||||
created = self.queue.add(payload)
|
||||
with self.queue.lock:
|
||||
job = self.queue._find(created["id"])
|
||||
job["status"] = "failed"
|
||||
job["exit_code"] = 1
|
||||
job["cancel_requested"] = True
|
||||
job["started_at"] = APP.now_iso()
|
||||
job["finished_at"] = APP.now_iso()
|
||||
job["log"] = ["Download failed"]
|
||||
self.queue._save_job_locked(job)
|
||||
|
||||
retried = self.queue.add(payload)
|
||||
listing = self.queue.list(per_page=10)
|
||||
|
||||
self.assertEqual(retried["id"], created["id"])
|
||||
self.assertEqual(retried["status"], "pending")
|
||||
self.assertEqual(retried["log"], [])
|
||||
self.assertIsNone(retried["exit_code"])
|
||||
self.assertFalse(retried["cancel_requested"])
|
||||
self.assertEqual(listing["total"], 1)
|
||||
|
||||
def test_add_keeps_new_job_when_failed_job_differs(self):
|
||||
created = self.queue.add(
|
||||
{
|
||||
"show_id": "show-42",
|
||||
"query": "Failed Show",
|
||||
"title": "Failed Show",
|
||||
"anime_name": "Failed Show",
|
||||
"media_type": "tv",
|
||||
"mode": "dub",
|
||||
"quality": "best",
|
||||
"episodes": "11",
|
||||
"download_dir": "/tmp/example",
|
||||
"season": "2",
|
||||
"episode_offset": "13",
|
||||
}
|
||||
)
|
||||
with self.queue.lock:
|
||||
job = self.queue._find(created["id"])
|
||||
job["status"] = "failed"
|
||||
self.queue._save_job_locked(job)
|
||||
|
||||
new_job = self.queue.add(
|
||||
{
|
||||
"show_id": "show-42",
|
||||
"query": "Failed Show",
|
||||
"title": "Failed Show",
|
||||
"anime_name": "Failed Show",
|
||||
"media_type": "tv",
|
||||
"mode": "dub",
|
||||
"quality": "720",
|
||||
"episodes": "11",
|
||||
"download_dir": "/tmp/example",
|
||||
"season": "2",
|
||||
"episode_offset": "13",
|
||||
}
|
||||
)
|
||||
listing = self.queue.list(per_page=10)
|
||||
|
||||
self.assertNotEqual(new_job["id"], created["id"])
|
||||
self.assertEqual(listing["total"], 2)
|
||||
|
||||
def test_clear_failed_removes_only_failed_jobs(self):
|
||||
failed = self.queue.add(
|
||||
{
|
||||
|
||||
Reference in New Issue
Block a user