Skip to content

OCPBUGS-105432: fix nil pointer panic in IRI controller informer race - #6385

Merged
stbenjam merged 1 commit into
openshift:mainfrom
redhat-chai-bot:fix/iri-informer-race-nil-panic
Aug 8, 2026
Merged

OCPBUGS-105432: fix nil pointer panic in IRI controller informer race#6385
stbenjam merged 1 commit into
openshift:mainfrom
redhat-chai-bot:fix/iri-informer-race-nil-panic

Conversation

@redhat-chai-bot

@redhat-chai-bot redhat-chai-bot commented Aug 7, 2026

Copy link
Copy Markdown
Contributor

Summary

Fixes a nil pointer panic in the InternalReleaseImage controller caused by a race condition in informer startup ordering.

The New() constructor registered AddEventHandler callbacks (L114-L146) before assigning listers like ctrl.nodeLister (L165). When informers are already started, they replay synthetic Add events on a separate goroutine that races the main goroutine — isControlPlaneNode (L387) reads ctrl.nodeLister before it is assigned, causing SIGSEGV addr=0x18.

Root Cause

Introduced by MCO #5841 (AGENT-1488, merged 2026-05-26). The code was latent for 71 days until openshift/api #2859 (merged 2026-08-04) flipped NoRegistryClusterInstall to Default, activating the IRI controller for the first time.

The panic is intermittent (~1.4%/run) but triggers the zero-tolerance "Pods must not panic" aggregated test, causing ~13% payload rejection rate. The 5.0 CI stream has had 5+ consecutive rejections.

Changes

  1. Reorder New() constructor: Move all 8 lister and HasSynced assignments to before the AddEventHandler registrations. Pure statement reordering — no logic change. Includes an explanatory comment about the race.
  2. Add nil guards: Defensive nil checks in isControlPlaneNode (L387) and isNodeReady (L406) — if nodeLister is nil, log a warning and return false.

Testing

  • go build
  • go vet
  • go test -race -count=1 ✅ (5 PASS, 0 FAIL, race detector clean)
  • gofmt

Tracking


AI-generated. Review for accuracy.

@smg247 requested in Slack thread

Summary by CodeRabbit

  • Bug Fixes
    • Improved controller startup reliability by preventing events from being processed before required data is available.
    • Prevented crashes when node information cannot be accessed.
    • The controller now logs a warning and safely reports nodes as unavailable when necessary.

@openshift-merge-bot

Copy link
Copy Markdown
Contributor

Pipeline controller notification
This repo is configured to use the pipeline controller. Second-stage tests will be triggered either automatically or after lgtm label is added, depending on the repository configuration. The pipeline controller will automatically detect which contexts are required and will utilize /test Prow commands to trigger the second stage.

For optional jobs, comment /test ? to see a list of all defined jobs. To trigger manually all jobs from second stage use /pipeline required command.

This repository is configured in: LGTM mode

@coderabbitai

coderabbitai Bot commented Aug 7, 2026

Copy link
Copy Markdown

No actionable comments were generated in the recent review. 🎉

ℹ️ Recent review info
⚙️ Run configuration

Configuration used: Repository: openshift/coderabbit/.coderabbit.yaml

Review profile: CHILL

Plan: Pro Plus

Run ID: de01742b-99f5-404b-a8fe-300edceb564b

📥 Commits

Reviewing files that changed from the base of the PR and between 4363e8c and 0607190.

📒 Files selected for processing (2)
  • pkg/controller/internalreleaseimage/internalreleaseimage_controller.go
  • pkg/controller/internalreleaseimage/internalreleaseimage_controller_test.go
🚧 Files skipped from review as they are similar to previous changes (1)
  • pkg/controller/internalreleaseimage/internalreleaseimage_controller.go

Walkthrough

The controller now initializes informer listers before registering event handlers. Node helper methods return false and log warnings when the node lister is unavailable. A regression test covers construction with already-started informers.

Changes

