Hacktoberfest 2026: le issue che i maintainer hanno segnato per ottobre, aperte e adatte ai principianti. Sfoglia le issue Hacktoberfest

perf(coderd/database/db2sdk): avoid constructing a full git provider per chat row

Aperta
#28,142 1 commento 0 reazioni 0 assegnatari Vedi su GitHub

I maintainer di solito rispondono entro 1 giorno

Nessuno ha ancora preso questa issue.

Valutazione

Difficoltà
4/5
Tempo stimato
3-5 giorni
Idoneità per principianti
48/100
Tipo di issue
Refactoring
Chiarezza
Abbastanza chiara
Stato di attività
Tranquilla
Stack tecnologico
go

Direzione di ricerca

Leggi coderd/database/db2sdk/db2sdk.go, in particolare il convertitore dello stato del diff della chat e i suoi chiamanti Chat, ChildChatRows e ChatRowsWithChildren, quindi esamina la costruzione di gitprovider e i metodi URL. Confronta le due forme di correzione proposte, esegui i test e i benchmark pertinenti di chat/database se disponibili e conferma che la conversione non costruisce più un provider per riga, mentre gli URL del repository e del branch rimangono corretti.

Scritto dal modello di indicizzazione a partire dal testo della issue.

Descrizione

performance

Follow-up from #27711 (CRF-16).

Problem

coderd/database/db2sdk/db2sdk.go constructs a full GitHub provider per converted chat row to run two pure string functions (ParseRepositoryOrigin and BuildBranchURL).

Measured by four independent reviewers in round 1 of #27711:

  • Construction cost: ~46-73 us, ~46 KB, 451 allocations per call, dominated by three regexp.MustCompile calls in newGitHub plus a fresh 2048-slot cache map.
  • The two string functions actually needed cost ~1.1 us and 195 B. So 97% of the work is thrown away.
  • The construction runs per row via Chat, ChildChatRows and ChatRowsWithChildren (10 call sites), reached from the chat list endpoint. A 100-row list response with branch-but-no-PR rows pays roughly 5 to 7 ms and 4.6 MB of garbage.

Correctness is unaffected: this path only parses and formats URLs, so no ETag state is lost. The code in question:

// coderd/database/db2sdk/db2sdk.go, inside the chat diff status converter
// TODO: This uses the default github.com API base URL,
// so branch URLs for GitHub Enterprise instances will
// be incorrect.
gp, _ := gitprovider.New("github", "", nil)
if gp != nil {
	if owner, repo, _, ok := gp.ParseRepositoryOrigin(status.GitRemoteOrigin); ok {
		branchURL := gp.BuildBranchURL(owner, repo, status.GitBranch)
		...
	}
}

Two fix shapes

  1. Cheap: package-level sync.OnceValue for the default github.com provider.

    • About 5 lines. Kills 97% of the waste for the github.com case, which is the only host this code ever targets today (gitprovider.New("github", "", nil) hardcodes the default base URL).
    • Does not fix the GHE case, but that case is already broken today per the existing TODO.
  2. Proper: move URL parsing and building into package-level functions with package-level regexps, and have the provider methods delegate.

    • About 40 lines, but touches the Provider interface (all implementations).
    • Removes the incentive to construct a provider for string work, not just the cost.
    • Also fixes the existing TODO (GitHub Enterprise hosts get wrong branch URLs) if the functions take the host as a parameter.

The existing TODO above the call already records the correctness half of the same design gap.

Context from #27711

This is the last live instance of the exact class that PR fixed one layer up: per-call provider construction throwing away work and state. Seven reviewers found it independently in round 1, all rated it P4, four with benchmarks that agreed. It predates #27711 and carries no cache state, which is why it stayed out of that PR.

🤖 Generated by Coder Agents on behalf of @johnstcn.

Lingua principale
Go
Stelle
16.6k
Fork
1.6k
Merge medio
2g 4h
PR unite (30g)
501

Preparare l'ambiente

Come iniziare

  1. Leggi tutta la issue e poi la guida ai contributi del progetto.
  2. Commenta sulla issue per dire che te ne occupi tu — evita che due persone facciano lo stesso lavoro.
  3. Fai un fork del repository e lavora su un branch.
  4. Apri una pull request che faccia riferimento al numero della issue.

Altre issue di coder/coder

Tutte le issue di coder/coder

Issue simili

Altre issue su Go

Ricevi le nuove issue nella tua casella

Un breve riepilogo di issue GitHub adatte ai principianti.