Skip to content

EVE-k: gate storage readiness correctly and report it truthfully - #6240

Open
eriknordmark wants to merge 9 commits into
lf-edge:masterfrom
eriknordmark:evek-storage-readiness
Open

EVE-k: gate storage readiness correctly and report it truthfully#6240
eriknordmark wants to merge 9 commits into
lf-edge:masterfrom
eriknordmark:evek-storage-readiness

Conversation

@eriknordmark

@eriknordmark eriknordmark commented Jul 28, 2026

Copy link
Copy Markdown
Contributor

Description

On an EVE-k node, cluster storage could be blocked forever by a daemonset that is
none of Longhorn's, be declared ready before the node could actually serve a volume,
and report success either way. Three related fixes, plus the reporting that makes the
outcome visible.

Nothing but Longhorn's own daemonsets gates storage. checkLonghornReady swept
every daemonset in longhorn-system and required each to be Ready on this node. EVE's
collect-info leaves a SupportBundle agent daemonset behind there which never becomes
Ready, so a single leaked object blocked every volume on the node for as long as it
existed. Only the three expected daemonsets gate readiness now.

A running instance-manager is required before storage counts as ready. Longhorn
runs a volume's engine and replica processes inside the instance-manager pod, so the
node cannot serve any volume until one is running — and because that pod is owned by an
InstanceManager CR rather than a DaemonSet, the daemonset sweep never observed it.
Both the shell and pillar readiness paths now wait for it.

Both ready budgets absorb it. That pod pulls a ~440 MB image: measured at 8m20s and
8m41s on single-disk topologies, and over 20 minutes on two-disk ZFS, which alone
exhausted the old 20-minute budget and left nothing for the node and kubevirt checks
ahead of it. kubeapi's readiness poll is widened to 45 minutes, but only when Longhorn
is in the predicate.

Two waits run back to back before volumemgr proceeds, and only the first was widened
originally. The second — the one that blocks until Longhorn and CDI can actually serve
a volume — kept an unexplained 20-minute cap of its own, so the same contended link
could still expire it and leave every volume to defer and retry. It is now a named
bound at 30 minutes: by the time it starts the node and Longhorn are up, so what
remains is mostly CDI, whose images are what the slow half of a first boot spends its
time on.

And volumemgr says what happened. VolumeMgrStatus.Initialized was hardcoded true,
so a node whose storage never came up was indistinguishable from a healthy one. It now
reports the truth along with UnmetCondition, the gate still outstanding, and diag
surfaces it. The status is published from its own task started before the readiness
waits, so a node stuck on those waits says which gate it is on instead of publishing
nothing for tens of minutes — the waits can run the better part of an hour, and that was
exactly the window with no reporting.

PR dependencies

None. This PR supersedes #6259, whose two commits are included here: the
instance-manager gate and the widened budget. #6259 is closed in favour of this one.

They were merged because they cannot land independently: #6259 makes
checkLonghornReady end in the instance-manager gate, whose real implementation builds
a Longhorn client from the on-device kubeconfig, while this PR's two positive
checkLonghornReady tests drive that function with a fake clientset. Whichever landed
second would have turned those tests red, and CI on the first could not have warned.
Carrying both here lets the stub that resolves it (kubeapi: stub the instance-manager gate in the daemonset tests, folded into the gate commit) ship with the change that
needs it.

How to test and validate this PR

go build -tags k ./..., go vet -tags k ./kubeapi/... ./cmd/volumemgr/... ./cmd/diag/...
and go test -tags k ./kubeapi/... ./cmd/volumemgr/... ./cmd/diag/... under pkg/pillar.
The k tag is required: this code is behind //go:build k, and a build without it
compiles none of it while still reporting success. Every commit in the series is green on
its own.

New unit tests: the stray-daemonset case and the three daemonset-failure cases; the
instance-manager state mapping and its list-error path; the readiness budget selection;
the reported status for ready / unmet / still-waiting; and the diag warning's presence,
absence and pre-publication silence. evetest/tests/diag covers the summary end to end.

On an EVE-k device the observable effects are:

  • cat /run/volumemgr/VolumeMgrStatus/volumemgr.json reports Initialized: false with
    an UnmetCondition naming the outstanding gate while storage is not usable, and does
    so during the wait rather than only after it resolves.
  • diag prints WARNING: cluster storage not ready: <condition> in that state.
  • With a leaked longhorn-support-bundle-agent daemonset present, volumes are created
    normally instead of stalling in CREATING_VOLUME.

