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