doc: журнал — полный код-ревью сервиса и фиксы замечаний (2026-10-08)
This commit is contained in:
@@ -131,3 +131,21 @@ Redis-схема не меняется (сообщения и так лежат
|
||||
|
||||
Осталось осознанно не тронуто: `DeleteMessageBatch` итерация с `RemoveIndex` внутри
|
||||
безопасна (tombstone не меняет длину) — покрыто тестами.
|
||||
|
||||
## 8. Полный код-ревью сервиса (2026-10-08) — коммит `5b0e89a`
|
||||
|
||||
Разобран весь сервис: auth (SigV4 + JWT), router, billing, tenant, admin/UI API,
|
||||
создание очередей. Критичных проблем не найдено. Исправлено три замечания:
|
||||
|
||||
1. **TOCTOU лимита тенантов** — `TenantStore.Create`: проверка `MaxTenantsGlobal`
|
||||
была только под RLock, вставка — позже под Lock без повторной проверки. Добавлена
|
||||
проверка под Lock (как уже было в `CreateFromJWT`).
|
||||
2. **Потеря `NubesSub` при рестарте** — `CreateFromJWT`: обновлённый `NubesSub`
|
||||
сохранялся в Redis только внутри ветки смены `MaxQueues`; теперь персист при
|
||||
любом реальном изменении, запись только если что-то изменилось.
|
||||
3. **`http.Client` на каждый вызов** — `auth.PingNubesAPI` переведён на общий
|
||||
клиент (keep-alive).
|
||||
|
||||
UI/безопасность проверены отдельно: `listTenants`/`getTenant`/IDOR для UI-тенанта —
|
||||
видит только себя, чужие `{id}` отсекаются, удаление через UI запрещено,
|
||||
`SecretKey` отдаётся только по явному `/ui/api/credentials`.
|
||||
|
||||
Reference in New Issue
Block a user