Skip to content

feat(operator): add experimental grove.forceScalingGroup for single-node components - #11772

Merged
julienmancuso merged 10 commits into
ai-dynamo:mainfrom
joeltg:feat/experimental-replica-grouping
Aug 5, 2026
Merged

feat(operator): add experimental grove.forceScalingGroup for single-node components#11772
julienmancuso merged 10 commits into
ai-dynamo:mainfrom
joeltg:feat/experimental-replica-grouping

Conversation

@joeltg

@joeltg joeltg commented Jul 16, 2026

Copy link
Copy Markdown
Contributor

Overview:

Adds an opt-in, per-component experimental.grove.forceScalingGroup boolean (v1beta1) that lets a single-node component render as a Grove PodCliqueScalingGroup instead of a standalone PodClique, so each replica becomes an independently gang-scheduled unit and horizontal scaling changes the scaling-group replica count.

API shape follows the maintainer proposal in #11774: false or omitted means "use automatic selection" (multi-node and inter-pod GMS components use a PCSG, ordinary single-node components use a PodClique), not "force PodClique".

Details:

Today the PCSG decision is hardcoded: only multi-node and inter-pod GMS components render as a PCSG; single-node components pool all replicas as pods of one standalone PodClique. With this change:

components:
- componentName: worker
  replicas: 4
  minAvailable: 1
  experimental:
    grove:
      forceScalingGroup: true

renders one PodCliqueScalingGroupConfig (replicas: 4, minAvailable: 1) containing a single one-pod clique. The scheduler sees one base PodGang (PCSG replicas [0, minAvailable) plus standalone cliques) and an independent scaled PodGang per remaining replica, each with a single one-pod PodGroup. Scaling the component patches the PCSG replicas, adding/removing whole PodGangs.

  • API: experimental.grove.forceScalingGroup field; UsesPCSG() (= isMultinode || isInterPodGMS || forceScalingGroup) centralizes the previously duplicated PCSG decision (PCS rendering, Grove readiness aggregation, restart progress tracking, reconcileGroveScaling, resource-name-length validation).
  • Rendering: single-node forced components emit one RoleMain clique with replicas: 1; the existing PCSG config path carries component.replicas / minAvailable unchanged. forceScalingGroup: true on a multi-node component is a redundant no-op (automatic selection already yields a PCSG).
  • Validation: Grove pathway only (same rule as minAvailable); the effective opt-in is immutable after creation (same pattern as the inter-pod GMS layout toggle since it re-shapes rendered resource names); explicit false is equivalent to omitted and can be added/removed freely.
  • Conversion: the grove block has no v1alpha1 representation; it is preserved across spoke round-trips, sparsely when set alongside alpha-representable experimental fields.
  • Generated: CRDs and deepcopy regenerated.

Defaults are fully backward compatible: omitting the field keeps today's rendering exactly.

Where should the reviewer start?

  • deploy/operator/api/v1beta1/common.go — the field and its semantics
  • deploy/operator/internal/dynamo/graph.goexpandSingleNodeScalingGroupRoles + UsesPCSG() call sites
  • deploy/operator/internal/webhook/validation/shared_v1beta1.go — create/update rules
  • deploy/operator/api/v1alpha1/shared_spec_conversion.go — hub-only preservation

Related Issues

🔗 This PR is linked to an issue:

🤖 Generated with Claude Code

Summary by CodeRabbit

  • New Features
    • Added the experimental Grove forceScalingGroup option for rendering single-node components with scaling-group support.
    • Added automatic selection of scaling-group rendering based on component configuration.
  • Validation
    • Restricted the option to supported Grove-backed components.
    • Made the setting immutable after creation.
  • Documentation
    • Updated CRD schemas and API reference documentation with configuration details.
  • Bug Fixes
    • Preserved Grove configuration during API version conversions.

@copy-pr-bot

copy-pr-bot Bot commented Jul 16, 2026

Copy link
Copy Markdown

This pull request requires additional validation before any workflows can run on NVIDIA's runners.

Pull request vetters can view their responsibilities here.

Contributors can view more details about this message here.

@joeltg
joeltg temporarily deployed to external_collaborator July 16, 2026 15:24 — with GitHub Actions Inactive
@joeltg
joeltg temporarily deployed to external_collaborator July 16, 2026 15:24 — with GitHub Actions Inactive
@github-actions

github-actions Bot commented Jul 16, 2026

Copy link
Copy Markdown
Contributor

@github-actions github-actions Bot added external-contribution Pull request is from an external contributor deployment::k8s Relates to dynamo deployment in kubernetes feat labels Jul 16, 2026
@joeltg
joeltg force-pushed the feat/experimental-replica-grouping branch from 1ef49bd to 5060ac2 Compare July 16, 2026 15:35
@joeltg
joeltg temporarily deployed to external_collaborator July 16, 2026 15:36 — with GitHub Actions Inactive
@datadog-official

This comment has been minimized.

@joeltg
joeltg force-pushed the feat/experimental-replica-grouping branch from 5060ac2 to 8acaa5a Compare July 18, 2026 15:21
@joeltg
joeltg temporarily deployed to external_collaborator July 18, 2026 15:21 — with GitHub Actions Inactive
@joeltg joeltg changed the title feat(operator): add experimental replicaGrouping for single-node Grove components feat(operator): add experimental grove.forceScalingGroup for single-node components Jul 18, 2026
@joeltg
joeltg marked this pull request as ready for review July 18, 2026 16:04
@joeltg
joeltg requested a review from a team as a code owner July 18, 2026 16:04

@devin-ai-integration devin-ai-integration Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

✅ Devin Review: No Issues Found

Devin Review analyzed this PR and found no bugs or issues to report.

Open in Devin Review

@coderabbitai

coderabbitai Bot commented Jul 18, 2026

Copy link
Copy Markdown
Contributor

Review Change Stack

Walkthrough

The PR adds spec.experimental.grove.forceScalingGroup to the v1beta1 API. It preserves the field during conversion, validates Grove usage and immutability, and routes Grove rendering and reconciliation through UsesPCSG().

Changes

Grove force scaling group

Layer / File(s) Summary
API shape and conversion preservation
deploy/operator/api/v1beta1/..., deploy/operator/api/v1alpha1/..., deploy/operator/config/crd/bases/..., docs/fern/...
Adds GroveSpec, CRD schemas, deepcopy methods, API documentation, conversion preservation, and round-trip coverage.
Validation and update immutability
deploy/operator/internal/webhook/validation/...
Validates Grove pathway usage and rejects effective forceScalingGroup changes after creation. Envtest cases cover create and update behavior.
PCSG selection and Grove rendering
deploy/operator/api/v1beta1/dynamocomponentdeployment_types.go, deploy/operator/internal/dynamo/..., deploy/operator/internal/webhook/validation/dynamographdeployment_helpers.go
Adds UsesPCSG() and uses it for role expansion, naming, readiness-resource selection, and Grove PodCliqueSet generation. Forced single-node components use one engine pod and horizontal PCSG replicas.
Reconciliation and readiness routing
deploy/operator/internal/controller/...
Uses UsesPCSG() to select Grove readiness checks and scaling targets.

Estimated code review effort: 4 (Complex) | ~45 minutes

🚥 Pre-merge checks | ✅ 4 | ❌ 1

❌ Failed checks (1 warning)

Check name Status Explanation Resolution
Docstring Coverage ⚠️ Warning Docstring coverage is 33.33% which is insufficient. The required threshold is 80.00%. Write docstrings for the functions missing them to satisfy the coverage threshold.
✅ Passed checks (4 passed)
Check name Status Explanation
Title check ✅ Passed The title clearly and concisely identifies the addition of experimental grove.forceScalingGroup for single-node components.
Description check ✅ Passed The description completes all required sections and explains the API, rendering, validation, conversion, generated changes, and review starting points.
Linked Issues check ✅ Passed Check skipped because no linked issues were found for this pull request.
Out of Scope Changes check ✅ Passed Check skipped because no linked issues were found for this pull request.

Warning

