Repository navigation
Conversation
✅ Dynamo PR CI passed — run 41446969249 (attempt 1) on
|
estroz
left a comment
There was a problem hiding this comment.
thanks for running the upstream suite, this is exactly the signal we were missing, and the two api fixes close your own threads on #17630/#17633 so i'll pull this into #17615 and re-slice rather than fix them twice. tests pass locally at head; the red ci job is operator integration, which the workflow touch triggers and is unrelated. a few small things inline, all around the harness. one ask: squash to a single conventional commit before merge, there's a fixup! in there and the titles aren't in the repo's type(scope): ... form.
| name: MCS Conformance | ||
|
|
||
| on: | ||
| workflow_dispatch: |
There was a problem hiding this comment.
workflow_dispatch only, so nobody will run it. your coverage ask on #17629 (a ci path for the kind suite) is the same problem; i'd like one scheduled workflow on the base branch that runs both the e2e phases and this suite nightly and uploads the reports, plus a label trigger for prs. fine as a follow-up once #17636 is in, but let's plan it as one thing.
There was a problem hiding this comment.
I have escalated the combined CI trigger/scope decision before expanding this workflow. The full upstream run takes about 17 minutes plus image build/two-cluster setup; the custom e2e suite also builds GDS and uses three clusters. Nightly is not technically required, and affected-path PR CI or an explicit PR label can provide earlier feedback. No schedule/label change is included in this push. Leaving this thread open pending agreement on the combined CI plan.
There was a problem hiding this comment.
@ai-dynamo/dynamo-ops-codeowners could you weigh in on the trigger policy for a combined MCS e2e + upstream conformance workflow: affected-path PR runs, an explicit PR label, nightly, or a combination?
For sizing: the full upstream conformance suite took about 17 minutes locally, excluding image build and setup of its two kind clusters. The custom e2e suite additionally builds GDS and uses three clusters. These tests need no GPUs. The upstream suite currently passes all 15 required checks but still reports nine optional DNS-dependent failures because the harness does not deploy clusterset.local DNS; those results and artifacts remain visible.
Eric suggested one nightly workflow plus a PR-label trigger, potentially as a follow-up after #17636. Before choosing the cadence, we'd like Ops guidance on the repository's CI conventions and runner cost. Keeping this thread open for that decision.
0fd4c96 to
1a07d2f
Compare
Preserve traffic policies through registry projections and imported resources, and publish EndpointSlice object presence after successful reconciliation. Integrate the unmodified upstream MCS conformance suite on isolated kind clusters, with artifact reporting and dated baseline/post-fix summaries. Address review feedback on projection coverage, report URLs and artifacts. Part of #17601; refs DGH-2319. Signed-off-by: Dr. Stefan Schimanski <sschimanski@nvidia.com>
5ccd7b6 to
03b0d74
Compare
|
Rebased onto current #17615 head Addressed the projection-test, report-URL and generated-report feedback, confirmed EndpointSlice status semantics, and replied to/resolved those four threads. Validation: race-enabled module tests (95.7% coverage), lint, conformance-binary build, generated-file checks, workflow lint and pre-commit all pass. The 17-minute upstream run remains the dated evidence; it was not rerun for these test/report/build-metadata changes. The combined e2e/conformance CI trigger decision is escalated and remains open in its review thread; this push adds no nightly or label trigger. |
Overview
MCS imports dropped the selected
internalTrafficPolicyandtrafficDistribution, and never publishedstatus.endpointSliceObjects. This preserves the selected policies through registry responses and into both imported Kubernetes resources, and reports slice-object presence after successful reconciliation. It also integrates the unmodified upstream MCS conformance suite and records baseline and post-fix results.Stacked directly on #17615 (
estroz/mcs-port-module), rebased onto its complete implementation at1a07d2f1be90d8fd87c5b9ec0e99cf3253f7f730. The dated baseline below used the earlier0fd4c96b4esource.Key Changes
Core logic: 43 added nonblank, non-comment production lines, excluding generated code, tests, documentation and test infrastructure.
ServiceImport.internal_traffic_policy = 15andtraffic_distribution = 16; preserve winner values in full/lite registry views, the fake registry, ServiceImport and derived Service. Existing exports, storage representation and merge ownership already carry the values.endpointSliceObjectstoPresentfor a nonempty successfully applied slice set andAbsentfor an empty set. Include it in status comparison and patching; object presence is independent of endpoint readiness.v0.5.2commit, reuse e2e deployment/routing helpers on two isolated kind clusters, save reports/diagnostics, preserve failing exit status and clean up. A manual workflow uploads reports even on failure.API and Compatibility
Previously these policy fields and the EndpointSlice status were omitted from imported objects. For example, a source Service can explicitly select:
When its export wins the existing merge policy, the controller now writes the selected values to both the ServiceImport and derived Service. Example ServiceImport after slice reconciliation:
The controller owns these imported fields. Existing export validation and oldest-active-export selection apply.
Localretains Kubernetes node-local semantics, including exclusion of remote endpoints from node-local routing; traffic distribution remains a preference interpreted by Kubernetes.Both protobuf fields are additive. Older clients ignore them; newer controllers reading older registries leave unspecified policy and empty distribution omitted. The derived Service then defaults its policy to
Cluster. Removing a distribution from the selected export removes the previously owned value via server-side apply. Upgrade registry and controller together to propagate non-default policies; no stored-record, DynamoDB-table, CRD, RBAC or Helm schema change is needed.Validation
Executed the complete, unmodified upstream suite locally on fresh IPv4 kind
v0.33.0/ Kubernetesv1.35.8clusters with the memory registry. The fix run tests signed commit918d5228ab6dba417dc30e8c69c39df9eef615f4and imageglobal-discovery-mcs-conformance:e2e-0d629aebc7dc.Both runs execute 28 of 28 specifications with 0 skipped or pending. The post-fix suite took 1023.343 seconds (17m03s). Its binary exits 1 and Make exits 2 because the optional DNS-dependent cases still fail.
status.endpointSliceObjectsPresent/Absentspec.internalTrafficPolicynilspec.trafficDistributionnilThe headless StatefulSet DNS case also gets past its old status-field blocker and now reaches the DNS lookup. The nine remaining failures are five DNS cases and four DNS-dependent connectivity cases. The deployment has no
clusterset.localDNS provider; ordinary local Service DNS passes. Those failures cannot independently diagnose endpoint reachability or per-port routing. Upstream classifies them as execution/assertion failures with conformance status unknown; a raw entry withfailed: trueandconformant: trueis not a passing result.The original baseline and post-fix analysis remain as dated Markdown summaries with environment and provenance. Generated YAML reports are no longer checked into the current tree; both summaries link immutable historical report snapshots, and future workflow runs upload generated reports as artifacts.
The real-registry/envtest regression
TestImportTrafficPoliciesAndEndpointSliceStatuspasses in 0.63 seconds with the race detector. It covers projection into both resources, changing Local to Cluster, clearing a distribution, omitted-policy defaulting, correcting only slice status on a registry event, zero slices and unready endpoints. Pinned Kubernetes 1.30 envtest enables theServiceTrafficDistributionfeature gate so the field is exercised instead of pruned. The full module unit/envtest suite passes at 95.7% internal statement coverage. It was rerun for the review changes, alongside lint and conformance-binary compilation. The configurable report URL was checked with a failing stub for default/override handling, preservation of exit 42 and stale-report cleanup. Generated-file checks, workflow lint and pre-commit checks pass on the clean rebased tree. The recorded 17-minute conformance run predates this rebase; it was not repeated for the test/report/metadata-only review changes.Both dedicated kind clusters were removed; complete HTML/JSON/JUnit reports and diagnostics remain in ignored local artifacts. No suite filters, assertion changes, expected-failure conversions or DNS query rewrites are used. GitHub's manual workflow has not been run; the evidence is local. This run does not certify IPv6, DynamoDB, multi-region consistency, partition recovery, or full MCS conformance with DNS deployed.
Issues and Ongoing Work
estroz/mcs-port-module.Pull Request Checklist
/pr-checklistskill, including independent API/view, validation and adversarial reviews.