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

Overlay-base cache restore misses on cache backends that only prefix-match restoreKeys

Aperta Adatta ai principianti
#4,202 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à
1/5
Tempo stimato
Meno di un'ora
Idoneità per principianti
90/100
Tipo di issue
Bug
Chiarezza
Specificata chiaramente
Stato di attività
Attiva
Stack tecnologico
typescript
Ambito
ci-cd

Direzione di ricerca

Inizia da src/overlay/caching.ts, intorno alle righe 290–302, dove downloadOverlayBaseDatabaseFromCache chiama actionsCache.restoreCache passando il prefisso della chiave come unico argomento; confrontalo con il percorso di caricamento subito sopra, che scrive codeql-overlay-base-database-<hash>-<sha>-<run_id>. La correzione consiste nel passare lo stesso prefisso come terzo argomento (restoreKeys). Poi esegui i test esistenti della cache degli overlay nella suite TypeScript per verificare che il comportamento attuale della cache GitHub non subisca regressioni. Il lavoro è completato quando le esecuzioni delle PR sui backend che supportano solo i prefissi possono ripristinare la cache e il comportamento sui runner ospitati da GitHub rimane invariato.

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

Descrizione

Summary

downloadOverlayBaseDatabaseFromCache restores the overlay-base database by passing the key prefix as the primary key, with no restoreKeys:

https://github.com/github/codeql-action/blob/d208ec71e39ae46397cbf6569bef8439b9aab974/src/overlay/caching.ts#L290-L302

actionsCache.restoreCache(
  [dbLocation],
  cacheRestoreKeyPrefix,
  undefined,
  { segmentTimeoutInMs: 3000 },
)

This depends on the primary key matching by prefix. GitHub's cache service does that, but some Actions-cache-compatible backends only prefix-match restoreKeys. One example is the transparent cache on Blacksmith runners. On those backends, PR runs can never restore the overlay-base database, even though default-branch runs upload it successfully. Every PR run then falls back to a full analysis.

What we see

Default-branch run, on the same runner type:

Setting overlay database mode to overlay-base with caching because we are analyzing the default branch.
Uploading overlay-base database to Actions cache with key codeql-overlay-base-database-1-<hash>-python-2.27.1-<sha>-<run_id>-1
Successfully uploaded overlay-base database from /home/runner/_work/_temp/codeql_databases

Pull request run:

Setting overlay database mode to overlay with caching because we are analyzing a pull request.
Looking in Actions cache for overlay-base database with restore key codeql-overlay-base-database-1-<hash>-python-2.27.1-
No overlay-base database found in Actions cache
No overlay-base database found in cache, reverting overlay database mode to none.
Minimal reproduction of the backend difference

A cache entry saved as probe-<run_id>-full, then restored in a later job on the same branch with actions/cache/restore@v4:

Restore GitHub-hosted runner Blacksmith runner
key: probe-<run_id>- (prefix as the primary key, like this action) hit miss
key: probe-<run_id>-nomatch, restore-keys: probe-<run_id>- hit hit
Suggested fix

Also pass the prefix as a restore key:

actionsCache.restoreCache(
  [dbLocation],
  cacheRestoreKeyPrefix,
  [cacheRestoreKeyPrefix],
  { segmentTimeoutInMs: 3000 },
)

On GitHub's cache this matches exactly the same entries as today, since the prefix is tried first either way. On backends that only prefix-match restore keys, overlay analysis starts working.

Environment
  • github/codeql-action/init and analyze @v4, CodeQL bundle 2.27.1
  • build-mode: none, languages python and javascript-typescript
  • Third-party hosted runners (Blacksmith) whose actions/cache calls go to their own cache backend
Lingua principale
TypeScript
Stelle
1.7k
Fork
494
Merge medio
1g 10h
PR unite (30g)
52

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 github/codeql-action

Tutte le issue di github/codeql-action

Issue simili

Altre issue su TypeScript

Ricevi le nuove issue nella tua casella

Un breve riepilogo di issue GitHub adatte ai principianti.