Result in the kvm→k conversion matrix

The stray-daemonset fix, the truthful reporting and the readiness-publish task were
carried in integration image 0.0.0-newgo-allprs2-f40d7876 through the 7-leg
EVE-kvm→EVE-k conversion matrix: 7/7, every leg faster than on the two previous
green images of that line. That image also carries #5971, so it exercises the pillar
readiness paths against the Go kube-init bring-up. It is a no-regression result rather
than a targeted test of these fixes; the targeted evidence is the unit and evetest
coverage above.

Changelog notes

On EVE-k, a leaked daemonset in the longhorn-system namespace no longer prevents
volumes from being created, storage is not declared ready until the node can actually
serve a volume, and a node whose cluster storage did not come up now reports that
instead of reporting success.

PR Backports

  • 17.0-stable: yes, the stray-daemonset fix in particular — a leaked SupportBundle
    daemonset blocks all volumes on affected nodes today.
  • 16.0-stable / 14.5-stable / 13.4-stable: to be decided by the maintainers.

Checklist

  • I've provided a proper description
  • I've added the proper documentation
  • I've tested my PR on amd64 device
  • I've tested my PR on arm64 device
  • I've written the test verification instructions
  • I've set the proper labels to this PR
  • PR's title follows the template
  • I've checked the boxes above, or I've provided a good reason why I didn't

Reasons for the unchecked boxes: pkg/pillar/docs/volumemgr.md gains the readiness
fields, but there is no new operator knob to document beyond that. Exercised on an amd64
EVE-k node via the conversion matrix above; arm64 untested. Labels left as they are.

Relationship to #6257

This PR does not carry the orphaned-PVC reclaim (gcPVCs in
cmd/volumemgr/initialvolumestatus.go). That work is #6257's — it is the
counterpart to the stale-generation purge sweep introduced there, and it is
kept in one place so the two cannot drift apart.

The reclaim was briefly carried here and has been removed, because #6240 and
#6257 are siblings off master and both touch volumemgr: carrying it in both
means any branch integrating the two gets it twice, under different SHAs, and
has to dedup by hand. Integration branches should take it from #6257
#6271 is based on #6257 and delivers it transitively.

No code dependency in either direction: this PR builds and tests standalone
on master.

@eriknordmark eriknordmark added the stable Should be backported to stable release(s) label Jul 28, 2026
@codecov

codecov Bot commented Jul 28, 2026

Copy link
Copy Markdown

Codecov Report

❌ Patch coverage is 32.74854% with 115 lines in your changes missing coverage. Please review.
✅ Project coverage is 24.72%. Comparing base (886b5d9) to head (a9f4e85).
⚠️ Report is 5 commits behind head on master.

Files with missing lines Patch % Lines
pkg/pillar/cmd/volumemgr/volumemgrstatus.go 27.94% 49 Missing ⚠️
pkg/pillar/cmd/diag/diag.go 10.71% 25 Missing ⚠️
pkg/pillar/cmd/volumemgr/volumemgr.go 0.00% 15 Missing ⚠️
pkg/pillar/kubeapi/longhorninstancemanager.go 50.00% 14 Missing ⚠️
pkg/pillar/cmd/volumemgr/initialvolumestatus.go 57.69% 9 Missing and 2 partials ⚠️
pkg/pillar/kubeapi/kubeapi.go 83.33% 1 Missing ⚠️
Additional details and impacted files
@@            Coverage Diff             @@
##           master    #6240      +/-   ##
==========================================
+ Coverage   24.27%   24.72%   +0.45%     
==========================================
  Files         512      524      +12     
  Lines       93831    95656    +1825     
==========================================
+ Hits        22777    23655     +878     
- Misses      69251    69998     +747     
- Partials     1803     2003     +200     

☔ View full report in Codecov by Harness.
📢 Have feedback on the report? Share it here.

🚀 New features to boost your workflow:
  • ❄️ Test Analytics: Detect flaky tests, report on failures, and find test suite problems.

