Keep enrichment locks alive during long batches

This commit is contained in:
qananasikq
2026-08-18 13:47:00 +03:00
parent e6c6732ed8
commit da89304d38
3 changed files with 52 additions and 3 deletions
+33 -1
View File
@@ -81,7 +81,39 @@ class TestMobileDeEnrichment(unittest.TestCase):
self.assertGreaterEqual(selector_kwargs["stale_before"], before)
self.assertLessEqual(selector_kwargs["stale_before"], after)
self.assertEqual(scraper.sync_detail.call_count, 2)
redis_client.eval.assert_called()
# Two heartbeat refreshes plus owner-safe release.
self.assertGreaterEqual(redis_client.eval.call_count, 3)
def test_task_stops_when_enrichment_lock_ownership_is_lost(self) -> None:
enrichment = SimpleNamespace(
enabled=True,
batch_size=1,
max_existing_images=1,
staleness_hours=48,
delay_seconds=0.0,
)
runtime_config = SimpleNamespace(mobilede=SimpleNamespace(enrichment=enrichment))
redis_client = MagicMock()
redis_client.set.return_value = True
redis_client.eval.side_effect = [0, 0]
persistence = MagicMock()
persistence.get_active_cars_batch_for_image_enrich.return_value = [
(1, "mobile.de:111", "https://suchen.mobile.de/fahrzeuge/details.html?id=111", 0),
]
scraper = MagicMock()
with (
patch.object(tasks, "Settings", return_value=SimpleNamespace(runtime_config_file="runtime_config.json")),
patch.object(tasks.RuntimeConfig, "from_file", return_value=runtime_config),
patch.object(tasks, "_get_redis", return_value=redis_client),
patch.object(tasks, "_get_persistence", return_value=persistence),
patch.object(tasks, "MobileDeScraper", return_value=scraper),
):
result = tasks.mobilede_enrich_images_batch_task.run()
self.assertEqual(result["status"], "lock_lost")
self.assertEqual(result["enriched"], 0)
scraper.sync_detail.assert_not_called()
def test_task_skips_when_enrichment_lock_is_held(self) -> None:
enrichment = SimpleNamespace(