test(worker): 适配 PostgreSQL 咨询锁下的立即重认领语义
Verify / verify (push) Failing after 4m39s

PG 上 worker 持咨询锁会立即重认领 processing 任务,第二次 --once 被导入任务
抢占导致导出断言失败(该测试此前从未在 PG 上真正运行过)。第一次调用后把导入
任务置为 ready 模拟完成,两种后端行为一致
This commit is contained in:
Jayway Liu
2026-09-26 16:19:02 +08:00
parent e90e37b77e
commit f9f9ad751d
+5 -1
View File
@@ -3,7 +3,7 @@ from unittest.mock import patch
import pytest import pytest
from django.core.management import call_command from django.core.management import call_command
from finance.models import FormulaExport from finance.models import Dataset, FormulaExport
pytestmark = pytest.mark.django_db pytestmark = pytest.mark.django_db
@@ -17,6 +17,10 @@ def test_worker_processes_queued_import_and_reports_export_failure(workspace):
) as process_import: ) as process_import:
call_command("import_worker", once=True) call_command("import_worker", once=True)
process_import.assert_called_once_with(ds.pk) process_import.assert_called_once_with(ds.pk)
# PostgreSQL 上 worker 持咨询锁会立即重认领 processing 任务:模拟导入完成,
# 否则第二次 --once 又被它抢占,轮不到下面的导出任务(SQLite 无咨询锁,
# 不走立即恢复路径,两种后端行为一致)。
Dataset.objects.filter(pk=ds.pk).update(status="ready")
export = FormulaExport.objects.create(dataset=ds, user=ds.created_by, context={}) export = FormulaExport.objects.create(dataset=ds, user=ds.created_by, context={})
with patch( with patch(