@eriknordmark
eriknordmark marked this pull request as ready for review July 28, 2026 20:34
@eriknordmark
eriknordmark requested review from milan-zededa and rene and removed request for OhmSpectator and zedi-pramodh July 31, 2026 18:10
eriknordmark added a commit to eriknordmark/eve that referenced this pull request Jul 31, 2026
Record the 2026-07-30 replay of the lf-edge#5971 segment and drop the local CDI CR
fix, which the PR now handles itself: CDI is split into cdi-operator and cdi
components joined by a CDIOperatorReady signal, and a BestEffort timeout hands
the component to a retry loop that applies the CR without re-awaiting the
signal. Three local fixes remain. Also list lf-edge#6240, which the branch already
carried.

Signed-off-by: eriknordmark <erik@zededa.com>
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
eriknordmark added a commit to eriknordmark/eve that referenced this pull request Jul 31, 2026
Record the 2026-07-30 replay of the lf-edge#5971 segment and drop the local CDI CR
fix, which the PR now handles itself: CDI is split into cdi-operator and cdi
components joined by a CDIOperatorReady signal, and a BestEffort timeout hands
the component to a retry loop that applies the CR without re-awaiting the
signal. Three local fixes remain. Also list lf-edge#6240, which the branch already
carried.

Signed-off-by: eriknordmark <erik@zededa.com>
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>

@andrewd-zededa andrewd-zededa left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Can we subscribe to longhorn readiness in the future and republish VolumeMgrStatus if there are future longhorn control plane issues?

Name: agentName,
Initialized: true,
Initialized: ctx.storageReady,
UnmetCondition: ctx.storageUnmet,

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

I don't see anyone using this field yet, is there a consumer coming in another PR?

@eriknordmark eriknordmark Aug 2, 2026

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

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

No consumer — and Initialized right above it has never had one either; nodeagent is the only subscriber and reads just RemainingSpace. The motivation is making the state available to tests and diagnosis: the status lands in /run/volumemgr/VolumeMgrStatus/volumemgr.json, so a test can ssh in and assert on it, and collect-info picks it up in the bundle.

Adding diag as a consumer was easy, so I've done it here — it prints a warning naming the outstanding gate when cluster storage didn't become usable.

Nothing reports this to the controller today: ZInfoClusterNode carries only the node_status enum and pillar doesn't populate it, so that's an eve-api change and a separate PR. Let's discuss what else we'd want in the API in this area. One thing to design around: these two fields are a one-shot startup outcome, not a live condition — volumemgr decides once after its wait and republishes the same value.

@eriknordmark
eriknordmark force-pushed the evek-storage-readiness branch from 7adbdb8 to ef79fba Compare August 2, 2026 12:25
eriknordmark added a commit to eriknordmark/eve that referenced this pull request Aug 3, 2026
An EVE-k node reports cluster storage as ready while it still cannot
attach any volume, so the first app deployed after a conversion or a
fresh install sits in volume creation for minutes while its CDI upload
pod repeats "volume ... is not ready for workloads". Readiness gated
only on the Longhorn DaemonSets, but a volume's engine and replica
processes run inside the per-node instance-manager pod, which is owned
by an InstanceManager CR and so was never examined. That pod is
typically still pulling its ~440 MB image when the DaemonSets go ready:
9m51s on one device here, and over twenty minutes on slower storage.

Require a running InstanceManager for this node in both the pillar and
the shell readiness paths. Longhorn creates the CR during node setup
rather than on first volume request, so waiting on it cannot deadlock
against a volume whose own creation is gated on storage readiness.

Cherry-picked from lf-edge#6259, with one branch-local adjustment: the
two positive daemonset tests stub the instance-manager gate, since a fake
clientset cannot supply the kubeconfig the real gate builds its Longhorn
client from. Those tests arrive with lf-edge#6240, which this branch also carries,
so the interaction only shows up here.

Signed-off-by: eriknordmark <erik@zededa.com>
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
eriknordmark added a commit to eriknordmark/eve that referenced this pull request Aug 3, 2026
An EVE-k node reports cluster storage as ready while it still cannot
attach any volume, so the first app deployed after a conversion or a
fresh install sits in volume creation for minutes while its CDI upload
pod repeats "volume ... is not ready for workloads". Readiness gated
only on the Longhorn DaemonSets, but a volume's engine and replica
processes run inside the per-node instance-manager pod, which is owned
by an InstanceManager CR and so was never examined. That pod is
typically still pulling its ~440 MB image when the DaemonSets go ready:
9m51s on one device here, and over twenty minutes on slower storage.

