AI Server Manager — v1.0.20b
Что исправлено
Версия v1.0.20b направлена на повышение стабильности платформы. Исправлены 18 багов, включая 8 критических проблем, которые были основными причинами падения контейнера с exit code 2.
Критические исправления (CRITICAL)
Data race в GPU мониторах
Исправлена гонка данных в `RocmMonitor.findSmi()` и `NvidiaMonitor.findSmi()` — чтение и запись `smiPath` происходили без блокировки. Теперь используются `m.mu.RLock()` для кеша и `m.mu.Lock()` для записи.
TOCTOU гонка на `isUpdating`
Объединены проверка и установка флага `isUpdating` в один атомарный `m.mu.Lock()` блок. Ранее это создавало окно для конкурентных вызовов.
Goroutine leak в StreamMonitor
Добавлен `done` канал и горутина-читатель. Основной цикл теперь проверяет отключение клиента через `select` на `done` и `time.After`.
Lock upgrade в StartEngine
Убран опасный паттерн `RLock → RUnlock → Lock`. Теперь используется `m.mu.Lock()` с самого начала.
Частичное удаление клиента в Messenger
При eviction из-за переполнения буфера клиент теперь удаляется из `rooms`, `clients`, декрементируется `userConnections` и закрывается `send`.
Исправления памяти (HIGH)
- Goroutine leak при таймауте GPU запроса — добавлен вложенный контекст с `gpuCancel()`
- Завершённые задачи Downloaders теперь удаляются через 30 секунд
- `logsPersisted` теперь устанавливается под `job.mu.Lock()` вместо `RLock`
- Мьютекс больше не удерживается во время 5-секундной команды `amd-smi`
- Записи в БД теперь имеют таймаут 5 секунд
Другие исправления
- **Telegram polling** — таймаут `GetUpdates` уменьшен до 10 секунд, добавлена повторная проверка `stopCh`
- **SSE client ID** — заменён `len(clients)+1` на атомарный счётчик
- **History slice** — `history[1:]` заменён на `make + copy` для полного освобождения памяти
Известные ограничения
Остался один design issue: `MaxOpenConns(1)` в SQLite сериализует все операции с БД. Проблема смягчена добавлением таймаутов, но требует расширенного рефакторинга.
Установка
docker pull deepsharkserver/ai-server-manager:v1.0.20b
docker compose up -d
Подробная документация: https://ai-server-manager.ru/docs