From 1509d6cc8b97b7b15fbf5ae9cab75c127e0d3c00 Mon Sep 17 00:00:00 2001 From: CMGS Date: Thu, 2 Jul 2026 00:41:47 +0800 Subject: [PATCH 1/2] feat(meta): add MarkRestoreFromHibernate setter Symmetric with ReadRestoreFromHibernate. The operator sets this on a pod it (re)creates for a hibernated agent so the new node restores the VM from its :hibernate snapshot instead of booting fresh. --- meta/hibernate.go | 11 +++++++++++ meta/hibernate_test.go | 15 +++++++++++++++ 2 files changed, 26 insertions(+) diff --git a/meta/hibernate.go b/meta/hibernate.go index 8db1c2f..448fa5f 100644 --- a/meta/hibernate.go +++ b/meta/hibernate.go @@ -36,3 +36,14 @@ func ReadRestoreFromHibernate(pod *corev1.Pod) bool { } return pod.Annotations[AnnotationRestoreFromHibernate] == annotationTrue } + +// MarkRestoreFromHibernate flags a freshly-built pod to restore its VM from the +// :hibernate snapshot instead of cloning from the base image. The operator sets +// this when it (re)creates a pod for an agent that is currently hibernated (see +// AnnotationRestoreFromHibernate); symmetric with ReadRestoreFromHibernate. +func MarkRestoreFromHibernate(pod *corev1.Pod) { + if pod == nil { + return + } + ensurePodAnnotations(pod)[AnnotationRestoreFromHibernate] = annotationTrue +} diff --git a/meta/hibernate_test.go b/meta/hibernate_test.go index 4350334..7987a85 100644 --- a/meta/hibernate_test.go +++ b/meta/hibernate_test.go @@ -65,6 +65,21 @@ func TestReadHibernateStateNilPod(t *testing.T) { } } +func TestMarkRestoreFromHibernate(t *testing.T) { + pod := &corev1.Pod{} + if ReadRestoreFromHibernate(pod) { + t.Fatal("fresh pod should not be flagged for restore") + } + MarkRestoreFromHibernate(pod) + if !ReadRestoreFromHibernate(pod) { + t.Errorf("MarkRestoreFromHibernate should round-trip through ReadRestoreFromHibernate") + } +} + +func TestMarkRestoreFromHibernateNilPod(t *testing.T) { + MarkRestoreFromHibernate(nil) // must not panic +} + func TestHibernateSnapshotTagConstant(t *testing.T) { if HibernateSnapshotTag != "hibernate" { t.Errorf("HibernateSnapshotTag = %q, want %q", HibernateSnapshotTag, "hibernate") From 45a8edcb7078c8af4eedc43afc92f4bffbd197fd Mon Sep 17 00:00:00 2001 From: CMGS Date: Thu, 2 Jul 2026 01:02:03 +0800 Subject: [PATCH 2/2] refactor(meta): two-line setter form for MarkRestoreFromHibernate (per review) --- meta/hibernate.go | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/meta/hibernate.go b/meta/hibernate.go index 448fa5f..517fedc 100644 --- a/meta/hibernate.go +++ b/meta/hibernate.go @@ -45,5 +45,6 @@ func MarkRestoreFromHibernate(pod *corev1.Pod) { if pod == nil { return } - ensurePodAnnotations(pod)[AnnotationRestoreFromHibernate] = annotationTrue + a := ensurePodAnnotations(pod) + a[AnnotationRestoreFromHibernate] = annotationTrue }