Require a running InstanceManager for this node in both the pillar and
the shell readiness paths. Longhorn creates the CR during node setup
rather than on first volume request, so waiting on it cannot deadlock
against a volume whose own creation is gated on storage readiness.

Cherry-picked from lf-edge#6259, with one branch-local adjustment: the
two positive daemonset tests stub the instance-manager gate, since a fake
clientset cannot supply the kubeconfig the real gate builds its Longhorn
client from. Those tests arrive with lf-edge#6240, which this branch also carries,
so the interaction only shows up here.

Signed-off-by: eriknordmark <erik@zededa.com>
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
eriknordmark added a commit to eriknordmark/eve that referenced this pull request Aug 3, 2026
Record lf-edge#6259 and the two source PRs the table never listed (lf-edge#6240, lf-edge#6242),
note that lf-edge#6063 is now 17 commits, and mark the CDI upload-pod teardown
logging as upstream in master rather than branch-local. Add the lf-edge#6240/lf-edge#6259
test interaction and the rebase-due note: master is 63 commits ahead of the
shared merge-base.

Signed-off-by: eriknordmark <erik@zededa.com>
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
eriknordmark added a commit to eriknordmark/eve that referenced this pull request Aug 3, 2026
Record lf-edge#6259 and the two source PRs the table never listed (lf-edge#6240, lf-edge#6242),
note that lf-edge#6063 is now 17 commits, and mark the CDI upload-pod teardown
logging as a pre-merge copy of an upstream commit. Add the lf-edge#6240/lf-edge#6259 test
interaction and the rebase-due note: master is 63 commits ahead of the shared
merge-base.

Signed-off-by: eriknordmark <erik@zededa.com>
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
eriknordmark added a commit to eriknordmark/eve that referenced this pull request Aug 3, 2026
Record lf-edge#6259, note that lf-edge#6063 is now 17 commits, refresh lf-edge#6240's head, and mark
the CDI upload-pod teardown logging as a pre-merge copy of an upstream commit.
Spell out why lf-edge#6242 is not replayed here and that its NAD-CRD race is still
open in the Go ApplyMultusCNI. Add the lf-edge#6240/lf-edge#6259 test interaction and the
rebase-due note: master is 63 commits ahead of the shared merge-base.

Signed-off-by: eriknordmark <erik@zededa.com>
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
eriknordmark added a commit to eriknordmark/eve that referenced this pull request Aug 3, 2026
Record lf-edge#6259, note that lf-edge#6063 is now 17 commits, refresh lf-edge#6240's head, and mark
the CDI upload-pod teardown logging as a pre-merge copy of an upstream commit.
Spell out why lf-edge#6242 is not replayed here and that its NAD-CRD race is still
open in the Go ApplyMultusCNI. Add the lf-edge#6240/lf-edge#6259 test interaction and the
rebase-due note: master is 63 commits ahead of the shared merge-base.

Signed-off-by: eriknordmark <erik@zededa.com>
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
eriknordmark added a commit to eriknordmark/eve that referenced this pull request Aug 4, 2026
eriknordmark added a commit to eriknordmark/eve that referenced this pull request Aug 4, 2026
…nset tests

lf-edge#6259 makes checkLonghornReady call instanceManagerReady, which builds a
Longhorn client from the on-device kubeconfig; lf-edge#6240's two positive daemonset
tests drive checkLonghornReady with a fake clientset that cannot supply one.
Neither PR sees this alone. Integration-branch only: whichever PR merges second
upstream must carry the stub itself.

Signed-off-by: eriknordmark <erik@zededa.com>
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
An EVE-k node reports cluster storage as unready, and every app volume
stays in CREATING_VOLUME, whenever any DaemonSet in the longhorn-system
namespace lacks a Running-and-Ready pod on this node -- including
DaemonSets that Longhorn does not own and that are never expected to
become ready. The readiness check iterated over every DaemonSet in the
namespace and required each one to be healthy, consulting its list of
expected DaemonSets only afterwards to confirm those three exist.

