diff --git a/cmd/release-controller-api/http.go b/cmd/release-controller-api/http.go index 8135f5078..24e4188a5 100644 --- a/cmd/release-controller-api/http.go +++ b/cmd/release-controller-api/http.go @@ -705,7 +705,14 @@ func (c *Controller) apiReleaseInfo(w http.ResponseWriter, req *http.Request) { }) } - wg.Go(func() { + wg.Add(1) + go func() { + defer wg.Done() + // 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) @@ -771,7 +778,7 @@ func (c *Controller) apiReleaseInfo(w http.ResponseWriter, req *http.Request) { result = append(result, e.APINodeImageStream) } nodeImageStreams = result - }) + }() wg.Wait() 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, "
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) +}