Hacktoberfest 2026: những issue maintainer đã đánh dấu cho tháng Mười, đang mở và phù hợp người mới. Xem issue Hacktoberfest

[Bug]: ClusterPolicy reconcile panics when a DaemonSet has no annotations

Đang mở
#3,096 3 bình luận 0 reaction 0 người được giao Xem trên GitHub

Maintainer thường phản hồi trong vòng 1 ngày

@SebTardif đang làm issue này rồi.

Từ ngày 20/10/2026.

  • #3097 của @SebTardif — đang mở

Đánh giá

Độ khó
2/5
Thời gian dự kiến
1-3 giờ
Mức phù hợp với người mới
25/100
Loại issue
Lỗi
Độ rõ ràng
Đặc tả rõ ràng
Mức độ hoạt động
Đình trệ
Công nghệ
go, kubernetes

Hướng nghiên cứu

Read controllers/object_controls.go and run go test -count=1 -run TestIsDaemonsetSpecChanged/nil_live_annotations ./controllers/ to reproduce the panic. The issue says the desired DaemonSet must have allocated annotations, while a nil live annotation map should be treated like a missing hash. Done means the test passes and reconciliation updates the live DaemonSet; a pull request is already open.

Do mô hình lập chỉ mục viết ra từ nội dung của issue.

Mô tả

Describe the bug

isDaemonsetSpecChanged panics when the live DaemonSet object has a nil annotation map. controller-runtime recovers the panic, so the operator process stays up, but that ClusterPolicy reconcile does not converge.

This was found by reading controllers/object_controls.go on main (operator v26.7.2). It is not a live cluster repro. The panic was added in 7843bcbfa, which assumed both DaemonSets already had an annotation map. Issue #499 was a different nil-map panic, in applyCommonDaemonsetMetadata, and that one was fixed.

To reproduce

From the code path:

  1. Call isDaemonsetSpecChanged with a live DaemonSet whose metadata.annotations is nil.
  2. A real apps/v1 read does not produce that nil map. etcd stores the internal DaemonSet, and conversion to apps/v1 always writes deprecated.daemonset.template.generation. Removing nvidia.com/last-applied-hash leaves that annotation, so the map stays non-nil.
  3. A unit test or a fake client can still pass a nil map. On main, that panics before the missing-hash branch runs.

Unit test, on current main:

go test -count=1 -run TestIsDaemonsetSpecChanged/nil_live_annotations ./controllers/

That case panics with appsv1.DaemonSet.Annotations must be allocated prior to calling isDaemonsetSpecChanged().

Expected behavior

Treat a nil live annotation map like a missing hash: set nvidia.com/last-applied-hash on the desired DaemonSet and update it. The NVIDIADriver path in internal/state/state_skel.go already does this with GetAnnotations().

The desired object should still be required to have an allocated annotation map. The caller allocates that before the compare.

I will open a pull request with that change. This does not implement #3071 (detecting spec drift beyond the stored hash).

Ngôn ngữ chính
Go
Star
2.9k
Fork
582
Merge trung bình
2 ngày 2 giờ
Pull request đã merge (30 ngày)
57

Chuẩn bị môi trường

Bắt đầu từ đâu

  1. Đọc hết issue, rồi đọc hướng dẫn đóng góp của dự án.
  2. Bình luận trên issue rằng bạn sẽ nhận — tránh hai người làm cùng một việc.
  3. Fork repository và làm thay đổi trên một nhánh.
  4. Mở pull request có tham chiếu số hiệu của issue.

Issue khác của NVIDIA/gpu-operator

Tất cả issue của NVIDIA/gpu-operator

Issue tương tự

Thêm issue về Go

Nhận issue mới trong hộp thư của bạn

Bản tóm tắt ngắn những issue GitHub phù hợp với người mới.