Conversation
Tenants and dashboards observing Skipper need to migrate from the legacy "function" vocabulary at their own pace. Add the new "assignment" form on every external-facing surface alongside the legacy form so rolling deploys and dashboard migration stay decoupled from the cluster upgrade. The router accepts either x-skipper-function or x-skipper-assignment; when both are present the canonical header wins. SetHeader dual-writes both names so receivers on either vocabulary see the body. The outbound header strip removes both before forwarding to the assigned pod. Each Vec metric carrying function_deployment now also declares assignment_deployment; every WithLabelValues site passes the deployment twice. Per-series cardinality is unchanged. Every site emitting the function identity group via slog or OTLP now also emits the assignment group with identical contents. The keys.golden capture asserts both vocabularies appear on the same emission. The cleanup plan removes the legacy half after one full deploy plus a documented deprecation window.
Contributor
Author
|
This change is part of the following stack: Change managed by git-spice. |
This was referenced May 8, 2026
This branch has not been deployed
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.
Phase 2 of the assignment-redesign plan. Tenants and dashboards observing Skipper need to migrate from the legacy
functionvocabulary at their own pace, decoupled from the cluster upgrade.This PR adds the canonical
assignmentform on every external-facing surface alongside the legacy form:x-skipper-functionorx-skipper-assignment; when both are present, the canonical header wins.SetHeaderdual-writes both names so receivers on either vocabulary see the body. The outbound header strip in the router's request-forwarding path deletes both before forwarding to the assigned pod.function_deploymentnow also declaresassignment_deployment; everyWithLabelValuessite passes the deployment value twice. Per-series cardinality is unchanged (one extra label key with the same value-set). Dashboards filtering by either name return identical data.functionidentity group viaLegacyFunctionKey.Slog/Attrnow also emits theassignmentgroup with identical contents. The captured-attrs golden ininternal/key/testdata/keys.goldenregenerated to assert both vocabularies appear on the same emission.The cleanup plan removes the legacy half after one full deploy plus a documented deprecation window. Stacked on top of #138 (Phase 1: type rename + K8s annotation dual-write).
Test plan
dev test ./...-- 1227 tests passdev lintcleandev kube-lintcleanAssignmentFromHeadercache-hit at ~114 ns,rewriteRequestHeadersat ~280 ns)Plan:
tmp/assignment-redesign/plan.md