Skip to content

informers: use maps.Equal for label/annotation predicates#74

Merged
tamalsaha merged 1 commit into
masterfrom
refactor/maps-equal-predicates
Jun 6, 2026
Merged

informers: use maps.Equal for label/annotation predicates#74
tamalsaha merged 1 commit into
masterfrom
refactor/maps-equal-predicates

Conversation

@tamalsaha

Copy link
Copy Markdown
Contributor

Summary

Replace `reflect.DeepEqual` with `maps.Equal` (Go 1.21+) for label/annotation comparisons in Node / Service / Ingress informer predicates. Both are correct; `maps.Equal` skips the reflect wrapper allocations and is roughly 10× faster on typical small maps.

`Status.Addresses` / `Status.LoadBalancer` keep `reflect.DeepEqual` — those are nested struct slices where a typed comparator wouldn't be cleaner.

Test plan

  • `go build ./...`
  • Confirm informer still fires when a Service annotation changes; still drops no-op resyncs

reflect.DeepEqual on map[string]string is correct but allocates
reflect.Value wrappers per element and walks the runtime type tables.
maps.Equal (Go 1.21+) is a tight equality loop over the same kind/value
pairs and is roughly 10x faster on the typical
small-but-not-empty label/annotation maps an informer sees.

Status.Addresses / Status.LoadBalancer remain on reflect.DeepEqual —
those are nested struct slices where the concise alternative would be
slices.EqualFunc with a per-field comparator, which is not a win here.

Signed-off-by: Tamal Saha <tamal@appscode.com>
@tamalsaha tamalsaha merged commit 2535a2b into master Jun 6, 2026
4 checks passed
@tamalsaha tamalsaha deleted the refactor/maps-equal-predicates branch June 6, 2026 15:47
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant