You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
{{ message }}
Repository navigation
/projects выполняет git pull (autoPullState) на каждый запрос и всегда падает без github-кредов (exit 128) #449
Каждый GET /projects (рендер панели) синхронно делает git pull state-репозитория, хотя список проектов читается из «БД» (файлов) и в git-сети не нуждается.
Цепочка (packages/api/src/services/projects.ts):
exportconstlistProjects=()=>readProjectItemsForInventory().pipe(...)// ~628exportconstreadProjectItemsForInventory=()=>refreshProjectStateForInventory().pipe(// ~251Effect.zipRight(listProjectItems),)exportconstrefreshProjectStateForInventory=()=>autoPullState// ~249 <-- git pull на каждый read
Иронично, что рядом стоят комментарии, декларирующие обратное:
// FORMAT THEOREM: forall p in DB: listProjects(p) does not require docker(p)// CHANGE: keep project inventory reads DB-only
По факту read-путь дергает сеть + берёт state git-lock (см. связанный issue про зависание панели).
Дополнительно: pull всегда падает без github-кредов
В нашем окружении autoPullState стабильно падает:
WARN: State auto-pull failed: git pull (exit 128)
Причина — у контейнера docker-git-api нет github-credential для https://github.com/<owner>/.docker-git.git:
$ git -C /home/dev/.docker-git fetch origin
fatal: could not read Username for 'https://github.com': No such device or address
То есть на каждый рендер панели: сетевой git-вызов + захват лока + гарантированная ошибка + запись в лог. Даже когда лок не залип, это лишняя латентность и шум.
Предложение
Отвязать чтение инвентаря от autoPullState. Pull делать по расписанию (фоновый тик) и/или по явному действию пользователя («Sync»), а GET /projects пусть читает только из файлов/кэша.
Если auto-pull на старте всё же нужен — делать его один раз при инициализации, а не на hot-path каждого запроса.
Уважать DOCKER_GIT_STATE_AUTO_PULL=false как быстрый выключатель (сейчас помогает, но по умолчанию латентность всё равно есть). Возможно, авто-отключать pull после N подряд неуспешных попыток (например, когда нет кредов), чтобы не долбить впустую.
Связано
Зависание панели на ~24с из-за stale state-лока (отдельный issue) — этот дизайн-дефект и ставит git-лок на hot-path чтения.
Activity