fix(#234): address re-review nits — Settings singleton + docstring sync
1. _acquire_harvest_lock: Settings() instance → singleton 'settings' import from app.core.config — соответствует convention (scrape_kn.py, objective.py, celery_app.py все используют singleton). 2. _trigger_harvest docstring: убрана incorrect фраза «остальные ... видят harvest_eta_seconds от первого запроса» (код возвращает eta=None для denied-lock callers). Заменена на actual behavior: graceful no-data UI с ПКК fallback на FE. PR #250 re-review followup (issues #3 + docstring sync).
This commit is contained in:
parent
b99ac76463
commit
81cf274e80
1 changed files with 8 additions and 5 deletions
|
|
@ -1201,9 +1201,9 @@ def _acquire_harvest_lock(quarter: str) -> bool:
|
|||
try:
|
||||
import redis
|
||||
|
||||
from app.core.config import Settings
|
||||
from app.core.config import settings
|
||||
|
||||
client = redis.Redis.from_url(Settings().redis_url)
|
||||
client = redis.Redis.from_url(settings.redis_url)
|
||||
# SET key value NX EX — атомарно: «установи если не существует, TTL N сек».
|
||||
acquired = client.set(
|
||||
f"nspd_harvest_lock:{quarter}",
|
||||
|
|
@ -1223,10 +1223,13 @@ def _trigger_harvest(quarter: str) -> bool:
|
|||
|
||||
Ленивый импорт чтобы избежать circular import (tasks → services → tasks).
|
||||
|
||||
Issue #234: burst-from N concurrent analyze дедуплицируется через
|
||||
Issue #234: burst N concurrent analyze дедуплицируется через
|
||||
`_acquire_harvest_lock` — только первый запрос ставит task, остальные
|
||||
получают `False` (т.е. harvest_triggered=False) но видят в response
|
||||
`harvest_eta_seconds` от первого запроса и не re-poll сразу.
|
||||
получают `False` (т.е. harvest_triggered=False, harvest_eta_seconds=None).
|
||||
FE при таком ответе показывает graceful no-data UI с ПКК fallback link
|
||||
(не infinite spinner). Trade-off: Request B не видит countdown, но и не
|
||||
сбивает работу Request A. Это намеренный design choice — см. vault
|
||||
fixes/Bug_NSPD_WMS_NotBulk_2026_May14.md.
|
||||
"""
|
||||
if not _acquire_harvest_lock(quarter):
|
||||
logger.info("quarter=%s harvest skipped (lock held by another request)", quarter)
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue