test(worker): 适配 PostgreSQL 咨询锁下的立即重认领语义
PG 上 worker 持咨询锁会立即重认领 processing 任务,第二次 --once 被导入任务 抢占导致导出断言失败(该测试此前从未在 PG 上真正运行过)。第一次调用后把导入 任务置为 ready 模拟完成,两种后端行为一致
This commit is contained in:
@@ -6,7 +6,7 @@ import pytest
|
|||||||
from django.core.management import call_command
|
from django.core.management import call_command
|
||||||
from django.utils import timezone
|
from django.utils import timezone
|
||||||
|
|
||||||
from finance.models import FormulaExport
|
from finance.models import Dataset, FormulaExport
|
||||||
|
|
||||||
pytestmark = pytest.mark.django_db
|
pytestmark = pytest.mark.django_db
|
||||||
|
|
||||||
@@ -20,6 +20,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(
|
||||||
|
|||||||
Reference in New Issue
Block a user