In practice this is reached through EVE's own collect-info, which leaves
a SupportBundle agent DaemonSet behind; the node then refuses to serve
volumes for as long as that object exists, with no way for an operator
to tell why. Restrict the per-node health requirement to the DaemonSets
Longhorn is expected to run, and skip anything else sharing the
namespace.

Restricting the loop also removes a second false failure: a DaemonSet
whose node selector legitimately excludes this node reported zero pods
here and was treated as missing.

Signed-off-by: eriknordmark <erik@zededa.com>
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
eriknordmark and others added 2 commits August 7, 2026 18:46
On an EVE-k node volumemgr waits up to 40 minutes for the cluster to be
able to serve a volume, and then reports Initialized regardless of how
that wait ended. A node whose Longhorn or CDI never came up is therefore
indistinguishable, from the outside, from a healthy one -- the only
difference is a line in volumemgr's own log. Anything consuming the
status, an operator inspecting it, or a test asserting on it is misled
in precisely the case that matters.

Report the outcome instead: Initialized now reflects whether cluster
storage became usable, and a new UnmetCondition carries the gate that
was still outstanding, reusing the sub-condition the kubernetes wait
already computes ("longhorn not ready: ...", "kubevirt not ready: ...").
Nodes that are not EVE-k have no such gate and are Initialized from the
start, as before.

Volumes are unaffected either way: they are gated separately and defer
and retry until storage appears.

Signed-off-by: eriknordmark <erik@zededa.com>
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
An EVE-k node whose cluster storage never converged looks healthy from the
console: applications that need a volume simply sit waiting, and nothing in
the diag summary says why. Now that volumemgr reports that outcome, diag
subscribes to VolumeMgrStatus and prints a warning naming the gate that was
still outstanding when storage failed to become usable at startup. A healthy
node, and any device that is not EVE-k, prints nothing extra.

Signed-off-by: eriknordmark <erik@zededa.com>
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
@eriknordmark
eriknordmark force-pushed the evek-storage-readiness branch from 463d95f to 10de67e Compare August 7, 2026 16:50
@eriknordmark eriknordmark changed the title EVE-k: fix stray-daemonset storage block and report readiness truthfully EVE-k: gate storage readiness correctly and report it truthfully Aug 7, 2026
eriknordmark and others added 4 commits August 7, 2026 20:40
diag is the only operator-facing summary of device health -- controller
connectivity, attestation and vault state, applications, cluster storage --
and none of it reaches the EVE API, so nothing noticed when it lost a
section, went silent, or filled with errors on a healthy device.

Add a test that deploys an application and reads the summary the way a
consumer does, through the metadata server at GET /eve/v1/diag, asserting
that a healthy onboarded device reports itself online and connected, lists
its management port as up, and lists the deployed application as running.
It also cross-checks the storage state against volumemgr's own publication.
This is the first coverage of msrv's diag handler as well.

A device that reaches the controller takes the short path through the port
section, so the per-port detail and the "all management ports passed"
verdict are absent from a healthy summary; the assertions match the lines
that path actually emits.

Signed-off-by: eriknordmark <erik@zededa.com>
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
An EVE-k node reported its storage readiness only after both startup waits
had resolved, because the status went out from the disk-metrics task and
that task starts once the waits are over. On a node whose Longhorn or CDI
never converges those waits run for tens of minutes, and for all of that
time diag showed nothing at all -- indistinguishable from a node where
volumemgr had not started.

Publish VolumeMgrStatus from its own task, started before the waits, and
report "waiting for cluster storage" while a wait is still running so an
operator can tell a converging node from one that gave up. Its inputs are
empty that early, which leaves the reported remaining space an overestimate
rather than a zero, so nodeagent cannot mistake it for a full disk. The
readiness fields are now read from a second goroutine, hence the mutex, and
the two test context helpers return a pointer so vet's copylocks stays
quiet.

Signed-off-by: eriknordmark <erik@zededa.com>
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
An EVE-k node reports cluster storage as ready while it still cannot
attach any volume, so the first app deployed after a conversion or a
fresh install sits in volume creation for minutes while its CDI upload
pod repeats "volume ... is not ready for workloads". Readiness gated
only on the Longhorn DaemonSets, but a volume's engine and replica
processes run inside the per-node instance-manager pod, which is owned
by an InstanceManager CR and so was never examined. That pod is
typically still pulling its ~440 MB image when the DaemonSets go ready:
9m51s on one device here, and over twenty minutes on slower storage.