There were issues while running some tools. Please review the errors and either fix the tool's configuration or disable the tool if it's a critical failure.

🔧 golangci-lint (2.12.2)

level=error msg="[linters_context] typechecking error: pattern ./...: directory prefix . does not contain main module or its selected dependencies"


Comment @coderabbitai help to get the list of available commands.

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🧹 Nitpick comments (1)
deploy/operator/api/v1alpha1/dynamocomponentdeployment_conversion_test.go (1)

626-668: 🗄️ Data Integrity & Integration | 🔵 Trivial | ⚡ Quick win

Add graph-level conversion round-trip coverage.

This test only exercises DynamoComponentDeployment, while DynamoGraphDeploymentSpec.components.experimental.grove.forceScalingGroup is also a conversion contract. Add a graph round-trip case to protect that path independently.

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@deploy/operator/api/v1alpha1/dynamocomponentdeployment_conversion_test.go`
around lines 626 - 668, Extend TestDCD_RoundTrip_ExperimentalGrove with an
independent DynamoGraphDeploymentSpec round-trip case covering
components.experimental.grove.forceScalingGroup. Construct a graph containing
the grove-only experimental field, run it through the graph conversion
round-trip helper, and assert the original and converted graph specs are
equivalent.
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Nitpick comments:
In `@deploy/operator/api/v1alpha1/dynamocomponentdeployment_conversion_test.go`:
- Around line 626-668: Extend TestDCD_RoundTrip_ExperimentalGrove with an
independent DynamoGraphDeploymentSpec round-trip case covering
components.experimental.grove.forceScalingGroup. Construct a graph containing
the grove-only experimental field, run it through the graph conversion
round-trip helper, and assert the original and converted graph specs are
equivalent.

ℹ️ Review info
⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: CHILL

Plan: Enterprise

Run ID: 0fad3eeb-6acc-4f01-a596-4b928b567926

📥 Commits

Reviewing files that changed from the base of the PR and between dad08ea and 8acaa5a.

📒 Files selected for processing (16)
  • deploy/operator/api/v1alpha1/conversion_field_coverage_test.go
  • deploy/operator/api/v1alpha1/dynamocomponentdeployment_conversion_test.go
  • deploy/operator/api/v1alpha1/shared_spec_conversion.go
  • deploy/operator/api/v1beta1/common.go
  • deploy/operator/api/v1beta1/dynamocomponentdeployment_types.go
  • deploy/operator/api/v1beta1/zz_generated.deepcopy.go
  • deploy/operator/config/crd/bases/nvidia.com_dynamocomponentdeployments.yaml
  • deploy/operator/config/crd/bases/nvidia.com_dynamographdeployments.yaml
  • deploy/operator/internal/controller/dynamographdeployment_controller.go
  • deploy/operator/internal/dynamo/graph.go
  • deploy/operator/internal/dynamo/graph_test.go
  • deploy/operator/internal/dynamo/grove.go
  • deploy/operator/internal/webhook/validation/dynamographdeployment_helpers.go
  • deploy/operator/internal/webhook/validation/dynamographdeployment_test.go
  • deploy/operator/internal/webhook/validation/shared_helpers.go
  • deploy/operator/internal/webhook/validation/shared_v1beta1.go

@joeltg
joeltg force-pushed the feat/experimental-replica-grouping branch from 8acaa5a to 62654f0 Compare July 18, 2026 16:15
@joeltg
joeltg temporarily deployed to external_collaborator July 18, 2026 16:15 — with GitHub Actions Inactive
…ode components

Add components[].experimental.grove.forceScalingGroup (bool) to the
v1beta1 shared component spec. False or omitted means automatic
selection: multi-node and inter-pod GMS components render as a Grove
PodCliqueScalingGroup, other single-node components pool their replicas
as pods of one standalone PodClique — exactly today's behavior. Setting
forceScalingGroup: true opts a single-node component into the PCSG
layout: the scaling-group replica count carries the horizontal scale,
with a single one-pod PodClique per replica, so each replica is an
independently gang-scheduled unit (its own PodGang beyond minAvailable)
and scaling stamps out or removes whole PodGangs.

- Centralize the previously duplicated "multinode || inter-pod GMS"
  PCSG decision as DynamoComponentDeploymentSharedSpec.UsesPCSG()
  (= isMultinode || isInterPodGMS || forceScalingGroup) and use it in
  PCS rendering, Grove readiness aggregation, restart progress
  tracking, reconcileGroveScaling, and resource-name-length validation.
- Validation: Grove pathway only (same rule as minAvailable); the
  effective opt-in is immutable after creation (same pattern as the
  inter-pod GMS layout toggle); explicit false is equivalent to
  omitted and freely add/removable.
- Conversion: the grove block has no v1alpha1 representation; preserve
  it across spoke round-trips, sparsely when it sits alongside
  alpha-representable experimental fields.

API shape per review discussion in ai-dynamo#11774.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Signed-off-by: joeltg <joel@reflection.ai>
@joeltg
joeltg force-pushed the feat/experimental-replica-grouping branch from 62654f0 to 40464ac Compare July 18, 2026 16:28
@joeltg
joeltg requested a review from a team as a code owner July 18, 2026 16:28
@joeltg
joeltg temporarily deployed to external_collaborator July 18, 2026 16:28 — with GitHub Actions Inactive
@github-actions github-actions Bot added the documentation Improvements or additions to documentation label Jul 18, 2026
@joeltg
joeltg temporarily deployed to external_collaborator July 20, 2026 13:20 — with GitHub Actions Inactive

@julienmancuso julienmancuso left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Two P2 findings from the operator API and validation review.

Comment thread deploy/operator/internal/webhook/validation/shared_v1beta1.go Outdated
Comment thread deploy/operator/api/v1beta1/common.go Outdated
@joeltg

joeltg commented Jul 30, 2026

Copy link
Copy Markdown
Contributor Author

@julienmancuso any other feedback here? would love to get this in, would give us a lot more confidence in our ability to integrate with our scheduler :)

@athreesh

athreesh commented Aug 4, 2026

Copy link
Copy Markdown
Contributor

@joeltg reading thru PR, given offline context

@julienmancuso

Copy link
Copy Markdown
Contributor

@joeltg , sorry for the delay, please rebase and i'll review / approve with high priority

…eplica-grouping

Signed-off-by: joeltg <joel@reflection.ai>

# Conflicts:
#	deploy/operator/internal/controller/dynamographdeployment_controller.go
#	deploy/operator/internal/dynamo/grove.go
@joeltg
joeltg temporarily deployed to external_collaborator August 4, 2026 17:26 — with GitHub Actions Inactive
@julienmancuso

Copy link
Copy Markdown
Contributor

/ok to test e064cf5

@julienmancuso

Copy link
Copy Markdown
Contributor

@coderabbitai full review

@coderabbitai

coderabbitai Bot commented Aug 4, 2026

Copy link
Copy Markdown
Contributor
✅ Action performed

Full review finished.

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🧹 Nitpick comments (4)
deploy/operator/internal/webhook/validation/shared_helpers.go (1)

185-190: 📐 Maintainability & Code Quality | 🔵 Trivial | 💤 Low value

Add story comments to the new multi-line Go blocks.

  • deploy/operator/internal/webhook/validation/shared_helpers.go#L185-L190: Add a comment that explains the nil ExperimentalSpec behavior.
  • deploy/operator/internal/webhook/validation/shared_v1beta1.go#L232-L238: Add a comment that explains Grove create validation.
  • deploy/operator/internal/webhook/validation/shared_v1beta1.go#L315-L320: Add a comment that explains the Grove-pathway rejection.
  • deploy/operator/internal/webhook/validation/shared_v1beta1.go#L432-L438: Add a comment that explains removal handling.
  • deploy/operator/internal/webhook/validation/shared_v1beta1.go#L515-L528: Add a comment that explains Grove update validation.
  • deploy/operator/internal/webhook/validation/shared_v1beta1.go#L541-L549: Add a comment that explains effective opt-in immutability.

As per coding guidelines, “In Go code, put a one-line story comment above every multi-line block of logically connected code.”

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@deploy/operator/internal/webhook/validation/shared_helpers.go` around lines
185 - 190, Add one-line story comments above each specified multi-line block: in
deploy/operator/internal/webhook/validation/shared_helpers.go lines 185-190,
explain the nil ExperimentalSpec behavior; in
deploy/operator/internal/webhook/validation/shared_v1beta1.go lines 232-238,
315-320, 432-438, 515-528, and 541-549, respectively explain Grove create
validation, Grove-pathway rejection, removal handling, Grove update validation,
and effective opt-in immutability. Keep the comments concise and describe the
block’s behavior without changing its logic.

