From 2baa88e6c4ccd8afebef4149d2d92b5e284ff06d Mon Sep 17 00:00:00 2001 From: Scott Dodson Date: Mon, 29 Jun 2026 16:23:55 -0400 Subject: [PATCH 1/2] Omit Node Info rendering for 4.18 and earlier rpmdb collection on 4.18 and earlier requires pulling the entire rhel-coreos image. 4.19+ stores the rpmdb separately, making it significantly cheaper. Add ReleaseTagHasCheapRpmdb() which returns false for 4.x tags where x <= 18, and use it to skip Node Info in: - getChangeLog() / renderChangeLog() (HTML page and compare page) - apiReleaseInfo() (API endpoint) Unparseable tags (nightlies, CI builds) are not gated. rh-pre-commit.version: 2.4.0 rh-pre-commit.check-secrets: ENABLED --- cmd/release-controller-api/http.go | 5 +++++ cmd/release-controller-api/http_changelog.go | 13 +++++++++++++ pkg/release-controller/semver.go | 14 ++++++++++++++ 3 files changed, 32 insertions(+) diff --git a/cmd/release-controller-api/http.go b/cmd/release-controller-api/http.go index 8135f5078..f5d00056e 100644 --- a/cmd/release-controller-api/http.go +++ b/cmd/release-controller-api/http.go @@ -706,6 +706,11 @@ func (c *Controller) apiReleaseInfo(w http.ResponseWriter, req *http.Request) { } wg.Go(func() { + // Skip node image info for 4.18 and earlier: rpmdb collection requires + // pulling the entire rhel-coreos image for those releases. + if !releasecontroller.ReleaseTagHasCheapRpmdb(tagInfo.Tag) { + return + } streams, err := c.releaseInfo.ListMachineOSStreams(tagInfo.TagPullSpec) if err != nil { nodeImageErr = newHTTPError(http.StatusInternalServerError, "listing machine-OS streams for %s: %w", tagInfo.Tag, err) diff --git a/cmd/release-controller-api/http_changelog.go b/cmd/release-controller-api/http_changelog.go index b6f3d87ca..99d7cfc50 100644 --- a/cmd/release-controller-api/http_changelog.go +++ b/cmd/release-controller-api/http_changelog.go @@ -88,6 +88,13 @@ func (c *Controller) getChangeLog(ctx context.Context, ch chan renderResult, chN return } + // Skip node image info for 4.18 and earlier: rpmdb collection requires + // pulling the entire rhel-coreos image for those releases. + if !releasecontroller.ReleaseTagHasCheapRpmdb(toTag) { + chNodeInfo <- renderResult{} + return + } + toImagePullspec := toImage.GenerateDigestPullSpec() fromImagePullspec := fromImage.GenerateDigestPullSpec() @@ -200,6 +207,12 @@ func (c *Controller) renderChangeLog(w http.ResponseWriter, fromPull string, fro return } + // Skip node image info for 4.18 and earlier: rpmdb collection requires + // pulling the entire rhel-coreos image for those releases. + if !releasecontroller.ReleaseTagHasCheapRpmdb(toTag) { + return + } + fmt.Fprintf(w, "

Node Image Info

") fmt.Fprintf(w, `

Loading node image info, this may take a while ...

`) flusher.Flush() diff --git a/pkg/release-controller/semver.go b/pkg/release-controller/semver.go index 2a0a8588a..60ec0a5f7 100644 --- a/pkg/release-controller/semver.go +++ b/pkg/release-controller/semver.go @@ -174,3 +174,17 @@ func ReleaseTagIsDualRHCOS(toTag string) bool { } return v.Major == 4 && v.Minor >= 21 } + +// ReleaseTagHasCheapRpmdb reports whether the target release tag supports +// rpmdb collection without pulling the entire rhel-coreos image. +// Releases 4.19 and later store the rpmdb separately; 4.18 and earlier +// require pulling the full image, so Node Info is omitted for those releases. +// If the tag cannot be parsed as a semver version, it is assumed to support +// cheap rpmdb (i.e., nightly or CI tags are not gated). +func ReleaseTagHasCheapRpmdb(toTag string) bool { + v, err := SemverParseTolerant(toTag) + if err != nil { + return true + } + return !(v.Major == 4 && v.Minor <= 18) +} From 1fa26a95aa4189a8fcf5afb624959283b4c1635c Mon Sep 17 00:00:00 2001 From: Scott Dodson Date: Tue, 30 Jun 2026 10:53:37 -0400 Subject: [PATCH 2/2] pkg/release-controller: apply De Morgan's law to satisfy staticcheck rh-pre-commit.version: 2.4.0 rh-pre-commit.check-secrets: ENABLED --- pkg/release-controller/semver.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pkg/release-controller/semver.go b/pkg/release-controller/semver.go index 60ec0a5f7..446b39f16 100644 --- a/pkg/release-controller/semver.go +++ b/pkg/release-controller/semver.go @@ -186,5 +186,5 @@ func ReleaseTagHasCheapRpmdb(toTag string) bool { if err != nil { return true } - return !(v.Major == 4 && v.Minor <= 18) + return v.Major != 4 || v.Minor > 18 }