/status/ runs a full SUM(size) over all artifacts on every call
I maintainer di solito rispondono entro 1 giorno
Nessuno ha ancora preso questa issue.
Valutazione
- Difficoltà
- 3/5
- Tempo stimato
- 1-2 giorni
- Idoneità per principianti
- 35/100
- Tipo di issue
- Bug
- Chiarezza
- Abbastanza chiara
- Stato di attività
- Attiva
- Ambito
- backend, performance
Direzione di ricerca
The full aggregate is in _disk_usage() in pulpcore/app/views/status.py, filtered by pulp_domain and run on every /status/ call when storage is not FileSystem. Read that function and how the storage type is checked, then pick one of the fixes in the issue (periodic task, cache, or an opt-out) after confirming the approach with maintainers. Done means /status/ no longer runs the full SUM(size) per request, with the storage figure still reported.
Scritto dal modello di indicizzazione a partire dal testo della issue.
Descrizione
Version
- pulpcore 3.95.2. The code is the same in 3.121.2 and on
main. - Deployed with pulp-operator, with object storage (Google Cloud Storage) and the default domain only.
Describe the bug
Each call to GET /pulp/api/v3/status/ runs an aggregate over the whole artifact table when the storage is not FileSystem. In pulpcore/app/views/status.py, _disk_usage() does this:
used = Artifact.objects.filter(pulp_domain=domain).aggregate(size=Sum("size", default=0))
This becomes:
SELECT COALESCE(SUM("core_artifact"."size"), $1) AS "size"
FROM "core_artifact"
WHERE "core_artifact"."pulp_domain_id" = $2::uuid
With one domain, the WHERE matches every row, so each call reads all artifacts. The cost grows with the number of artifacts.
The pulp-operator uses /status/ for both default API probes (liveness httpGet, readiness readyz.py). So the query runs on every probe of every API pod, not only when a user asks for the status. In our deployment, this load kept the database CPU high. During package uploads, /status/ became slower than the probe timeout, and the liveness probe restarted healthy API pods.
To Reproduce
- Use object storage (for example S3 or GCS) and a large
core_artifacttable. - Deploy with pulp-operator and the default probes, with many API replicas.
- Look at the query above in
pg_stat_statements, and at the database CPU.
Expected behavior
/status/ is cheap enough to call from health checks. The storage usage does not run a full aggregate on each call.
Some possible fixes:
- Compute the storage usage in a periodic task and store or cache the result.
/status/returns the stored value. - Cache the result of
_disk_usage()for some minutes. - Add a query parameter or a setting to leave
storageout of the response.
Additional context
- #7475 reports the same aggregate in the
otel_metricstask. Per the comments on #7475, the index from #7511 did not help. With one domain, an index-only scan still reads one entry for each artifact. - As a workaround, we override the probes in the
PulpCR: liveness uses/livez/, and readiness calls/status/less often. We opened an issue in pulp-operator to change the defaults: https://github.com/pulp/pulp-operator/issues/1696
- Lingua principale
- Python
- Stelle
- 612
- Fork
- 175
- Merge medio
- 16h 53m
- PR unite (30g)
- 112
Preparare l'ambiente
- Nessun Dockerfile né file Docker Compose
- Ha un modello di pull request
- Leggi la guida per i contributori
Come iniziare
- Leggi tutta la issue e poi la guida ai contributi del progetto.
- Commenta sulla issue per dire che te ne occupi tu — evita che due persone facciano lo stesso lavoro.
- Fai un fork del repository e lavora su un branch.
- Apri una pull request che faccia riferimento al numero della issue.
Altre issue di pulp/pulpcore
-
Reclaim Space Server ErrorApertaIssue
Difficoltà 2/5 1-3 ore Idoneità per principianti 72/100
I maintainer di solito rispondono entro 1 giorno
-
Feature
Difficoltà 2/5 1-3 ore Idoneità per principianti 62/100
pulp/pulpcore#5802 · 10 commenti ·
I maintainer di solito rispondono entro 1 giorno
-
Content cache is cleared when a repository version is started, so concurrent requests re-cache the previous versionForse già presa @aevnsvi l’ha presa 1 giorno fa. Aperta
Difficoltà 4/5 3-5 giorni Idoneità per principianti 42/100
I maintainer di solito rispondono entro 1 giorno
-
Issue Triage-Needed
Difficoltà 4/5 3-5 giorni Idoneità per principianti 45/100
I maintainer di solito rispondono entro 1 giorno
-
Content app answers 404 instead of 502 when the remote of on-demand content is unavailableForse già presa @gigi206 l’ha presa 8 giorni fa. ApertaTriage-Needed
Difficoltà 3/5 Mezza giornata Idoneità per principianti 66/100
I maintainer di solito rispondono entro 1 giorno
Tutte le issue di pulp/pulpcore
Issue simili
-
bug good first issue
Difficoltà 2/5 1-3 ore Idoneità per principianti 78/100
yunaremaia/proto-drift#22 ·
-
bug good first issue
Difficoltà 2/5 1-3 ore Idoneità per principianti 82/100
yunaremaia/memwatch#96 ·
-
bug good first issue
Difficoltà 1/5 Meno di un'ora Idoneità per principianti 91/100
yunaremaia/ci-gate-watch#34 ·
-
bug good first issue
Difficoltà 2/5 1-3 ore Idoneità per principianti 85/100
yunaremaia/agent-capability-attestation#64 ·
I maintainer di solito rispondono entro 1 giorno
-
bug good first issue
Difficoltà 1/5 Meno di un'ora Idoneità per principianti 86/100
yunaremaia/agent-call-graph#43 ·
I maintainer di solito rispondono entro 1 giorno