• quince-dotnet quince-dotnet
  • Информация о проекте
    • Информация о проекте
    • Активность
    • Метки
    • Участники
  • Репозиторий
    • Репозиторий
    • Файлы
    • Коммиты
    • Ветки
    • Теги
    • Участники
    • Диаграмма
    • Сравнение
  • mos.track
    • mos.track
    • Список
    • Доски
    • Спринты
  • Запросы на слияние 0
    • Запросы на слияние 0
  • CI/CD
    • CI/CD
    • Конвейеры
    • Задания
    • Расписания
  • Развертывания
    • Развертывания
    • Окружения
    • Релизы
  • Пакеты и реестры
    • Пакеты и реестры
    • Реестр пакетов
    • Реестр контейнеров
  • Мониторинг
    • Мониторинг
    • Инциденты
  • Аналитика
    • Аналитика
    • Поток ценности
    • CI/CD
    • Репозиторий
  • mos.wiki
    • mos.wiki
  • Сниппеты
    • Сниппеты
  • Активность
  • Диаграмма
  • Создать новую задачу
  • Задания
  • Коммиты
  • Доски с задачами
Свернуть панель
  • twelve
  • quince-dotnet
  • Запросы на слияние
  • !4

Веб-интерфейс не ждёт запуска всех каналов при старте

  • Ревью изменений

  • Скачать
  • Почтовые патчи
  • Простое отличие
Слиты twelve запросил слияние fix/startup-blocking в main Авг 27, 2026
  • Обзор 1
  • Коммиты 1
  • Конвейеры 0
  • Изменения 6

Created by: ykmn

Summary

  • Диагностика по прод-логу emg-logger4 (2026-08-27): веб-интерфейс был недоступен ~2м19с после старта процесса. Причина — AudioEngineManager.StartAsync синхронно, по одному, запускал все auto_start-каналы под общей блокировкой, а Kestrel не начинает слушать HTTP, пока не завершатся все hosted-сервисы; один канал с большим хвостом просроченных файлов в retention_days мог задержать всё на минуты, так как AudioWriter.Start() чистил их синхронно.
  • AudioEngineManager.StartAsync теперь запускает все каналы в фоне и возвращается немедленно — Kestrel стартует сразу, каналы появляются запущенными в UI постепенно (через уже существующий StatusUpdated).
  • AudioEngineManager.StopAsync дожидается (до 5с) фонового запуска перед остановкой/очисткой _engines, чтобы не потерять канал, который стартует прямо во время быстрого рестарта.
  • AudioWriter.Start() больше не чистит retention_days синхронно — чистка ушла в фон (без гонки с текущей записью: никогда не трогает сегодняшнюю папку).

Test plan

  • dotnet build — чисто
  • dotnet test — 246/246 зелёных (новый тест AudioWriterCleanupTests.Start_ManyExpiredFolders_ReturnsBeforeCleanupFinishes сначала падал на старом коде за 249мс, затем прошёл)
  • Живая проверка: изолированный dotnet publish + два тестовых канала (один с 500 просроченными папками) — Now listening on появился через ~280мс вместо минут, все 500 папок корректно удалены в фоне

🤖 Generated with Claude Code

Ответственный
Назначить
Проверяющие
Запросить ревью
Оценка трудозатрат
Исходная ветка: fix/startup-blocking