Require a running InstanceManager for this node in both the pillar and
the shell readiness paths. Longhorn creates the CR during node setup
rather than on first volume request, so waiting on it cannot deadlock
against a volume whose own creation is gated on storage readiness.

Signed-off-by: eriknordmark <erik@zededa.com>
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Waiting for the instance-manager made an EVE-k node with two-disk ZFS storage
fail to bring up cluster storage at all: the readiness poll bounds the node,
kubevirt and Longhorn checks with one 20-minute deadline, and the
instance-manager pod alone pulls a ~440 MB image that takes over twenty minutes
on that topology. The poll expired, volumemgr never initialised, and every app
volume stayed uncreatable -- worse than the premature-ready behaviour the
instance-manager check exists to fix.

Give the poll a longer deadline when the caller waits on Longhorn, and keep the
original budget otherwise. The single-disk topologies pull the same image in
under nine minutes and were never close to the limit; only the slowest storage
layout crossed it.

Signed-off-by: eriknordmark <erik@zededa.com>
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
@eriknordmark
eriknordmark force-pushed the evek-storage-readiness branch from 10de67e to 671d7bc Compare August 7, 2026 18:41
eriknordmark added a commit to eriknordmark/eve that referenced this pull request Aug 7, 2026
Replaces the three lf-edge#6271 kubevirt commits with lf-edge#6257 at df8ae7c plus the two
of them that survive on top of it, since lf-edge#6257 fixes the VMIRS-delete logging
the same way and rewrites Info to derive DomainId from a live Get rather than
vmiList. Adds the proposed volumemgr readiness-publish follow-up to lf-edge#6240.

Also records that lf-edge#5971 and rucoder#3 are held at the tips the 7/7 image used
rather than caught up, so the bring-up baseline is not a variable in this run.

Signed-off-by: eriknordmark <erik@zededa.com>
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Two waits run back to back on an EVE-k node before volumemgr proceeds: kubeapi's
readiness poll, and then a second one that blocks until Longhorn and CDI can
actually serve a volume. Only the first was widened when the Longhorn
instance-manager pull turned out to run past 20 minutes; the second kept an
unexplained 20-minute cap of its own, so the same contended link that justified
the first budget could still expire the second and leave every volume to defer
and retry.

Name the bound and raise it to 30 minutes. By the time this wait starts the node
and Longhorn are up, so what remains is mostly CDI, and its images are what the
slow half of a first boot spends its time on.

Signed-off-by: eriknordmark <erik@zededa.com>
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
volumemgrstatus.go used ctx for its plain functions and ctxPtr for its
method receivers, though both name the same *volumemgrContext. Settle on
ctx throughout the file.

Signed-off-by: eriknordmark <erik@zededa.com>
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Signed-off-by: eriknordmark <erik@zededa.com>
eriknordmark added a commit to eriknordmark/eve that referenced this pull request Aug 8, 2026
lf-edge#6240 changed initStatusCtx to return *volumemgrContext so the
subscriptions it registers and the caller share one context; lf-edge#6257's new
test was written against master, where the helper still returns a value,
so it takes the address at every call site and no longer compiles here.

Drop the & at those call sites. Integration-branch only: the fix belongs
in lf-edge#6257 once it rebases onto lf-edge#6240.

Signed-off-by: eriknordmark <erik@zededa.com>
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Signed-off-by: eriknordmark <erik@zededa.com>
eriknordmark added a commit to eriknordmark/eve that referenced this pull request Aug 8, 2026
lf-edge#6240 changed initStatusCtx to return *volumemgrContext so the
subscriptions it registers and the caller share one context; lf-edge#6257's new
test was written against master, where the helper still returns a value,
so it takes the address at every call site and no longer compiles here.

Drop the & at those call sites. Integration-branch only: the fix belongs
in lf-edge#6257 once it rebases onto lf-edge#6240.

Signed-off-by: eriknordmark <erik@zededa.com>
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Signed-off-by: eriknordmark <erik@zededa.com>
eriknordmark added a commit to eriknordmark/eve that referenced this pull request Aug 8, 2026
lf-edge#6240 changed initStatusCtx to return *volumemgrContext so the
subscriptions it registers and the caller share one context; lf-edge#6257's new
test was written against master, where the helper still returns a value,
so it takes the address at every call site and no longer compiles here.

