fix: разовая проверка не затирает более свежий локальный отзыв
lct-42: стейл-ответ SELECT, пришедший после конкурентного invalidate_login на том же узле, откатывал поколение назад и снова принимал отозванную cookie. После ожидания перепроверяем кэш и не перезаписываем более свежее значение. Детерминированный тест гонки; SCALE-OUT.md отделяет старые замеры от непроверенного кластерным смоуком изменения.
This commit is contained in:
parent
b6617d7df8
commit
42f1da7f83
2 changed files with 45 additions and 0 deletions
|
|
@ -166,6 +166,12 @@ async def _resolve_unknown_login(login: str) -> int | None:
|
|||
except Exception as exc: # noqa: BLE001 — fail closed, not FORBIDDEN
|
||||
log.error("разовая проверка полномочий не удалась (%s)", type(exc).__name__)
|
||||
raise _AuthStateUnavailable from exc
|
||||
# A concurrent local revoke or sync tick may have written a newer
|
||||
# generation while the SELECT above was in flight; the stale read
|
||||
# must never clobber it back to an older, already-revoked epoch.
|
||||
cached = _generations.get(login)
|
||||
if cached is not None:
|
||||
return cached
|
||||
if version is None:
|
||||
return None
|
||||
_generations[login] = version
|
||||
|
|
|
|||
Loading…
Reference in a new issue