Internal release image controller

Layer / File(s) Summary
Constructor initialization and replay validation
pkg/controller/internalreleaseimage/internalreleaseimage_controller.go, pkg/controller/internalreleaseimage/internalreleaseimage_controller_test.go
The constructor assigns listers and synchronization callbacks before registering handlers. The test verifies that replayed MachineConfigNode events enqueue the singleton InternalReleaseImage.
Node lister guard behavior
pkg/controller/internalreleaseimage/internalreleaseimage_controller.go
isControlPlaneNode and isNodeReady log warnings and return false when the node lister is nil.

Estimated code review effort: 2 (Simple) | ~10 minutes

Sequence Diagram(s)

sequenceDiagram
  participant Informers
  participant ControllerNew
  participant MachineConfigNodeHandler
  participant IRIQueue
  Informers->>ControllerNew: Start and synchronize informers
  ControllerNew->>ControllerNew: Initialize listers and callbacks
  ControllerNew->>MachineConfigNodeHandler: Register event handler
  Informers->>MachineConfigNodeHandler: Replay MachineConfigNode event
  MachineConfigNodeHandler->>IRIQueue: Enqueue InternalReleaseImage
Loading

Suggested reviewers: rwsu, andfasano

🚥 Pre-merge checks | ✅ 15
✅ Passed checks (15 passed)
Check name Status Explanation
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Title check ✅ Passed The title clearly identifies the nil pointer panic and informer race fixed by the pull request.
Docstring Coverage ✅ Passed No functions found in the changed files to evaluate docstring coverage. Skipping docstring coverage check.
Linked Issues check ✅ Passed Check skipped because no linked issues were found for this pull request.
Out of Scope Changes check ✅ Passed Check skipped because no linked issues were found for this pull request.
Stable And Deterministic Test Names ✅ Passed The added test uses the static name TestNewWithAlreadyStartedInformers; affected-package subtests use static table names, with no Ginkgo titles or dynamic values.
Test Structure And Quality ✅ Passed The PR adds a standard Go testing/Testify unit test, not Ginkgo code; no It, BeforeEach, or AfterEach blocks are present, so this Ginkgo-specific check is not applicable.
Microshift Test Compatibility ✅ Passed The PR adds a standard Go unit test, not a Ginkgo e2e test; no It, Describe, Context, or When constructs were added, so the MicroShift e2e compatibility check does not apply.
Single Node Openshift (Sno) Test Compatibility ✅ Passed The pull request adds only a standard Go unit test, TestNewWithAlreadyStartedInformers; it adds no Ginkgo e2e test requiring SNO compatibility review.
Topology-Aware Scheduling Compatibility ✅ Passed The patch changes informer initialization, nil guards, and a regression test only; it adds no workload manifests, replicas, affinity, selectors, tolerations, topology constraints, or PDBs.
Ote Binary Stdout Contract ✅ Passed The PR changes only controller code and a unit test; it adds no OTE main/suite setup or stdout writes, and cmd/machine-config-tests-ext/main.go is unchanged.
Ipv6 And Disconnected Network Test Compatibility ✅ Passed The added regression test uses Go testing with fake clients and informers; it adds no Ginkgo e2e test, IPv4 assumption, or external connectivity.
No-Weak-Crypto ✅ Passed The PR diff adds informer setup, nil guards, and a regression test only; no MD5/SHA1/DES/RC4/Blowfish/ECB APIs, custom crypto, or secret comparisons were added.
Container-Privileges ✅ Passed The commit changes only two Go files. No added manifest or container security setting enables privileged, host namespaces, SYS_ADMIN, root, or allowPrivilegeEscalation.
No-Sensitive-Data-In-Logs ✅ Passed The PR adds only fixed lister-state warnings; it does not log passwords, tokens, API keys, PII, hostnames, session IDs, or customer data.
✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

@openshift-ci
openshift-ci Bot requested review from andfasano and rwsu August 7, 2026 15:58
@bfournie