Source: Coding guidelines

deploy/operator/internal/dynamo/graph_test.go (1)

5085-5100: 📐 Maintainability & Code Quality | 🔵 Trivial | ⚡ Quick win

Add t.Log headings for the test steps.

The new tests use comments but do not log their setup, render, and assertion phases.

  • deploy/operator/internal/dynamo/graph_test.go#L5085-L5100: Add t.Log headings before component setup, role expansion, and result comparison.
  • deploy/operator/internal/dynamo/graph_test.go#L8793-L8847: Add t.Log headings before deployment setup, beta-only configuration, rendering, and PCSG assertions.

As per coding guidelines, “In Go tests, use t.Log to explain the test's story, with one heading before each block implementing a test step.”

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@deploy/operator/internal/dynamo/graph_test.go` around lines 5085 - 5100, Add
t.Log headings for each test step in
deploy/operator/internal/dynamo/graph_test.go:5085-5100, before component setup,
role expansion, and result comparison in
TestExpandRolesForComponent_SingleNodeForceScalingGroup; and in
deploy/operator/internal/dynamo/graph_test.go:8793-8847, before deployment
setup, beta-only configuration, rendering, and PCSG assertions. Use one heading
per block without changing test behavior.

Source: Coding guidelines

deploy/operator/api/v1alpha1/dynamocomponentdeployment_conversion_test.go (1)

626-628: 📐 Maintainability & Code Quality | 🔵 Trivial | ⚡ Quick win

Use t.Log for the test story.

This new test uses a paragraph comment to describe its steps. The Go test guidelines require t.Log headings before test-step blocks. Move the story into the subtest before fixture construction and round-trip validation.

Proposed change
-// The grove block has no v1alpha1 representation and must survive the spoke
-// round-trip both alone (whole hub-only block preserved) and alongside
-// alpha-representable fields (sparse preservation merged back).
 func TestDCD_RoundTrip_ExperimentalGrove(t *testing.T) {
...
 		t.Run(tt.name, func(t *testing.T) {
+			t.Log("Round-trip the Grove configuration through v1alpha1 conversion")
 			src := &v1beta1.DynamoComponentDeployment{
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@deploy/operator/api/v1alpha1/dynamocomponentdeployment_conversion_test.go`
around lines 626 - 628, Update the affected conversion test subtest to replace
the paragraph comment describing the grove round-trip scenarios with a t.Log
heading before fixture construction and round-trip validation, preserving the
existing test behavior and story content.

