Syncup PRs from master to 17.0.0-rc4 - #6156
Merged
Merged
Conversation
rene
requested review from
eriknordmark,
milan-zededa,
rucoder,
shjala,
yash-zededa and
zedi-pramodh
as code owners
July 10, 2026 13:23
4 tasks
github-actions
Bot
requested review from
OhmSpectator,
andrewd-zededa,
christoph-zededa,
jsfakian and
naiming-zededa
July 10, 2026 13:26
Codecov Report❌ Patch coverage is Additional details and impacted files@@ Coverage Diff @@
## 17.0 #6156 +/- ##
==========================================
+ Coverage 20.46% 20.99% +0.52%
==========================================
Files 490 511 +21
Lines 91797 94342 +2545
==========================================
+ Hits 18788 19808 +1020
- Misses 71443 72764 +1321
- Partials 1566 1770 +204 ☔ View full report in Codecov by Harness. 🚀 New features to boost your workflow:
|
rene
marked this pull request as draft
July 10, 2026 15:14
rene
marked this pull request as ready for review
July 13, 2026 10:09
Adds a new EVE-k config property exposing Longhorn's cluster-wide node-drain-policy setting. Defaults to Longhorn's recommended value: 'block-for-eviction-if-contains-last-replica', which blocks a drain until another node holds a replica of any volume on the draining node. Valid values (enforced by a validator): - block-for-eviction - block-for-eviction-if-contains-last-replica - allow-if-replica-is-stopped - always-allow Adds kubeapi/longhornconfig.go with SetLonghornNodeDrainPolicy(), which is a no-op when Longhorn is not yet available. zedkube applies the policy on startup via kubeCfgTimer and on any global config change. See: https://longhorn.io/docs/1.9.1/maintenance/maintenance/#node-drain-policy-recommendations Co-authored-by: Claude Sonnet 4.6 <noreply@anthropic.com> Signed-off-by: Andrew Durbin <andrewd@zededa.com> (cherry picked from commit 4458fc2)
The eve-build-<user> image (build-tools/src/scripts/Dockerfile) backs every
DOCKER_GO target: make shell, make test, make pillar-vet/fmt/build. It had
drifted from the real EVE build environment and could no longer build pillar:
- Go was pinned to 1.24.1, but pillar and other go.mod files now require
go 1.25.0 (toolchain go1.25.11). With GOTOOLCHAIN=local every DOCKER_GO
target failed with 'go.mod requires go >= 1.25.0'. Bump GOVER to 1.25.11.
- The FROM used the floating golang:${GOVER}-alpine tag, which now resolves
to a newer Alpine than eve-alpine. Pin alpine3.22 to track eve-alpine's
Alpine/libc.
- OpenZFS was built from 2.3.3 while the shipping dom0-ztools package is on
2.3.6. Align the builder with 2.3.6.
- go-libzfs includes the OpenZFS libspl headers, which still reference the
glibc LFS64 symbols fstat64/stat64. musl dropped those, so cgo compilation
failed. Set CGO_CFLAGS to remap them to the plain 64-bit fstat/stat, the
same fix pkg/pillar/Dockerfile already uses.
With these, make pillar-vet HV=kvm builds and vets pillar cleanly again.
Signed-off-by: Mikhail Malyshev <mike.malyshev@gmail.com>
(cherry picked from commit e6d3368)
Several packages, such as dom0-ztools and wwan rely on init scripts to load modules. However, kmod tool is not installed in the main rootfs, so a limited version from busybox is used (without compression support) when a onboot service is executed. This commit installs the kmod userspace utilities from udev container, which is installed in the main rootfs in images/rootfs.yml.in file. Signed-off-by: Renê de Souza Pinto <rene@renesp.com.br> (cherry picked from commit f271f45)
The mm-init.sh calls modprobe to load some modules during startup of the wwan container. However, kmod tools is not installed, so a limited version from busybox is used (without compression support). This commit adds the kmod tools to wwan container. Signed-off-by: Renê de Souza Pinto <rene@renesp.com.br> (cherry picked from commit 70ebd65)
With the introduction of evetest, we now have submodules in our source tree. This makes codespell plugin trying to initialize submodules and let to the following error: Initializing git submodules... fatal: detected dubious ownership in repository at '/workspace/src/evetest/grpcapi/eve-api' To add an exception for this directory, call: git config --global --add safe.directory /workspace/src/evetest/grpcapi/eve-api fatal: Unable to find current revision in submodule path 'evetest/grpcapi/eve-api' In this case /workspace is the mount point inside the container running Yetus, mounted from the current source directory (from a different user ID). This commit fixes this issue by adding the safe.directory git option to all directories within the container through a config file prepared in advance and mount inside the container at /etc/gitconfig. It also initializes submodules after checkout upstream/master because codespell plugin is initializing them as well. Signed-off-by: Renê de Souza Pinto <rene@renesp.com.br> (cherry picked from commit 7c8636d)
This commit changes:
eve-kernel-arm64-v6.1.155-generic
9fa67514972d: arm64: configs: Enable NVMe drivers
Signed-off-by: Renê de Souza Pinto <rene@renesp.com.br>
(cherry picked from commit 3be229e)
rene
force-pushed
the
17.0-rc4
branch
2 times, most recently
from
July 13, 2026 10:32
2a7bce9 to
cfe3b3a
Compare
eriknordmark
requested changes
Jul 13, 2026
eriknordmark
left a comment
Contributor
There was a problem hiding this comment.
Looks like some of the VaultUnlockMethod changes made it in as part of the fstrim commit, but not all. It makes sense to remove those and amend the fstrim commit with the removal.
The things to remove are attached
…ccounting On EVE-k (kubevirt/Longhorn) nodes two independent bugs combine to push RemainingSpace to zero and trigger false maintenance mode even when the ZFS pool has significant free space. PRIMARY FIX — ghost blocks inflate usedByDom0: /persist/vault is an ext4 filesystem on a ZFS zvol. Blocks freed by Longhorn replica churn are never returned to ZFS, inflating logicalused and shrinking allowedDeviceDiskSize. Following Linux distro consensus (all major distros use periodic fstrim.timer, not mount -o discard), EVE reclaims ghost blocks via scheduled fstrim. The etcd-storage zvol shares the same mechanism but is mounted inside the kube container, not the pillar container, and is outside the reach of this fix. Add TrimVault(timeout) to the vault Handler interface. ZFSHandler.TrimVault runs fstrim on /persist/vault (EVE-k only). Ext4Handler and UnsupportedHandler stub it as no-ops. vaultmgr: startPostVaultReconcile runs TrimVault at boot, gating ConversionComplete and k3s startup, bounded by timer.vault.trim.max.secs (default 30 min). startVaultTrimSchedule runs fstrim on a cron schedule (default Sat/Sun 02:00) without gating startup. Note that setting timer.vault.trim.max.secs to 0 (unlimited) lets a slow first-boot trim delay vault-ready reporting and block k3s startup for as long as the trim takes; keep it non-zero to bound this. Trim state is published in VaultStatus.TrimStatus (VaultTrimStatus) for live inspection and collect-info post-mortem. zfsmanager: runPoolTrimSchedule (handlepooltrim.go) runs zpool trim at boot then on a cron schedule (default Sat/Sun 03:00, EVE-k only), using explicit trim invocations that are observable in logs and operator-tunable from the controller without a node reboot. TrimStatus (PoolTrimStatus) is published in ZFSPoolStatus immediately on each invocation. Concurrency: the most-recent trim status and the cached schedule config in both agents are shared between the main/publisher goroutines and the trim goroutines, so they are guarded by a per-agent mutex (trimMu) via setter/getter accessors. Without this the trim goroutines race the status publishers under go test -race. Runtime reconfigurability: the cron spec (and vault trim timeout) are cached under trimMu on every global config update and re-read on each ticker tick, so the controller can retune or disable (empty spec) either schedule without a reboot. vaultmgr's main select loop now processes subGlobalConfig for this (it previously dropped config updates after startup). A trimScheduleStarted guard ensures at most one vault trim ticker goroutine even if the unlock path runs more than once. New globalconfig keys: timer.vault.trim.max.secs, timer.vault.trim.cron, timer.zfs.pool.trim.cron. A pure 5-field cron evaluator is added to types/global.go — CronMatch plus CronShouldFire (single-minute deduplication for use inside a time.NewTicker(time.Minute) loop) with no external dependency. cronFieldMatch/cronAtomMatch are field-range aware so "*/n" steps start at the field minimum (1 for day-of-month and month), matching standard cron rather than starting at 0. SECONDARY FIX — volumeHandlerCSI.UsageFromStatus accounting skew: The CSI handler unconditionally returned MaxVolSize for all volume states. Mirror commonVolumeHandler: return CurrentSize for ReadOnly volumes, nil config, and volumes with no app references. Corrects accounting for ReadOnly and orphaned volumes; aligns EVE-k with EVE-kvm behavior. Has no effect on the maintenance trigger for this node (all volumes are active writable). Tests: all four UsageFromStatus branches in both commonhandler and csihandler; table-driven tests for CronMatch/CronShouldFire/cronFieldMatch/ cronAtomMatch covering wildcards, comma lists, ranges, steps, "*/n" field-minimum behavior on base-1 fields, Sunday 0/7 duality, dedup, and invalid input; TestFstrimBinaryExists to catch a missing binary in the build; evetest TestVaultZvolTrimReclaimsBlocks writes 256 MiB of incompressible data, deletes it to create ghost blocks, runs fstrim, and asserts logicalused drops on a live EVE-k ZFS device (the real fstrim path is a no-op in the pillar test container, which has no ZFS). Also: SC1091 shellcheck disable added to cluster-init.sh header; docs/ZFS.md gains a Storage maintenance section covering pool TRIM, vault fstrim schedules, pubsub status fields, and agent log reference. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com> Signed-off-by: Andrew Durbin <andrewd@zededa.com> (cherry picked from commit 8255c51)
…uption On some hosts the firmware POST modeset leaves the display data buffer (DBUF) powered, so a passed-through Intel iGPU's DBUF_CTL registers read back POWER_STATE (bit30) = 1 while POWER_REQUEST (bit31) = 0 -- a legitimate but inconsistent leftover: the device is not display-reset on assignment, and POWER_STATE is a read-only status latch fed by the display power well, independent of the POWER_REQUEST input. A guest display driver that samples POWER_STATE to decide which DBUF slices are already enabled sees the stale "powered" bit and never issues POWER_REQUEST. DBUF then powers down, the plane FIFO underruns, and scanout is corrupted (vertical stripes) until a full modeset (e.g. a display sleep/wake) re-requests power. Native i915 avoids this by force-driving POWER_REQUEST at load regardless of the readout; the Windows driver trusts the readout. Add a BAR0 quirk that traps the DBUF_CTL slice registers (S1..S4, only as many as the generation exposes) and clears POWER_STATE on read whenever POWER_REQUEST is not set, presenting a consistent register (POWER_STATE follows POWER_REQUEST) -- the same approach Intel's GVT device model uses (gen9_dbuf_ctl_mmio_write). The guest then issues the request and the real power well brings DBUF up. Also add tools/qemu/ helpers used to diagnose and verify this -- they read the live iGPU MMIO via QMP pmemsave and diff a corrupted vs recovered state -- and document the quirk and the workflow in docs/INTEL-IGPU-PASSTHROUGH.md. Signed-off-by: Mikhail Malyshev <mike.malyshev@gmail.com> (cherry picked from commit 07dda49)
This commit adds two patches required to fully enable the PCIe controller on Raspberry Pi 5 for u-boot, allowing to boot EVE from NVMe devices. Signed-off-by: Renê de Souza Pinto <rene@renesp.com.br> (cherry picked from commit 512c6a0)
Add instructions on how to install EVE-OS on an NVMe on Raspberry Pi 5 devices. Signed-off-by: Renê de Souza Pinto <rene@renesp.com.br> (cherry picked from commit 1e8863d)
The new pkg/pillar/qemudump package imports github.com/klauspost/compress directly to compress crash dumps in-process, so it is no longer an indirect dependency. Drop the // indirect marker; no version change. Signed-off-by: Mikhail Malyshev <mike.malyshev@gmail.com> (cherry picked from commit 40da735)
A rare, non-reproducible qemu/KVM passthrough crash must leave usable post-mortem state on its first occurrence, without ever endangering device management. domainmgr now owns crash handling end-to-end for two classes, both on by default: - qemu process death on a fatal signal (SIGBUS/SIGSEGV/SIGABRT): a bounded RLIMIT_CORE is set on the qemu OCI task and the host core_pattern points at the encrypted vault, so the kernel writes a process core that pillar compresses and rotates. - guest internal-error (KVM_RUN -EFAULT): the QMP monitor reports it, and domainmgr captures the guest RAM as an ELF core (dump-guest-memory streamed through a FIFO) before any teardown (capture-first-then-policy). A new pkg/pillar/qemudump package owns dump storage: in-process zstd with an adaptive window sized from pillar's cgroup headroom (never system RAM, which would OOM-kill zedbox), an on-the-fly disk quota (per-domain ring, global cap, free-space floor), and unique timestamped names. Dumps live in the encrypted vault and are collected by collect-info for developer analysis. debug.qemu.pause.on.crash holds a crashed guest alive and freezes reconcile for live inspection (with a gdb stub via debug.qemu.gdb); debug.qemu.trace.events enables per-VM qemu tracing with @iommu/@barmap/@vfio presets. A debug-only, compile-gated (CONFIG_EVE_CRASH_INJECTOR, off in production) x-inject-internal-error QMP command and tools/qemu/inject-crash.sh drive both crash classes for on-device validation. Both paths are validated on real hardware; see docs/QEMU-CRASH-DEBUGGING.md. Signed-off-by: Mikhail Malyshev <mike.malyshev@gmail.com> Signed-off-by: Your Name <you@example.com> (cherry picked from commit 9c544ca)
- update pkg/debug hash Signed-off-by: Mikhail Malyshev <mike.malyshev@gmail.com> (cherry picked from commit 3034c1c)
Contributor
Author
|
Updates in this PR:
|
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Description
Cherry-picked commits from master to go into
17.0.0-rc4:Changelog notes
None.
PR Backports
None.
Checklist
check them.