bfournie commented Aug 7, 2026

Copy link
Copy Markdown
Contributor

/lgtm

@openshift-ci openshift-ci Bot added the lgtm Indicates that a PR is ready to be merged. label Aug 7, 2026
@openshift-merge-bot

Copy link
Copy Markdown
Contributor

Scheduling tests matching the pipeline_run_if_changed or not excluded by pipeline_skip_if_only_changed parameters:
/test e2e-aws-ovn
/test e2e-aws-ovn-upgrade
/test e2e-gcp-op-ocl-part1
/test e2e-gcp-op-ocl-part2
/test e2e-gcp-op-part1
/test e2e-gcp-op-part2
/test e2e-gcp-op-single-node
/test e2e-hypershift
/test tls-pqc-readiness

@openshift-ci openshift-ci Bot added the approved Indicates a PR has been approved by an approver from all required OWNERS files. label Aug 7, 2026
@bfournie

bfournie commented Aug 7, 2026

Copy link
Copy Markdown
Contributor

/jira refresh

@openshift-ci-robot

Copy link
Copy Markdown
Contributor

@bfournie: No Jira issue is referenced in the title of this pull request.
To reference a jira issue, add 'XYZ-NNN:' to the title of this pull request and request another refresh with /jira refresh.

Details

In response to this:

/jira refresh

Instructions for interacting with me using PR comments are available here. If you have questions or suggestions related to my behavior, please file an issue against the openshift-eng/jira-lifecycle-plugin repository.

@bfournie

bfournie commented Aug 7, 2026

Copy link
Copy Markdown
Contributor

/test ?

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 1

🧹 Nitpick comments (1)
pkg/controller/internalreleaseimage/internalreleaseimage_controller.go (1)

114-143: 🩺 Stability & Availability | 🔵 Trivial | ⚡ Quick win

Add a regression test for the startup-order case.

