Commit Graph

9 Commits

Author SHA1 Message Date
Hermes Agent 68eefff884 fix: heartbeat воркера — живой джоб не перехватывается как stale
Build Media Mirror Worker / Build and publish (release) Successful in 1m25s
Проблема: returnStaleToNew (stale-timeout 30м) смотрит только taken_at,
который ставится один раз при взятии джоба. Долгий джоб (скачивание 7.2 ГБ
11 мин + конвертация 24 мин > 30 мин) возвращался в очередь и перехватывался
вторым воркером → дубль работы, падение на скачивании, статус failed
при успешно работающем первом воркере.

Решение: heartbeat — пока джоб выполняется, воркер каждые 10 сек обновляет
taken_at (UPDATE ... WHERE status='processing'). Мёртвый воркер по-прежнему
перехватывается через stale-timeout; живой — никогда не считается зависшим.

- JobRepository.heartbeat(id): UPDATE taken_at/updated_at с guard processing
- JobProcessor: параллельная корутина heartbeat (свой CoroutineScope+Dispatchers.IO),
  отмена в finally (done/failed/cancelled)
- AppProperties.heartbeatInterval = 10s, application.yaml heartbeat-interval: 10s
- JobRepositoryTest: heartbeat обновляет processing-джоб, не трогает non-processing
7
2026-08-19 05:16:23 +03:00
Hermes Agent 05a4aa775a feat: видео-кодек h264_nvenc (GPU) вместо libvpx-vp9 (CPU), кодек в конфиг
Build Media Mirror Worker / Build and publish (release) Successful in 1m35s
- AppProperties.videoCodec (дефолт h264_nvenc), application.yaml
- тесты: libx264 (без GPU), JobExecutorTest/JobPollerTest
- аудио libvorbis/ogg и mkv-контейнер не тронуты
6
2026-08-11 00:34:01 +03:00
Hermes Agent 235ae14693 fix: FileInfo.Stream.Data — data-потоки (tmcd/субтитры) не ломают ffprobe-парсинг
Build Media Mirror Worker / Build and publish (release) Successful in 1m35s
- подкласс Stream.Data с @SerialName(data), Subtitle.startTime nullable
- JobExecutor не трогался: filterIsInstance игнорирует Data
- тесты: JSON-фикстура с data-потоком, реальный .mov с tmcd-треком
5
2026-08-11 00:00:39 +03:00
Hermes Agent 72aa501a47 fix: V1__init.sql приведён к api-версии (uq_jobs_active_item), jackson-exclude из webmvc
Build Media Mirror Worker / Build and publish (release) Successful in 1m36s
4
2026-08-10 23:43:11 +03:00
Hermes Agent 91642e4933 fix: убран кривой mainClass (WorkerApplication → WorkerApplicationKt автоматически)
Build Media Mirror Worker / Build and publish (release) Successful in 1m34s
3
2026-08-10 23:37:36 +03:00
Hermes Agent 5dd324e79d db: отдельная база media_mirror вместо glasses
Build Media Mirror Worker / Build and publish (release) Successful in 1m28s
2
2026-08-10 18:06:44 +03:00
Hermes Agent 6056f370f9 ci: CICD-сборка (Gitea Actions: bootJar → docker → helm-publish) + helm-чарт
Build Media Mirror Worker / Build and publish (release) Successful in 3m30s
- workflow на release published: bootJar, build-docker (media-mirror/*), helm-publish (9.9.9 → tag)
- helm: Chart.yaml placeholder 9.9.9, values, templates (deployment/service/configmap/secret)
- env: DB, S3, Jellyfin через secret
1
2026-08-10 17:36:19 +03:00
Hermes Agent 5ad865715e feat: media-mirror-worker — воркер конвертации зеркал (очередь Postgres, ядро из media-transformer)
- очередь: jobs в схеме media_mirror, SELECT ... FOR UPDATE SKIP LOCKED, stale-возврат
- ядро перенесено из media-transformer (FfmpegService, FfprobeService, JellyfinInput, S3Input, OutputService...)
- Spring Boot 4.1.0, Kotlin 2.4.10, kotlinx-serialization 1.11.0, NATS выпилен
- тесты: 45 (SKIP LOCKED параллельный, конец-в-конец до done, конвертация 480p+2 аудио), LINE 93%
2026-08-10 17:29:42 +03:00
subochev dd62744e02 Initial commit 2026-08-10 13:26:10 +00:00