Drop the & at those call sites. Integration-branch only: the fix belongs
in lf-edge#6257 once it rebases onto lf-edge#6240.

Signed-off-by: eriknordmark <erik@zededa.com>
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Signed-off-by: eriknordmark <erik@zededa.com>
eriknordmark added a commit to eriknordmark/eve that referenced this pull request Aug 8, 2026
Rewrite from current content: base master, the source set with each PR's
ref and tip, the branch-local changes, and the standing gotchas. lf-edge#6259 is
gone as a separate entry -- it closed unmerged and its instance-manager
gate is part of lf-edge#6240 now.

Signed-off-by: eriknordmark <erik@zededa.com>
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Signed-off-by: eriknordmark <erik@zededa.com>
eriknordmark added a commit to eriknordmark/eve that referenced this pull request Aug 8, 2026
Rewrite from current content: base master, the source set with each PR's
ref and tip, the branch-local changes, and the standing gotchas. lf-edge#6259 is
gone as a separate entry -- it closed unmerged and its instance-manager
gate is part of lf-edge#6240 now.

Signed-off-by: eriknordmark <erik@zededa.com>
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Signed-off-by: eriknordmark <erik@zededa.com>
eriknordmark added a commit to eriknordmark/eve that referenced this pull request Aug 8, 2026
Rewrite from current content: base master, the source set with each PR's
ref and tip, the branch-local changes, and the standing gotchas. lf-edge#6259 is
gone as a separate entry -- it closed unmerged and its instance-manager
gate is part of lf-edge#6240 now.

Signed-off-by: eriknordmark <erik@zededa.com>
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Signed-off-by: eriknordmark <erik@zededa.com>
eriknordmark added a commit to eriknordmark/eve that referenced this pull request Aug 8, 2026
Rewrite from current content: base master, the source set with each PR's
ref and tip, the branch-local changes, and the standing gotchas. lf-edge#6259 is
gone as a separate entry -- it closed unmerged and its instance-manager
gate is part of lf-edge#6240 now.

Signed-off-by: eriknordmark <erik@zededa.com>
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Signed-off-by: eriknordmark <erik@zededa.com>
eriknordmark added a commit to eriknordmark/eve that referenced this pull request Aug 8, 2026
Rewrite from current content: base master, the source set with each PR's
ref and tip, the branch-local changes, and the standing gotchas. lf-edge#6259 is
gone as a separate entry -- it closed unmerged and its instance-manager
gate is part of lf-edge#6240 now.

Signed-off-by: eriknordmark <erik@zededa.com>
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Signed-off-by: eriknordmark <erik@zededa.com>
eriknordmark added a commit to eriknordmark/eve that referenced this pull request Aug 8, 2026
Rewrite from current content: base master, the source set with each PR's
ref and tip, the branch-local changes, and the standing gotchas. lf-edge#6259 is
gone as a separate entry -- it closed unmerged and its instance-manager
gate is part of lf-edge#6240 now.

Signed-off-by: eriknordmark <erik@zededa.com>
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Signed-off-by: eriknordmark <erik@zededa.com>
eriknordmark added a commit to eriknordmark/eve that referenced this pull request Aug 8, 2026
Rewrite from current content: base master, the source set with each PR's
ref and tip, the branch-local changes, and the standing gotchas. lf-edge#6259 is
gone as a separate entry -- it closed unmerged and its instance-manager
gate is part of lf-edge#6240 now.

Signed-off-by: eriknordmark <erik@zededa.com>
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Signed-off-by: eriknordmark <erik@zededa.com>
eriknordmark added a commit to eriknordmark/eve that referenced this pull request Aug 8, 2026
Rewrite from current content: base master, the source set with each PR's
ref and tip, the branch-local changes, and the standing gotchas. lf-edge#6259 is
gone as a separate entry -- it closed unmerged and its instance-manager
gate is part of lf-edge#6240 now.

Signed-off-by: eriknordmark <erik@zededa.com>
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Signed-off-by: eriknordmark <erik@zededa.com>
@eriknordmark
eriknordmark force-pushed the evek-storage-readiness branch from a9f4e85 to cad6c2c Compare August 8, 2026 20:33
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

stable Should be backported to stable release(s)

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants