perf(trace): post-commit starts three git processes for each committed file
Les mainteneurs répondent en général sous 1 jour
Personne n'a encore pris cette issue.
Évaluation
- Difficulté
- 4/5
- Temps estimé
- 3-5 jours
- Accessibilité débutants
- 62/100
- Type d'issue
- Bug
- Clarté
- Clairement spécifiée
- Activité
- Active
- Stack technique
- git, go
- Domaine
- cli, performance
Piste de recherche
Start with settleCommittedLines in app/cli/pkg/action/trace_hook_handler.go and FileAt in app/cli/internal/trace/git/lines.go; check how both ExecClient and GoGitClient read committed files. Then inspect recordRootChanges in app/cli/pkg/action/trace_agent_hook.go and the relevant existing tests. Done when both callers can read multiple paths without resolving the same commit separately for every file, and paths missing from the commit still produce no content.
Rédigé par le modèle d'indexation à partir du texte de l'issue.
Description
Problem
The post-commit hook of Chainloop Trace starts 3 git processes for each committed file that has pending AI lines. A large commit makes the hook slow.
settleCommittedLines (app/cli/pkg/action/trace_hook_handler.go) calls client.FileAt(repoRoot, sha, path) one time for each pending path in each session. ExecClient.FileAt (app/cli/internal/trace/git/lines.go) runs these commands for each call:
git rev-parse --verify --quiet <sha>^{commit}git cat-file -e <sha>:<path>git cat-file blob <sha>:<path>
The commit SHA is the same for all the files. Thus step 1 runs again for each file without a reason.
Measurement
Local clone of this repository (3.3k files). One commit changes 301 files, and all the changes are AI lines that are pending.
| Item | Value |
|---|---|
Git processes that post-commit starts |
More than 900 |
Time of post-commit |
Approximately 5.2 s |
This is on main. It is not caused by #3631.
Suggested fix
Read all the files with one git cat-file --batch process. Send one <sha>:<path> line for each path on stdin. For a path that is not in the commit, Git prints <sha>:<path> missing. Use this result as "no content", as FileAt does now. Resolve the commit one time before the loop.
For example, add a Client method that takes a revision and a list of paths and returns the content by path. The GoGitClient version can read the commit tree one time.
recordRootChanges (app/cli/pkg/action/trace_agent_hook.go) calls FileAt for each changed path in the same way, during PostToolUse for Bash calls. The same method can fix that caller too.
- Langage dominant
- Go
- Étoiles
- 582
- Forks
- 61
- Merge moyen
- 12 h 47 min
- PR mergées (30 j)
- 137
Préparer son environnement
- Aucun Dockerfile ni fichier Docker Compose
- Aucun modèle de pull request
- Lire le guide de contribution
Par où commencer
- Lisez l'issue en entier, puis le guide de contribution du projet.
- Signalez en commentaire que vous la prenez — cela évite que deux personnes fassent le même travail.
- Forkez le dépôt et travaillez sur une branche.
- Ouvrez une pull request qui référence le numéro de l'issue.
Autres issues de chainloop-dev/chainloop
-
feature-parity trace-provider
Difficulté 2/5 1-3 heures Accessibilité débutants 70/100
chainloop-dev/chainloop#3802 ·
Les mainteneurs répondent en général sous 1 jour
-
bug trace-provider
Difficulté 4/5 3-5 jours Accessibilité débutants 48/100
chainloop-dev/chainloop#3803 ·
Les mainteneurs répondent en général sous 1 jour
-
feat(trace): support GitHub Copilot (CLI and VS Code) in Chainloop TracePeut-être pris @migmartri l’a pris aujourd’hui. OuverteFeature spec trace-provider
chainloop-dev/chainloop#3800 · 1 commentaire · 1 personne assignée ·
Les mainteneurs répondent en général sous 1 jour
-
Allow enabling policy enforcement at the workflow contract levelPeut-être pris @migmartri l’a pris il y a 10 jours. Ouvertecomponent/backend new-policy spec
chainloop-dev/chainloop#3762 · 1 commentaire · 1 personne assignée ·
Les mainteneurs répondent en général sous 1 jour
-
chainloop component/CLI performance trace-provider
Difficulté 2/5 1-3 heures Accessibilité débutants 25/100
chainloop-dev/chainloop#3749 ·
Les mainteneurs répondent en général sous 1 jour
Toutes les issues de chainloop-dev/chainloop
Issues similaires
-
GitHub webhook is not subscribed to release events, so `event: release` never triggersPeut-être pris @qsun l’a pris aujourd’hui. Ouverte
Difficulté 2/5 1-3 heures Accessibilité débutants 78/100
woodpecker-ci/woodpecker#7542 ·
Les mainteneurs répondent en général sous 1 jour
-
Difficulté 2/5 1-3 heures Accessibilité débutants 74/100
zilliztech/milvus-backup#1386 ·
Les mainteneurs répondent en général sous 1 jour
-
Pipelined flush no longer observes kill signals after #2042: flush backoffer is built with nil varsOuverte
Difficulté 2/5 1-3 heures Accessibilité débutants 78/100
Les mainteneurs répondent en général sous 1 jour
-
model:sonnet runtime:claude security size:S
Difficulté 2/5 1-3 heures Accessibilité débutants 78/100
FootprintAI/Containarium#3624 · 1 commentaire ·
Les mainteneurs répondent en général sous 1 jour
-
Difficulté 2/5 1-3 heures Accessibilité débutants 86/100
Les mainteneurs répondent en général sous 1 jour