fix(review): TOCTOU лимита тенантов + персист NubesSub + пакетный http.Client
1. TenantStore.Create: повторная проверка глобального лимита тенантов под Lock (ранняя была под RLock — гонка могла превысить MaxTenantsGlobal). 2. CreateFromJWT: обновлённый NubesSub теперь персистится в Redis (раньше сохранялся только внутри ветки смены MaxQueues и терялся при рестарте); запись в Redis только при реальном изменении. 3. auth.PingNubesAPI: общий http.Client (keep-alive) вместо нового на каждый вызов.
This commit is contained in:
+5
-2
@@ -78,6 +78,10 @@ var nubesAPIEndpoints = []string{
|
||||
"https://lk-api-gateway-dev.ngcloud.ru/api/v1/svc",
|
||||
}
|
||||
|
||||
// nubesHTTPClient — общий клиент для валидации токенов: переиспользует
|
||||
// соединения (keep-alive) вместо создания нового клиента на каждый запрос.
|
||||
var nubesHTTPClient = &http.Client{Timeout: 10 * time.Second}
|
||||
|
||||
// PingNubesAPI — проверяет валидность токена перебором стендов Nubes API.
|
||||
// endpoint (если задан через NUBES_ENDPOINT) пробуется первым.
|
||||
// Логика: токен принимается ТОЛЬКО при явном HTTP 2xx от стенда.
|
||||
@@ -104,8 +108,7 @@ func PingNubesAPI(ctx context.Context, endpoint, token string) error {
|
||||
req.Header.Set("Authorization", "Bearer "+token)
|
||||
req.Header.Set("User-Agent", "Mozilla/5.0")
|
||||
|
||||
client := &http.Client{Timeout: 10 * time.Second}
|
||||
resp, err := client.Do(req)
|
||||
resp, err := nubesHTTPClient.Do(req)
|
||||
if err != nil {
|
||||
lastErr = fmt.Errorf("nubes API unreachable at %s: %w", ep, err)
|
||||
continue
|
||||
|
||||
Reference in New Issue
Block a user