The supplied fixture constructs New before it starts the informer factories. It does not exercise registering mcnInformer handlers after the informer has started. Add or locate a test that starts and preloads mcnInformer before New, then verifies construction completes without a panic.

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@pkg/controller/internalreleaseimage/internalreleaseimage_controller.go`
around lines 114 - 143, The existing tests do not cover registering mcnInformer
handlers after the informer has started. Add a regression test that preloads and
starts mcnInformer before calling New, then verify New completes without
panicking, while preserving the existing fixture behavior for other startup
orders.
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Inline comments:
In `@pkg/controller/internalreleaseimage/internalreleaseimage_controller.go`:
- Around line 396-398: Update the warning calls in the nodeLister checks within
the internal release image controller to stop logging raw nodeName values;
remove the interpolated node name or use the repository’s approved redaction
helper while preserving the warning and return behavior.

---

Nitpick comments:
In `@pkg/controller/internalreleaseimage/internalreleaseimage_controller.go`:
- Around line 114-143: The existing tests do not cover registering mcnInformer
handlers after the informer has started. Add a regression test that preloads and
starts mcnInformer before calling New, then verify New completes without
panicking, while preserving the existing fixture behavior for other startup
orders.
🪄 Autofix

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: Repository: openshift/coderabbit/.coderabbit.yaml

Review profile: CHILL

Plan: Pro Plus

Run ID: 76c7be4f-31fe-4ba4-83f0-9180440b5d31

📥 Commits

Reviewing files that changed from the base of the PR and between f6aefa6 and 4363e8c.

📒 Files selected for processing (1)
  • pkg/controller/internalreleaseimage/internalreleaseimage_controller.go

@bfournie

bfournie commented Aug 7, 2026

Copy link
Copy Markdown
Contributor

/retitle OCPBUGS-105432: fix nil pointer panic in IRI controller informer race

@openshift-ci openshift-ci Bot changed the title Bug 105432: fix nil pointer panic in IRI controller informer race OCPBUGS-105432: fix nil pointer panic in IRI controller informer race Aug 7, 2026
@openshift-ci-robot openshift-ci-robot added jira/valid-reference Indicates that this PR references a valid Jira ticket of any type. jira/invalid-bug Indicates that a referenced Jira bug is invalid for the branch this PR is targeting. labels Aug 7, 2026
@openshift-ci-robot

Copy link
Copy Markdown
Contributor

@redhat-chai-bot: This pull request references Jira Issue OCPBUGS-105432, which is invalid:

  • expected the bug to target the "5.0.0" version, but no target version was set

Comment /jira refresh to re-evaluate validity if changes to the Jira bug are made, or edit the title of this pull request to link to a different bug.

The bug has been updated to refer to the pull request using the external bug tracker.

Details

In response to this:

Summary

Fixes a nil pointer panic in the InternalReleaseImage controller caused by a race condition in informer startup ordering.

The New() constructor registered AddEventHandler callbacks (L114-L146) before assigning listers like ctrl.nodeLister (L165). When informers are already started, they replay synthetic Add events on a separate goroutine that races the main goroutine — isControlPlaneNode (L387) reads ctrl.nodeLister before it is assigned, causing SIGSEGV addr=0x18.

Root Cause

Introduced by MCO #5841 (AGENT-1488, merged 2026-05-26). The code was latent for 71 days until openshift/api #2859 (merged 2026-08-04) flipped NoRegistryClusterInstall to Default, activating the IRI controller for the first time.

The panic is intermittent (~1.4%/run) but triggers the zero-tolerance "Pods must not panic" aggregated test, causing ~13% payload rejection rate. The 5.0 CI stream has had 5+ consecutive rejections.

Changes

  1. Reorder New() constructor: Move all 8 lister and HasSynced assignments to before the AddEventHandler registrations. Pure statement reordering — no logic change. Includes an explanatory comment about the race.
  2. Add nil guards: Defensive nil checks in isControlPlaneNode (L387) and isNodeReady (L406) — if nodeLister is nil, log a warning and return false.

Testing

  • go build
  • go vet
  • go test -race -count=1 ✅ (5 PASS, 0 FAIL, race detector clean)
  • gofmt

Tracking


AI-generated. Review for accuracy.

@smg247 requested in Slack thread

Summary by CodeRabbit

  • Bug Fixes
  • Improved reliability during controller startup by preventing event processing before required data is available.
  • Added safeguards to avoid crashes when node information cannot be accessed.
  • The controller now logs a warning and safely reports nodes as unavailable when necessary.

Instructions for interacting with me using PR comments are available here. If you have questions or suggestions related to my behavior, please file an issue against the openshift-eng/jira-lifecycle-plugin repository.

@smg247

smg247 commented Aug 7, 2026

Copy link
Copy Markdown
Member

/retitle OCPBUGS-105432: fix nil pointer panic in IRI controller informer race

@bfournie

bfournie commented Aug 7, 2026

Copy link
Copy Markdown
Contributor

/test e2e-agent-compact-ipv4-iso-no-registry

@bfournie

bfournie commented Aug 7, 2026

Copy link
Copy Markdown
Contributor

/jira refresh

@openshift-ci-robot openshift-ci-robot added jira/valid-bug Indicates that a referenced Jira bug is valid for the branch this PR is targeting. and removed jira/invalid-bug Indicates that a referenced Jira bug is invalid for the branch this PR is targeting. labels Aug 7, 2026
@openshift-ci-robot

Copy link
Copy Markdown
Contributor

@bfournie: This pull request references Jira Issue OCPBUGS-105432, which is valid. The bug has been moved to the POST state.

3 validation(s) were run on this bug
  • bug is open, matching expected state (open)
  • bug target version (5.0.0) matches configured target version for branch (5.0.0)
  • bug is in the state New, which is one of the valid states (NEW, ASSIGNED, POST)
Details

In response to this:

/jira refresh

Instructions for interacting with me using PR comments are available here. If you have questions or suggestions related to my behavior, please file an issue against the openshift-eng/jira-lifecycle-plugin repository.

The InternalReleaseImage controller's New() constructor registered informer
event handlers before assigning the listers. When an informer is already
started, AddEventHandler replays synthetic Add events on a separate goroutine,
which could invoke isControlPlaneNode/isNodeReady before ctrl.nodeLister was
assigned, causing a nil pointer panic.

Move all lister and HasSynced assignments ahead of the AddEventHandler
registrations (pure reordering, no logic change), and add defensive nil guards
in isControlPlaneNode and isNodeReady that log a warning and return false when
the nodeLister is not yet initialized. The guard warnings intentionally omit the
node name to avoid logging potentially sensitive infrastructure identifiers.

Add TestNewWithAlreadyStartedInformers, a regression test that starts and
preloads the informers before calling New() to exercise the replayed-event path
and assert construction completes without panicking.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
@redhat-chai-bot
redhat-chai-bot force-pushed the fix/iri-informer-race-nil-panic branch from 4363e8c to 0607190 Compare August 7, 2026 16:17
@openshift-ci openshift-ci Bot removed the lgtm Indicates that a PR is ready to be merged. label Aug 7, 2026
@redhat-chai-bot

Copy link
Copy Markdown
Contributor Author

Pushed 06071908 addressing the CodeRabbit review:

  • No-Sensitive-Data-In-Logs: removed the node name from the two new nil-lister guard warnings in isControlPlaneNode/isNodeReady; they now log only the lister-initialization state.
  • Regression test: added TestNewWithAlreadyStartedInformers, which starts and preloads the informers before calling New() to exercise the replayed-Add-event path and assert construction completes without panicking.

Local verification: go build, go vet, and go test -race all pass for ./pkg/controller/internalreleaseimage/... (6 tests, incl. the new one).

Note: this commit supersedes the previous SHA, so the earlier /lgtm was dropped — a re-/lgtm will be needed once CI is green.


AI-generated. Review for accuracy.

@bfournie

bfournie commented Aug 7, 2026

Copy link
Copy Markdown
Contributor

/lgtm

@openshift-ci-robot

Copy link
Copy Markdown
Contributor

@redhat-chai-bot: This pull request references Jira Issue OCPBUGS-105432, which is valid.

3 validation(s) were run on this bug
  • bug is open, matching expected state (open)
  • bug target version (5.0.0) matches configured target version for branch (5.0.0)
  • bug is in the state POST, which is one of the valid states (NEW, ASSIGNED, POST)
Details

In response to this:

Summary

Fixes a nil pointer panic in the InternalReleaseImage controller caused by a race condition in informer startup ordering.

The New() constructor registered AddEventHandler callbacks (L114-L146) before assigning listers like ctrl.nodeLister (L165). When informers are already started, they replay synthetic Add events on a separate goroutine that races the main goroutine — isControlPlaneNode (L387) reads ctrl.nodeLister before it is assigned, causing SIGSEGV addr=0x18.

Root Cause

Introduced by MCO #5841 (AGENT-1488, merged 2026-05-26). The code was latent for 71 days until openshift/api #2859 (merged 2026-08-04) flipped NoRegistryClusterInstall to Default, activating the IRI controller for the first time.

The panic is intermittent (~1.4%/run) but triggers the zero-tolerance "Pods must not panic" aggregated test, causing ~13% payload rejection rate. The 5.0 CI stream has had 5+ consecutive rejections.

Changes

  1. Reorder New() constructor: Move all 8 lister and HasSynced assignments to before the AddEventHandler registrations. Pure statement reordering — no logic change. Includes an explanatory comment about the race.
  2. Add nil guards: Defensive nil checks in isControlPlaneNode (L387) and isNodeReady (L406) — if nodeLister is nil, log a warning and return false.

Testing

  • go build
  • go vet
  • go test -race -count=1 ✅ (5 PASS, 0 FAIL, race detector clean)
  • gofmt

Tracking


AI-generated. Review for accuracy.

@smg247 requested in Slack thread

Summary by CodeRabbit

  • Bug Fixes
  • Improved controller startup reliability by preventing events from being processed before required data is available.
  • Prevented crashes when node information cannot be accessed.
  • The controller now logs a warning and safely reports nodes as unavailable when necessary.

Instructions for interacting with me using PR comments are available here. If you have questions or suggestions related to my behavior, please file an issue against the openshift-eng/jira-lifecycle-plugin repository.

@openshift-merge-bot

Copy link
Copy Markdown
Contributor

Scheduling tests matching the pipeline_run_if_changed or not excluded by pipeline_skip_if_only_changed parameters:
/test e2e-aws-ovn
/test e2e-aws-ovn-upgrade
/test e2e-gcp-op-ocl-part1
/test e2e-gcp-op-ocl-part2
/test e2e-gcp-op-part1
/test e2e-gcp-op-part2
/test e2e-gcp-op-single-node
/test e2e-hypershift
/test tls-pqc-readiness

@openshift-ci

openshift-ci Bot commented Aug 7, 2026

Copy link
Copy Markdown
Contributor

[APPROVALNOTIFIER] This PR is APPROVED

This pull-request has been approved by: bfournie, redhat-chai-bot

The full list of commands accepted by this bot can be found here.

The pull request process is described here

Details Needs approval from an approver in each of these files:

Approvers can indicate their approval by writing /approve in a comment
Approvers can cancel approval by writing /approve cancel in a comment

@redhat-chai-bot

Copy link
Copy Markdown
Contributor Author

/retest-required

All 3 failures are unrelated to this PR's changes:

  • bootstrap-unit: TestNodeSizingEnabled timeout — InternalReleaseImage CRD not available in test env, context deadline exceeded
  • unit: TestWorkerPoolOtherChangeDoesNotEnqueueCustomPools — render controller test (pkg/controller/render), not the IRI controller changed in this PR
  • tls-pqc-readiness: CI infra — src-with-skopeo image build failed with FetchImageContentFailed (manifest unknown in image registry)

AI-generated. Review for accuracy.

@redhat-chai-bot

Copy link
Copy Markdown
Contributor Author

/retest e2e-aws-ovn-upgrade

Infrastructure failure again — src-with-skopeo image build failed with FetchImageContentFailed (manifest unknown) and then cluster install failed due to unknown blob in source layer. Unrelated to this PR.


AI-generated. Review for accuracy.

@redhat-chai-bot

Copy link
Copy Markdown
Contributor Author

/test e2e-aws-ovn-upgrade


AI-generated. Review for accuracy.

@redhat-chai-bot

Copy link
Copy Markdown
Contributor Author

/test tls-pqc-readiness


AI-generated. Review for accuracy.

@bfournie

bfournie commented Aug 7, 2026

Copy link
Copy Markdown
Contributor

/verified by ci/prow/e2e-agent-compact-ipv4-iso-no-registry

@openshift-ci-robot openshift-ci-robot added the verified Signifies that the PR passed pre-merge verification criteria label Aug 7, 2026
@openshift-ci-robot

Copy link
Copy Markdown
Contributor

@bfournie: This PR has been marked as verified by ci/prow/e2e-agent-compact-ipv4-iso-no-registry.

Details

In response to this:

/verified by ci/prow/e2e-agent-compact-ipv4-iso-no-registry

Instructions for interacting with me using PR comments are available here. If you have questions or suggestions related to my behavior, please file an issue against the openshift-eng/jira-lifecycle-plugin repository.

@redhat-chai-bot

Copy link
Copy Markdown
Contributor Author

/test e2e-gcp-op-part2


AI-generated. Review for accuracy.

@redhat-chai-bot

Copy link
Copy Markdown
Contributor Author

/test e2e-gcp-op-ocl-part1


AI-generated. Review for accuracy.

@redhat-chai-bot

Copy link
Copy Markdown
Contributor Author

/test tls-pqc-readiness
/test perfscale-control-plane-6nodes


AI-generated. Review for accuracy.

@redhat-chai-bot

Copy link
Copy Markdown
Contributor Author

/test e2e-gcp-op-part2


AI-generated. Review for accuracy.

@redhat-chai-bot

Copy link
Copy Markdown
Contributor Author

tls-pqc-readiness has now failed 3 consecutive times on the same src-with-skopeo CI infrastructure issue (image manifest unknown in registry). This is a platform-wide registry flake, not related to this PR's changes.

This PR fixes a critical stream-blocking nil pointer panic (OCPBUGS-105432) and has been validated by the targeted e2e-agent-compact-ipv4-iso-no-registry test (passed, verified label applied). 15/20 checks have passed — this is the only persistent blocker.

@bfournie @smg247 — would it be possible to override tls-pqc-readiness or mark it optional for this merge? The 5.0 CI stream remains at ~13% rejection risk per payload until this fix lands.

/test tls-pqc-readiness


AI-generated. Review for accuracy.

@bfournie

bfournie commented Aug 7, 2026

Copy link
Copy Markdown
Contributor

/override ci/prow/tls-pqc-readiness

@openshift-ci

openshift-ci Bot commented Aug 7, 2026

Copy link
Copy Markdown
Contributor

@bfournie: bfournie unauthorized: /override is restricted to Repo administrators, approvers in top level OWNERS file, and the following github teams:openshift: openshift-release-oversight openshift-staff-engineers openshift-sustaining-engineers.

Details

In response to this:

/override ci/prow/tls-pqc-readiness

Instructions for interacting with me using PR comments are available here. If you have questions or suggestions related to my behavior, please file an issue against the kubernetes-sigs/prow repository.

@bfournie

bfournie commented Aug 7, 2026

Copy link
Copy Markdown
Contributor

@yuqi-zhang or @isabella-janssen would it be possible to override the tls-pqc-readiness test? Its failing for unrelated reasons as above.

@openshift-merge-bot

Copy link
Copy Markdown
Contributor

/retest-required

Remaining retests: 0 against base HEAD f6aefa6 and 2 for PR HEAD 0607190 in total

@redhat-chai-bot

Copy link
Copy Markdown
Contributor Author

/test perfscale-control-plane-6nodes


AI-generated. Review for accuracy.

@redhat-chai-bot

Copy link
Copy Markdown
Contributor Author

Both tls-pqc-readiness (4th failure) and perfscale-control-plane-6nodes (2nd failure) failed again — both are persistent CI infrastructure issues completely unrelated to this fix. 17/18 non-flaky checks have passed.

Retesting both overnight. At this point, these two tests likely need a maintainer override to unblock the merge. The fix itself has been validated by e2e-agent-compact-ipv4-iso-no-registry and carries the verified label.

/test tls-pqc-readiness
/test perfscale-control-plane-6nodes


AI-generated. Review for accuracy.

@redhat-chai-bot

Copy link
Copy Markdown
Contributor Author

/test tls-pqc-readiness
/test perfscale-control-plane-6nodes


AI-generated. Review for accuracy.

@redhat-chai-bot

Copy link
Copy Markdown
Contributor Author

tls-pqc-readiness failed again (same src-with-skopeo CI infra issue — this test has not passed once across 6+ attempts over the past 16 hours). perfscale-control-plane-6nodes is still running.

Retesting tls-pqc-readiness one more time. If it fails again, this PR will need a maintainer override to merge — the fix itself is validated and all other 17 tests pass consistently.

/test tls-pqc-readiness


AI-generated. Review for accuracy.


AI-generated. Review for accuracy.

@stbenjam

stbenjam commented Aug 8, 2026

Copy link
Copy Markdown
Member

/override ci/prow/tls-pqc-readiness

@openshift-ci

openshift-ci Bot commented Aug 8, 2026

Copy link
Copy Markdown
Contributor

@stbenjam: Overrode contexts on behalf of stbenjam: ci/prow/tls-pqc-readiness

Details

In response to this:

/override ci/prow/tls-pqc-readiness

Instructions for interacting with me using PR comments are available here. If you have questions or suggestions related to my behavior, please file an issue against the kubernetes-sigs/prow repository.

@stbenjam
stbenjam merged commit 8499975 into openshift:main Aug 8, 2026
18 of 20 checks passed
@openshift-ci-robot

Copy link
Copy Markdown
Contributor

@redhat-chai-bot: Jira Issue Verification Checks: Jira Issue OCPBUGS-105432
✔️ This pull request was pre-merge verified.
✔️ All associated pull requests have merged.
✔️ All associated, merged pull requests were pre-merge verified.

Jira Issue OCPBUGS-105432 has been moved to the MODIFIED state and will move to the VERIFIED state when the change is available in an accepted nightly payload. 🕓

Details

In response to this:

Summary

Fixes a nil pointer panic in the InternalReleaseImage controller caused by a race condition in informer startup ordering.

The New() constructor registered AddEventHandler callbacks (L114-L146) before assigning listers like ctrl.nodeLister (L165). When informers are already started, they replay synthetic Add events on a separate goroutine that races the main goroutine — isControlPlaneNode (L387) reads ctrl.nodeLister before it is assigned, causing SIGSEGV addr=0x18.

Root Cause

Introduced by MCO #5841 (AGENT-1488, merged 2026-05-26). The code was latent for 71 days until openshift/api #2859 (merged 2026-08-04) flipped NoRegistryClusterInstall to Default, activating the IRI controller for the first time.

The panic is intermittent (~1.4%/run) but triggers the zero-tolerance "Pods must not panic" aggregated test, causing ~13% payload rejection rate. The 5.0 CI stream has had 5+ consecutive rejections.

Changes

  1. Reorder New() constructor: Move all 8 lister and HasSynced assignments to before the AddEventHandler registrations. Pure statement reordering — no logic change. Includes an explanatory comment about the race.
  2. Add nil guards: Defensive nil checks in isControlPlaneNode (L387) and isNodeReady (L406) — if nodeLister is nil, log a warning and return false.

Testing

  • go build
  • go vet
  • go test -race -count=1 ✅ (5 PASS, 0 FAIL, race detector clean)
  • gofmt

Tracking


AI-generated. Review for accuracy.

@smg247 requested in Slack thread

Summary by CodeRabbit

  • Bug Fixes
  • Improved controller startup reliability by preventing events from being processed before required data is available.
  • Prevented crashes when node information cannot be accessed.
  • The controller now logs a warning and safely reports nodes as unavailable when necessary.

Instructions for interacting with me using PR comments are available here. If you have questions or suggestions related to my behavior, please file an issue against the openshift-eng/jira-lifecycle-plugin repository.

@openshift-merge-robot

Copy link
Copy Markdown
Contributor

Fix included in release 5.0.0-0.nightly-2026-08-08-200126

@bfournie

bfournie commented Aug 9, 2026

Copy link
Copy Markdown
Contributor

/cherry-pick release-4.22

@openshift-cherrypick-robot

Copy link
Copy Markdown

@bfournie: new pull request created: #6390

Details

In response to this:

/cherry-pick release-4.22

Instructions for interacting with me using PR comments are available here. If you have questions or suggestions related to my behavior, please file an issue against the kubernetes-sigs/prow repository.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

approved Indicates a PR has been approved by an approver from all required OWNERS files. jira/valid-bug Indicates that a referenced Jira bug is valid for the branch this PR is targeting. jira/valid-reference Indicates that this PR references a valid Jira ticket of any type. lgtm Indicates that a PR is ready to be merged. verified Signifies that the PR passed pre-merge verification criteria

Projects

None yet

Development

Successfully merging this pull request may close these issues.

7 participants