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

kubevirt / hyperconverged-cluster-operator / 30685890965
86%

Build:
DEFAULT BRANCH: main
Ran 01 Aug 2026 05:30AM UTC
Jobs 1
Files 158
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

01 Aug 2026 05:28AM UTC coverage: 85.618% (-0.03%) from 85.645%
30685890965

push

github

web-flow
OCPBUGS-100031: Don't force single-replica KubeVirt infra on 2-node control planes (#4450)

* Don't force single-replica KubeVirt infra on 2-node control planes

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
either 3+ control plane nodes, or 2 control plane nodes plus an
arbiter - so a 2-node control plane without an arbiter (e.g. Two Node
OpenShift with Fencing / the DualReplica topology) is treated the same
as a single-node cluster, even though there are 2 real nodes to spread
replicas across. Forcing a single virt-api replica removes redundancy
for the eviction-interceptor webhook: draining the node hosting the
sole virt-api pod evicts it before the webhook can redirect
virt-launcher pod eviction into a live migration, so the eviction
fails or force-kills the VM instead of migrating it.

The replica decision in hcoConfig2KvConfig was never really an "is the
control plane HA" question - it only needs to know how many nodes are
available to spread infra pods across, independent of whether those
nodes provide etcd-quorum-level fencing/HA guarantees. Add
nodeinfo.IsControlPlaneMultiNode() (cpNodeCount >= 2) as that narrower,
purpose-built signal, and use it in hcoConfig2KvConfig instead of
IsControlPlaneHighlyAvailable().

Note this commit both renames the parameter
(controlPlaneHighlyAvailable -> controlPlaneMultiNode) to state what it
is actually used for, and changes the value flowing into it, at the
same time. Calling that out explicitly since a rename bundled with a
behavior change can be easy to skim past in review: the actual
behavior delta is that Replicas is no longer forced to 1 when there
are exactly 2 control plane nodes without an arbiter.
IsControlPlaneHighlyAvailable() itself is untouched, and its
degraded-cluster semantics (a 3-node cluster that drops to 2 still
reports false) are pre... (continued)

33 of 35 new or added lines in 4 files covered. (94.29%)

6 existing lines in 1 file now uncovered.

12091 of 14122 relevant lines covered (85.62%)

2.32 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 - 30685890965.1 01 Aug 2026 05:30AM UTC 158
85.62
GitHub Action Run
Source Files on build 30685890965
  • Tree
  • List 158
  • Changed 4
  • Source Changed 4
  • Coverage Changed 3
Coverage ∆ File Lines Relevant Covered Missed Hits/Line
  • Back to Repo
  • Github Actions Build #30685890965
  • ced4af80 on github
  • Prev Build on main (#30641322088)
  • Next Build on main (#30734710552)
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