Source: Coding guidelines

deploy/operator/api/v1alpha1/conversion_field_coverage_test.go (1)

121-121: 🗄️ Data Integrity & Integration | 🔵 Trivial | ⚡ Quick win

Add graph-deployment round-trip coverage.

The field set now acknowledges DynamoGraphDeploymentSpec.components.experimental.grove.forceScalingGroup, but the supplied round-trip test covers only DynamoComponentDeployment. Add a graph-deployment round-trip case, or verify an existing test exercises this conversion path. Otherwise, a graph conversion regression could drop the preserved field while this acknowledgement test still passes.

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@deploy/operator/api/v1alpha1/conversion_field_coverage_test.go` at line 121,
Add round-trip coverage for DynamoGraphDeploymentSpec conversion, specifically
exercising components.experimental.grove.forceScalingGroup through both
conversion directions and verifying it is preserved. Update the existing
round-trip test suite in conversion_field_coverage_test.go or add a dedicated
graph-deployment case alongside the DynamoComponentDeployment coverage.
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Nitpick comments:
In `@deploy/operator/api/v1alpha1/conversion_field_coverage_test.go`:
- Line 121: Add round-trip coverage for DynamoGraphDeploymentSpec conversion,
specifically exercising components.experimental.grove.forceScalingGroup through
both conversion directions and verifying it is preserved. Update the existing
round-trip test suite in conversion_field_coverage_test.go or add a dedicated
graph-deployment case alongside the DynamoComponentDeployment coverage.

In `@deploy/operator/api/v1alpha1/dynamocomponentdeployment_conversion_test.go`:
- Around line 626-628: Update the affected conversion test subtest to replace
the paragraph comment describing the grove round-trip scenarios with a t.Log
heading before fixture construction and round-trip validation, preserving the
existing test behavior and story content.

In `@deploy/operator/internal/dynamo/graph_test.go`:
- Around line 5085-5100: Add t.Log headings for each test step in
deploy/operator/internal/dynamo/graph_test.go:5085-5100, before component setup,
role expansion, and result comparison in
TestExpandRolesForComponent_SingleNodeForceScalingGroup; and in
deploy/operator/internal/dynamo/graph_test.go:8793-8847, before deployment
setup, beta-only configuration, rendering, and PCSG assertions. Use one heading
per block without changing test behavior.

In `@deploy/operator/internal/webhook/validation/shared_helpers.go`:
- Around line 185-190: Add one-line story comments above each specified
multi-line block: in
deploy/operator/internal/webhook/validation/shared_helpers.go lines 185-190,
explain the nil ExperimentalSpec behavior; in
deploy/operator/internal/webhook/validation/shared_v1beta1.go lines 232-238,
315-320, 432-438, 515-528, and 541-549, respectively explain Grove create
validation, Grove-pathway rejection, removal handling, Grove update validation,
and effective opt-in immutability. Keep the comments concise and describe the
block’s behavior without changing its logic.

ℹ️ Review info
⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: CHILL

Plan: Enterprise

Run ID: a828284e-ca37-4156-b082-f4da91796c1e

📥 Commits

Reviewing files that changed from the base of the PR and between 25090d2 and e064cf5.

📒 Files selected for processing (19)
  • deploy/operator/api/v1alpha1/conversion_field_coverage_test.go
  • deploy/operator/api/v1alpha1/dynamocomponentdeployment_conversion_test.go
  • deploy/operator/api/v1alpha1/shared_spec_conversion.go
  • deploy/operator/api/v1beta1/common.go
  • deploy/operator/api/v1beta1/dynamocomponentdeployment_types.go
  • deploy/operator/api/v1beta1/zz_generated.deepcopy.go
  • deploy/operator/config/crd/bases/nvidia.com_dynamocomponentdeployments.yaml
  • deploy/operator/config/crd/bases/nvidia.com_dynamographdeployments.yaml
  • deploy/operator/internal/controller/dgd_grove_restart_progress_resolver.go
  • deploy/operator/internal/controller/dgd_grove_scaler.go
  • deploy/operator/internal/dynamo/graph.go
  • deploy/operator/internal/dynamo/graph_test.go
  • deploy/operator/internal/dynamo/grove.go
  • deploy/operator/internal/webhook/validation/dynamographdeployment_helpers.go
  • deploy/operator/internal/webhook/validation/dynamographdeployment_validation_envtest_test.go
  • deploy/operator/internal/webhook/validation/shared_helpers.go
  • deploy/operator/internal/webhook/validation/shared_test.go
  • deploy/operator/internal/webhook/validation/shared_v1beta1.go
  • docs/fern/pages/reference/kubernetes-api/additional-resources/api-reference-k8s.md

@julienmancuso julienmancuso left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Two additional P2 findings from the Grove scheduling/API contract review.

Comment thread deploy/operator/api/v1beta1/common.go Outdated
Comment thread deploy/operator/api/v1beta1/dynamocomponentdeployment_types.go
joeltg and others added 2 commits August 4, 2026 18:18
…eplica-grouping

Signed-off-by: joeltg <joel@reflection.ai>

# Conflicts:
#	deploy/operator/internal/webhook/validation/shared_test.go
#	deploy/operator/internal/webhook/validation/shared_v1beta1.go
…apping accurately

Address review feedback on the published API contract:

- minAvailable: describe the Grove mapping in terms of scaling-group
  membership (multi-node, inter-pod GMS, or grove.forceScalingGroup;
  see UsesPCSG) instead of the stale single-node-vs-multi-node split.
- forceScalingGroup: state the factual PodGang mapping — the first
  minAvailable replicas join the deployment's base PodGang together
  with its other base workloads — instead of promising fully
  independent replicas, which Grove's base-gang semantics cannot
  provide.

Regenerate CRDs and the API reference from the updated comments.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Signed-off-by: joeltg <joel@reflection.ai>
@joeltg
joeltg temporarily deployed to external_collaborator August 4, 2026 18:20 — with GitHub Actions Inactive
@julienmancuso

Copy link
Copy Markdown
Contributor

/ok to test a46cbda

@julienmancuso
julienmancuso enabled auto-merge (squash) August 4, 2026 23:31
@joeltg

joeltg commented Aug 5, 2026

Copy link
Copy Markdown
Contributor Author

^ CI just needs a rerun for the failed workflow I think! thanks so much @julienmancuso

@julienmancuso
julienmancuso temporarily deployed to external_collaborator August 5, 2026 13:24 — with GitHub Actions Inactive
@dynamo-ops

Copy link
Copy Markdown
Contributor

/ok to test e6d6b52

1 similar comment
@julienmancuso

Copy link
Copy Markdown
Contributor

/ok to test e6d6b52

@harryskim harryskim left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

LGTM

@julienmancuso
julienmancuso temporarily deployed to external_collaborator August 5, 2026 20:57 — with GitHub Actions Inactive
@julienmancuso

Copy link
Copy Markdown
Contributor

/ok to test 69faafd

1 similar comment
@dynamo-ops

Copy link
Copy Markdown
Contributor

/ok to test 69faafd

@julienmancuso
julienmancuso merged commit 5c59b3e into ai-dynamo:main Aug 5, 2026
96 checks passed
hhzhang16 added a commit that referenced this pull request Aug 6, 2026
dyn-3691-extract-shared-target-pid-cuda-customstorage-operation-layer

* 'main' of https://github.com/ai-dynamo/dynamo: (65 commits)
  fix(frontend): emit SGLang stream role once (#12741)
  docs(fern): promote v1.3.1 to current release (#12752)
  fix(docs): remove duplicate unscoped community-rail CSS rules (#12615)
  feat(operator): migrate CRD storage to v1beta1 (#11904)
  fix: synchronize self-benchmark capacity across DP ranks (#12021)
  chore(deps): bump dynamo-tokenizers to 1.8.0 (#12707)
  fix(frontend): preserve split UTF-8 characters (#12688)
  docs: align Kubernetes build selector with CLI (#12729)
  fix(frontend): preserve completion backend error status (#12706)
  fix(operator): replace snapshot pods after GMS restart (#11286)
  refactor(media): rename installer module, drop --packages per review
  fix(media): harden installer against three pre-redesign review findings
  fix(media): verify installs in a fresh interpreter; teach --pip-args= form
  test(serve): install test-time decoders at the validated bounds
  feat(media): explicit installer for additional media decoders
  docs(spica): correct kv_load_ratio support guidance (#12714)
  feat(operator): add experimental grove.forceScalingGroup for single-node components (#11772)
  fix(vllm): declare entry-stage engine_input_source in GLM-Image NIXL config (#12709)
  chore: bump trtllm to v1.3.0rc23 (#12532)
  perf: remove trtllm postprocessing workers from the args as post processing workers are not effective in dynamo (#12592)
  ...

Signed-off-by: Hannah Zhang <hannahz@nvidia.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

deployment::k8s Relates to dynamo deployment in kubernetes documentation Improvements or additions to documentation external-contribution Pull request is from an external contributor feat size/L

Projects

None yet

Development

Successfully merging this pull request may close these issues.

5 participants