• Home
  • Features
  • Pricing
  • Docs
  • Announcements
  • Sign In

kubevirt / hyperconverged-cluster-operator / 32375707327
81%
main: 85%

Build:
Build:
LAST BUILD BRANCH: bump_NODE_DRIVER_REG_v2.18.0_main
DEFAULT BRANCH: main
Ran 20 Aug 2026 01:47PM UTC
Jobs 1
Files 145
Run time 1min
Badge
Embed ▾
README BADGES
x

If you need to use a raster PNG badge, change the '.svg' to '.png' in the link

Markdown

Textile

RDoc

HTML

Rst

20 Aug 2026 01:41PM UTC coverage: 80.549% (-0.02%) from 80.567%
32375707327

push

github

web-flow
[1.18] Don't force single-replica KubeVirt infra on 2-node control planes (#4516)

**Note**: this is a manual cherry pick of PR 4450

Currently HCO Forces `spec.infra.replicas: 1` on the KubeVirt CR (virt-api, virt-controller, virt-exportproxy, virt-synchronization-controller) whenever `IsControlPlaneHighlyAvailable()` is false. That flag requires 3+ control plane nodes, or 2 nodes plus an arbiter — so a 2-node control plane without an arbiter (Two Node OpenShift with Fencing / `DualReplica` topology) gets treated like a single-node cluster, even though there are 2 real nodes to spread replicas across.

Single `virt-api` replica removes redundancy for the eviction-interceptor webhook: draining the node hosting the only `virt-api` pod evicts it before the webhook can redirect `virt-launcher` eviction into a live migration. Eviction fails (`no endpoints available for service "virt-api"`) or force-kills the VM instead of migrating it.

This is a replica-count bug, not an "HCO doesn't know TNF is HA" bug. `IsControlPlaneHighlyAvailable()` is untouched — its degraded-cluster semantics (3→2 nodes still reports false) stay as-is. HCO has no visibility into fencing/quorum health; not claiming it now understands TNF topology.

`hcoConfig2KvConfig`'s replica decision never needed "is the control plane HA" — it needs "how many nodes can we spread infra pods across." Added `nodeinfo.IsControlPlaneMultiNode()` (`cpNodeCount >= 2`) as that narrower signal and swapped it in for `IsControlPlaneHighlyAvailable()` at that call site.

Renamed the parameter (`controlPlaneHighlyAvailable` → `controlPlaneMultiNode`) in the same commit as the behavior change, since the old name no longer matched what it gated. Flagging that explicitly: a rename plus behavior change in one diff hides the actual delta on skim. The delta is: `Replicas` is no longer forced to `1` on exactly 2 control-plane nodes without an arbiter.

Signed-off-by: Nahshon Unna Tsameret <nunnatsa@redhat.com>

32 of 34 new or added lines in 4 files covered. (94.12%)

6 existing lines in 1 file now uncovered.

10883 of 13511 relevant lines covered (80.55%)

2.14 hits per line

Uncovered Changes

Lines Coverage ∆ File
2
83.56
-8.44% controllers/commontestutils/nodeinfomocks.go

Coverage Regressions

Lines Coverage ∆ File
6
83.56
-8.44% controllers/commontestutils/nodeinfomocks.go
Jobs
ID Job ID Ran Files Coverage
1 Unit - 32375707327.1 20 Aug 2026 01:47PM UTC 145
80.55
GitHub Action Run
Source Files on build 32375707327
  • Tree
  • List 145
  • Changed 4
  • Source Changed 4
  • Coverage Changed 3
Coverage ∆ File Lines Relevant Covered Missed Hits/Line
  • Back to Repo
  • Github Actions Build #32375707327
  • de5270c0 on github
  • Prev Build on release-1.18 (#32127995855)
  • Next Build on release-1.18 (#32863773724)
STATUS · Troubleshooting · Open an Issue · Sales · Support · CAREERS · ENTERPRISE · START FREE TRIAL · SCHEDULE DEMO
ANNOUNCEMENTS · TWITTER · TOS & SLA · Supported CI Services · What's a CI service? · Automated Testing

© 2026 Coveralls, Inc