Add cache_repodata toggle for github_rpm remotes (#168)

github_rpm remotes regenerate repomd and all three gz files from every metadata row on each request, which is expensive for large repos under repeated dnf traffic.

- add a per-remote `cache_repodata` toggle (column, model, v2 API, docs)
- cache built repodata per replica, rebuilt via singleflight when the `count(*)`+`max(id)` row fingerprint moves
- store a build only if no newer build has landed; evict idle entries hourly
- map cached-path DB errors like the uncached path: 503 + Retry-After on cancel/deadline, generic 500 otherwise
- check `cacheEmpty` via the fingerprint for all github_rpm remotes, not only cached ones

Reviewed-on: #168
Co-authored-by: unkin-agent <unkin-agent@unkin.net>
Co-committed-by: unkin-agent <unkin-agent@unkin.net>
This commit was merged in pull request #168.
This commit is contained in:
2026-10-25 20:21:19 +11:00
committed by BenVincent
parent ee55ef3fcd
commit f1b78988e4
13 changed files with 648 additions and 26 deletions
+4
View File
@@ -84,6 +84,10 @@ type Remote struct {
ReleasesRemote string `json:"releases_remote,omitempty"`
ManagedBy string `json:"managed_by,omitempty"`
// CacheRepodata keeps a github_rpm remote's generated repodata in memory,
// rebuilding it only when its metadata rows change.
CacheRepodata bool `json:"cache_repodata"`
CreatedAt time.Time `json:"created_at"`
UpdatedAt time.Time `json:"updated_at"`
}