Files
wiki/tasks/enduro-trails/reports/dev-2026-05-04-phase3-bugfix.md
2026-05-04 11:40:01 +03:00

3.8 KiB
Raw Blame History

Dev Report: Enduro Trails Фаза 3 — Bugfix

Дата: 2026-05-04 Статус: DONE

Задача

Исправить 2 бага в Enduro Trails Фаза 3:

  1. app.py: OSRM возвращает code: "TooBig" при alternatives=5 → 404
  2. app.js: formatDuration(86400)"1 дн 0 ч" вместо "1 дн"

Сделано

  • Прочитал app.py и app.js
  • Баг 1: добавил retry-логику в POST /api/route — сначала alternatives=3, затем alternatives=false
  • Баг 2: исправил ветку days > 0 в formatDuration — добавил проверку hours === 0 && mins === 0
  • Обновил файлы в workspace
  • Задеплоил через Node.js ssh2 (SSH бинарник не работает из контейнера — GLIBC mismatch)
  • Обнаружил что контейнер собран из образа (не bind-mount) → использовал docker cp для копирования файлов в контейнер
  • Перезапустил контейнер (docker compose restart)
  • Проверил что фикс выжил после рестарта (TooBig: 4 вхождения в контейнере)
  • Прогнал тест — маршрут возвращается, pct sum = 100

Изменённые файлы

  • workspace/tasks/enduro-trails/prototype/app.py — retry-логика TooBig (строки ~500-525)
  • workspace/tasks/enduro-trails/prototype/static/app.js — formatDuration fix

Результат

Баг 1 — TooBig fix

OSRM на mva154 имеет максимум 3 альтернативы (не 5). Любой запрос с alternatives=5 возвращает TooBig. Retry-цепочка: alternatives=5 → TooBig → alternatives=3 → если снова TooBig → alternatives=false.

Тест короткого маршрута (37.6184,55.7512 → 37.8,55.85):

routes count: 3
distance_m: 18858
pct sum: 100 OK

Тест длинного маршрута ~127км (37.6184,55.7512 → 36.7,56.3):

routes count: 1
distance_m: 127088
pct sum: 100 OK

Баг 2 — formatDuration fix

formatDuration(86400): "1 дн"       ✅ (было "1 дн 0 ч")
formatDuration(90000): "1 дн 1 ч"   ✅
formatDuration(93600): "1 дн 2 ч"   ✅

Проблемы и решения

SSH бинарник не работает из контейнера

GLIBC mismatch: ssh: /lib/x86_64-linux-gnu/libc.so.6: version 'GLIBC_2.38' not found → Решение: Node.js скрипт с npm ssh2 для всех SSH операций.

Stale lock на mva154

Осталась незавершённая сессия от 2026-05-03 (add-swap-4g). PID 78077 мёртв. → Решение: удалил lock directory вручную, создал новую сессию.

Контейнер собран из образа (не bind-mount)

docker compose restart перезапускает контейнер из существующего образа — файлы на хосте не попадают внутрь. → Решение: docker cp для копирования файлов прямо в работающий контейнер, затем restart. → Урок: при следующем деплое либо добавить bind-mount в docker-compose.yml, либо делать docker compose build && docker compose up -d.

Следующий шаг

Для постоянного решения — добавить bind-mount в docker-compose.yml:

volumes:
  - /home/slin/enduro-trails/data:/data
  - /home/slin/enduro-trails/prototype/app.py:/app/app.py
  - /home/slin/enduro-trails/prototype/static:/app/static

Тогда деплой = просто скопировать файл на хост + docker compose restart.