feat(nvca): add grove and kai-scheduler Karta defns - #726
Conversation
Signed-off-by: Eric Stroczynski <estroczynski@nvidia.com>
📝 WalkthroughWalkthroughThe PR adds Karta configurations for DynamoGraphDeployment, PodCliqueSet, and Kai Scheduler PodGroup resources. The configurations map lifecycle states, discover child resources, define scaling and pod selectors, register supported kinds, and configure gang-scheduling groups. ChangesKarta resource mappings
Estimated code review effort: 3 (Moderate) | ~20 minutes Suggested reviewers: 🚥 Pre-merge checks | ✅ 5✅ Passed checks (5 passed)
✨ Finishing Touches🧪 Generate unit tests (beta)
Comment |
There was a problem hiding this comment.
Actionable comments posted: 3
🤖 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.
Inline comments:
In
`@src/compute-plane-services/nvca/internal/miniservice/karta/dynamo/nvidia.com_dynamographdeployment_v1beta1.yaml`:
- Around line 16-26: Add repository-native validation tests for both Dynamo
mappings: in
src/compute-plane-services/nvca/internal/miniservice/karta/dynamo/nvidia.com_dynamographdeployment_v1beta1.yaml:16-26,
cover initializing, running, and failed phases; in :49-75, cover child kinds and
normalized gang group keys; in
src/compute-plane-services/nvca/internal/miniservice/karta/dynamo/nvidia.com_dynamographdeployment_v1alpha1.yaml:21,
cover the initializing mapping; and in :52-78, cover child kinds and gang group
keys. Run the repository-native test runner before committing.
In
`@src/compute-plane-services/nvca/internal/miniservice/karta/grove/grove_io_podcliqueset_v1alpha1.yaml`:
- Around line 4-101: Add regression coverage for the Karta mapping defined by
the root component and child components clique and scalinggroup, validating
status mappings, resource discovery, scaling paths, pod selectors, and
gangScheduling configuration; if this repository has no applicable test
mechanism for YAML mappings, document that justification in the PR instead.
In
`@src/compute-plane-services/nvca/internal/miniservice/karta/kai-scheduler/scheduling-run-ai-podgroup-v2alpha2.yaml`:
- Around line 16-17: The scaleDefinition replicasPath mapping is incorrect for
hierarchical PodGroups because it reports scheduling thresholds as the current
replica count. Update the hierarchical PodGroup configuration to use a
Karta-compatible replica-count mapping, or remove scale reporting for this
unsupported mode; preserve the existing flat PodGroup behavior and add
regression coverage for both modes, or document why tests are not applicable.
🪄 Autofix
Fix all unresolved CodeRabbit comments on this PR:
- Push a commit to this branch (recommended)
- Create a new PR with the fixes
ℹ️ Review info
⚙️ Run configuration
Configuration used: Path: .coderabbit.yaml
Review profile: CHILL
Plan: Enterprise
Run ID: 68e96a02-17ec-4601-9f44-7e9740733e73
📒 Files selected for processing (4)
src/compute-plane-services/nvca/internal/miniservice/karta/dynamo/nvidia.com_dynamographdeployment_v1alpha1.yamlsrc/compute-plane-services/nvca/internal/miniservice/karta/dynamo/nvidia.com_dynamographdeployment_v1beta1.yamlsrc/compute-plane-services/nvca/internal/miniservice/karta/grove/grove_io_podcliqueset_v1alpha1.yamlsrc/compute-plane-services/nvca/internal/miniservice/karta/kai-scheduler/scheduling-run-ai-podgroup-v2alpha2.yaml
| statusDefinition: | ||
| phaseDefinition: | ||
| path: .status.state | ||
| statusMappings: | ||
| initializing: | ||
| - byPhase: initializing | ||
| - byPhase: pending | ||
| running: | ||
| - byPhase: successful | ||
| failed: | ||
| - byPhase: failed |
There was a problem hiding this comment.
📐 Maintainability & Code Quality | 🟡 Minor | ⚡ Quick win
Add validation coverage for both Dynamo mappings.
The PR changes lifecycle classification, child discovery, and gang-scheduling behavior. The supplied PR contains no tests and no explanation that tests do not apply.
src/compute-plane-services/nvca/internal/miniservice/karta/dynamo/nvidia.com_dynamographdeployment_v1beta1.yaml#L16-L26: Testinitializing,running, andfailedphase mappings.src/compute-plane-services/nvca/internal/miniservice/karta/dynamo/nvidia.com_dynamographdeployment_v1beta1.yaml#L49-L75: Test child kinds and normalized gang group keys.src/compute-plane-services/nvca/internal/miniservice/karta/dynamo/nvidia.com_dynamographdeployment_v1alpha1.yaml#L21-L21: Test the newinitializingphase mapping.src/compute-plane-services/nvca/internal/miniservice/karta/dynamo/nvidia.com_dynamographdeployment_v1alpha1.yaml#L52-L78: Test child kinds and gang group keys.
Run the repository-native test runner before merge.
As per coding guidelines, “Code changes must include tests, or the Pull Request must explain why tests are not applicable; run the repository-native test runner before committing.”
📍 Affects 2 files
src/compute-plane-services/nvca/internal/miniservice/karta/dynamo/nvidia.com_dynamographdeployment_v1beta1.yaml#L16-L26(this comment)src/compute-plane-services/nvca/internal/miniservice/karta/dynamo/nvidia.com_dynamographdeployment_v1beta1.yaml#L49-L75src/compute-plane-services/nvca/internal/miniservice/karta/dynamo/nvidia.com_dynamographdeployment_v1alpha1.yaml#L21-L21src/compute-plane-services/nvca/internal/miniservice/karta/dynamo/nvidia.com_dynamographdeployment_v1alpha1.yaml#L52-L78
🤖 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
`@src/compute-plane-services/nvca/internal/miniservice/karta/dynamo/nvidia.com_dynamographdeployment_v1beta1.yaml`
around lines 16 - 26, Add repository-native validation tests for both Dynamo
mappings: in
src/compute-plane-services/nvca/internal/miniservice/karta/dynamo/nvidia.com_dynamographdeployment_v1beta1.yaml:16-26,
cover initializing, running, and failed phases; in :49-75, cover child kinds and
normalized gang group keys; in
src/compute-plane-services/nvca/internal/miniservice/karta/dynamo/nvidia.com_dynamographdeployment_v1alpha1.yaml:21,
cover the initializing mapping; and in :52-78, cover child kinds and gang group
keys. Run the repository-native test runner before committing.
Source: Coding guidelines
| kind: Karta | ||
| apiVersion: run.ai/v1alpha1 | ||
| metadata: | ||
| name: grove-io-podcliqueset-v1alpha1 | ||
| spec: | ||
| structureDefinition: | ||
| rootComponent: | ||
| name: podcliqueset | ||
| kind: | ||
| group: grove.io | ||
| version: v1alpha1 | ||
| kind: PodCliqueSet | ||
| statusDefinition: | ||
| conditionsDefinition: | ||
| path: .status.conditions | ||
| typeFieldName: type | ||
| statusFieldName: status | ||
| messageFieldName: message | ||
| reasonFieldName: reason | ||
| statusMappings: | ||
| initializing: | ||
| - byExpression: | ||
| expression: (.spec.replicas // 0) > 0 and (.status.availableReplicas // 0) < (.spec.replicas // 0) | ||
| expectedResult: "true" | ||
| running: | ||
| - byExpression: | ||
| expression: (.status.availableReplicas // 0) >= (.spec.replicas // 0) | ||
| expectedResult: "true" | ||
| failed: | ||
| - byConditions: | ||
| - type: TopologyLevelsUnavailable | ||
| status: "True" | ||
| childComponents: | ||
| - name: clique | ||
| kind: | ||
| group: grove.io | ||
| version: v1alpha1 | ||
| kind: PodClique | ||
| ownerRef: podcliqueset | ||
| specDefinition: | ||
| fragmentedPodSpecDefinition: | ||
| schedulerNamePath: .spec.template.cliques[].spec.podSpec.schedulerName | ||
| labelsPath: .spec.template.cliques[].labels | ||
| annotationsPath: .spec.template.cliques[].annotations | ||
| resourceClaimsPath: .spec.template.cliques[].spec.podSpec.resourceClaims | ||
| podAffinityPath: .spec.template.cliques[].spec.podSpec.affinity.podAffinity | ||
| nodeAffinityPath: .spec.template.cliques[].spec.podSpec.affinity.nodeAffinity | ||
| containersPath: .spec.template.cliques[].spec.podSpec.containers | ||
| priorityClassNamePath: .spec.template.cliques[].spec.podSpec.priorityClassName | ||
| scaleDefinition: | ||
| replicasPath: (.spec.replicas // 1) * (.spec.template.cliques[].spec.replicas // 1) | ||
| minReplicasPath: .spec.template.cliques[].spec.autoScalingConfig.minReplicas | ||
| maxReplicasPath: .spec.template.cliques[].spec.autoScalingConfig.maxReplicas | ||
| instanceIdPath: .spec.template.cliques[].name | ||
| podSelector: | ||
| componentInstanceSelector: | ||
| idPath: .metadata.labels["grove.io/podclique"] | ||
| replicaSelector: | ||
| keyPath: .metadata.labels["grove.io/podcliqueset-replica-index"] | ||
| - name: scalinggroup | ||
| kind: | ||
| group: grove.io | ||
| version: v1alpha1 | ||
| kind: PodCliqueScalingGroup | ||
| ownerRef: podcliqueset | ||
| scaleDefinition: | ||
| replicasPath: (.spec.replicas // 1) * (.spec.template.podCliqueScalingGroups[].replicas // 1) | ||
| minReplicasPath: .spec.template.podCliqueScalingGroups[].scaleConfig.minReplicas | ||
| maxReplicasPath: .spec.template.podCliqueScalingGroups[].scaleConfig.maxReplicas | ||
| instanceIdPath: .spec.template.podCliqueScalingGroups[].name | ||
| podSelector: | ||
| componentInstanceSelector: | ||
| idPath: .metadata.labels["grove.io/podcliquescalinggroup"] | ||
| replicaSelector: | ||
| keyPath: .metadata.labels["grove.io/podcliquescalinggroup-replica-index"] | ||
| additionalChildKinds: | ||
| - group: grove.io | ||
| version: v1alpha1 | ||
| kind: PodClique | ||
| - group: grove.io | ||
| version: v1alpha1 | ||
| kind: PodCliqueScalingGroup | ||
| - group: scheduler.grove.io | ||
| version: v1alpha1 | ||
| kind: PodGang | ||
| optimizationInstructions: | ||
| gangScheduling: | ||
| podGroups: | ||
| - name: podcliqueset-replica | ||
| members: | ||
| - componentName: clique | ||
| groupByKeyPaths: | ||
| - .metadata.labels["app.kubernetes.io/part-of"] | ||
| - .metadata.labels["grove.io/podcliqueset-replica-index"] | ||
| - componentName: scalinggroup | ||
| groupByKeyPaths: | ||
| - .metadata.labels["app.kubernetes.io/part-of"] | ||
| - .metadata.labels["grove.io/podcliqueset-replica-index"] No newline at end of file |
There was a problem hiding this comment.
🎯 Functional Correctness | 🟡 Minor | ⚡ Quick win
Add mapping coverage or explain why tests are not applicable.
This Karta mapping changes status, resource discovery, scaling, pod selection, and gang scheduling. The PR includes no test change or test exception. Add regression coverage for this mapping. If tests are not applicable, document the reason in the PR.
As per coding guidelines, “Code changes must include tests, or the Pull Request must explain why tests are not applicable.”
🤖 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
`@src/compute-plane-services/nvca/internal/miniservice/karta/grove/grove_io_podcliqueset_v1alpha1.yaml`
around lines 4 - 101, Add regression coverage for the Karta mapping defined by
the root component and child components clique and scalinggroup, validating
status mappings, resource discovery, scaling paths, pod selectors, and
gangScheduling configuration; if this repository has no applicable test
mechanism for YAML mappings, document that justification in the PR instead.
Source: Coding guidelines
| scaleDefinition: | ||
| replicasPath: .spec.minMember // ((.spec.subGroups // []) | map(.minMember // 0) | add // 0) |
There was a problem hiding this comment.
🎯 Functional Correctness | 🟠 Major | 🏗️ Heavy lift
🧩 Analysis chain
🏁 Script executed:
#!/bin/bash
set -euo pipefail
# Locate Karta test infrastructure and related mappings.
fd -HI '^(AGENTS\.md|go\.mod|Makefile)$' . | sort
rg -n -C 4 \
--glob '*_test.go' \
--glob '*.yaml' \
'minSubGroup|subGroups|replicasPath|PodGroup|Karta' \
src/compute-plane-services/nvcaRepository: NVIDIA/nvcf
Length of output: 50367
🏁 Script executed:
#!/bin/bash
set -euo pipefail
echo '--- subtree guidance ---'
cat src/compute-plane-services/nvca/AGENTS.md
echo '--- reviewed definition ---'
cat -n src/compute-plane-services/nvca/internal/miniservice/karta/kai-scheduler/scheduling-run-ai-podgroup-v2alpha2.yaml
echo '--- scale-definition symbols and tests ---'
rg -n -C 5 \
'ReplicasPath|replicasPath|ScaleDefinition|scaleDefinition|gojq|RunString|Query' \
src/compute-plane-services/nvca/internal/miniservice \
src/compute-plane-services/nvca/pkg \
--glob '*.go' --glob '*.yaml' \
| head -n 1000
echo '--- minSubGroup definitions and references ---'
rg -n -C 5 'minSubGroup|MinSubGroup|subGroups|SubGroups' \
src/compute-plane-services/nvca/vendor \
src/compute-plane-services/nvca \
--glob '*.go' --glob '*.yaml' --glob '*.md' \
| head -n 1000
echo '--- focused test files ---'
git ls-files 'src/compute-plane-services/nvca/**/*_test.go' | sort | \
while IFS= read -r f; do
if rg -q 'scaleDefinition|replicasPath|Karta' "$f"; then
echo "$f"
fi
doneRepository: NVIDIA/nvcf
Length of output: 50369
🏁 Script executed:
#!/bin/bash
set -euo pipefail
echo '--- Karta implementation files ---'
git ls-files 'src/compute-plane-services/nvca/internal/miniservice/karta/**' \
'src/compute-plane-services/nvca/internal/miniservice/*karta*' \
| sort
echo '--- evaluator references ---'
rg -n -C 8 \
'ReplicasPath|Replicas|replicasPath|ScaleDefinition|scale definition|gojq|go-jq|RunString|Parse' \
src/compute-plane-services/nvca/internal/miniservice/karta \
src/compute-plane-services/nvca/internal/miniservice/status_karta.go \
src/compute-plane-services/nvca/internal/miniservice/status_karta_test.go \
--glob '*.go' --glob '*.yaml' \
| head -n 1600
echo '--- KAI dependency/type files ---'
rg -n -C 5 \
'kai-scheduler|github.com/.*/kai|scheduling.run.ai|PodGroupSpec|minSubGroup|MinSubGroup' \
src/compute-plane-services/nvca/go.mod \
src/compute-plane-services/nvca/vendor/modules.txt \
src/compute-plane-services/nvca/vendor \
--glob '*.go' --glob '*.mod' --glob '*.txt' \
| head -n 1600
echo '--- available expression tools ---'
command -v gojq || true
command -v jq || true
command -v go || trueRepository: NVIDIA/nvcf
Length of output: 22362
🌐 Web query:
KAI Scheduler v2alpha2 PodGroup minSubGroup minMember subGroups API documentation
💡 Result:
In the KAI Scheduler v2alpha2 API, PodGroup introduces a hierarchical structure for gang scheduling that uses minMember and minSubGroup to define scheduling thresholds [1][2]. These two fields are functionally distinct and mutually exclusive in their usage within a specific PodGroup or SubGroup scope [2]. minMember This field specifies the minimum number of individual pods that must be scheduled for a PodGroup or a leaf SubGroup [3][1]. It is the standard parameter for flat PodGroups where pod-level gang scheduling is required [3][2]. minSubGroup This field specifies the minimum number of direct child SubGroups that must be successfully scheduled for a hierarchical PodGroup or a mid-level SubGroup [3][1]. It enables elastic gang scheduling at the subgroup level, where a workload can be activated once a subset of its children (rather than all of them) meets their respective scheduling requirements [3][1]. Key Characteristics - Hierarchical Scheduling: When using SubGroups, the hierarchy consists of mid-level SubGroups and leaf SubGroups [1][2]. Leaf SubGroups typically use minMember to control pod counts, while mid-level SubGroups use minSubGroup to control child group counts [1][2]. - Elasticity: KAI Scheduler supports elasticity at both the pod and subgroup levels [3][4]. If a workload is configured with minSubGroup, the scheduler will activate the workload once the specified threshold of children is met, treating the remaining children as elastic capacity that can be scheduled later [3]. - Mutual Exclusivity: Users must choose either minMember or minSubGroup for a given component; they cannot be used simultaneously on the same level [2]. Providing both can result in validation errors from the admission webhook [5]. - Best Practices: For complex hierarchical workloads (e.g., JobSets), the scheduler is designed to automatically manage these thresholds, often setting minSubGroup based on the total number of child groups or via configuration overrides [4][2]. Top Results: [3][1][2]
Citations:
- 1: https://github.com/NVIDIA/KAI-Scheduler/blob/main/docs/topology/multilevel.md
- 2: https://github.com/NVIDIA/KAI-Scheduler/blob/main/docs/developer/pod-grouper.md
- 3: https://github.com/kai-scheduler/KAI-Scheduler/blob/main/docs/elastic/README.md
- 4: https://github.com/kai-scheduler/KAI-Scheduler/blob/main/CHANGELOG.md
- 5: podgrouper: webhook rejects PodGroups with parent SubGroups carrying minMember=0 (breaks Grove topologyConstraintGroupConfigs) kai-scheduler/KAI-Scheduler#1639
🏁 Script executed:
#!/bin/bash
set -euo pipefail
expr='.spec.minMember // ((.spec.subGroups // []) | map(.minMember // 0) | add // 0)'
python3 - "$expr" <<'PY'
import json
import subprocess
import sys
expr = sys.argv[1]
cases = {
"flat minMember": {"spec": {"minMember": 3}},
"hierarchical all subgroups": {
"spec": {"subGroups": [{"minMember": 2}, {"minMember": 4}]}
},
"hierarchical minSubGroup one": {
"spec": {
"minSubGroup": 1,
"subGroups": [{"minMember": 2}, {"minMember": 4}],
}
},
"hierarchical minSubGroup two": {
"spec": {
"minSubGroup": 2,
"subGroups": [{"minMember": 2}, {"minMember": 4}],
}
},
"missing scale fields": {"spec": {}},
}
for name, obj in cases.items():
result = subprocess.run(
["jq", "-cn", "--arg", "expr", expr, "--argjson", "obj", json.dumps(obj),
"$obj | (" + expr + ")"],
text=True,
capture_output=True,
check=False,
)
print(name + ": " + result.stdout.strip() if result.returncode == 0
else name + ": ERROR " + result.stderr.strip())
PY
echo '--- vendored KAI v2alpha2 paths ---'
find src/compute-plane-services/nvca/vendor/github.com/NVIDIA/KAI-scheduler \
-type f \( -path '*v2alpha2*' -o -name '*podgroup*' -o -name '*types.go' \) \
-print | sort | head -n 300
echo '--- vendored KAI fields ---'
rg -n -C 8 'minSubGroup|minMember|SubGroup|PodGroupSpec' \
src/compute-plane-services/nvca/vendor/github.com/NVIDIA/KAI-scheduler \
--glob '*.go' --glob '*.yaml' --glob '*.json' --glob '*.md' \
| head -n 1600
echo '--- direct replicas-path test coverage ---'
rg -n -C 4 'replicasPath|replicas path|scaleDefinition|ScaleDefinition|subGroups|minSubGroup' \
src/compute-plane-services/nvca/internal/miniservice \
--glob '*_test.go' \
--glob '*.go' \
| head -n 1200Repository: NVIDIA/nvcf
Length of output: 458
🏁 Script executed:
#!/bin/bash
set -euo pipefail
expr='.spec.minMember // ((.spec.subGroups // []) | map(.minMember // 0) | add // 0)'
python3 - "$expr" <<'PY'
import json
import subprocess
import sys
expr = sys.argv[1]
cases = {
"flat minMember": {"spec": {"minMember": 3}},
"hierarchical all subgroups": {
"spec": {"subGroups": [{"minMember": 2}, {"minMember": 4}]}
},
"hierarchical minSubGroup one": {
"spec": {
"minSubGroup": 1,
"subGroups": [{"minMember": 2}, {"minMember": 4}],
}
},
"hierarchical minSubGroup two": {
"spec": {
"minSubGroup": 2,
"subGroups": [{"minMember": 2}, {"minMember": 4}],
}
},
"missing scale fields": {"spec": {}},
}
for name, obj in cases.items():
result = subprocess.run(
["jq", "-cn", "--argjson", "obj", json.dumps(obj),
"$obj | (" + expr + ")"],
text=True,
capture_output=True,
check=False,
)
print(name + ": " + result.stdout.strip() if result.returncode == 0
else name + ": ERROR " + result.stderr.strip())
PY
echo '--- vendored KAI v2alpha2 paths ---'
find src/compute-plane-services/nvca/vendor/github.com/NVIDIA/KAI-scheduler \
-type f \( -path '*v2alpha2*' -o -name '*podgroup*' -o -name '*types.go' \) \
-print | sort | head -n 300
echo '--- vendored KAI fields ---'
rg -n -C 8 'minSubGroup|minMember|SubGroup|PodGroupSpec' \
src/compute-plane-services/nvca/vendor/github.com/NVIDIA/KAI-scheduler \
--glob '*.go' --glob '*.yaml' --glob '*.json' --glob '*.md' \
| head -n 1600
echo '--- direct replicas-path test coverage ---'
rg -n -C 4 'replicasPath|replicas path|scaleDefinition|ScaleDefinition|subGroups|minSubGroup' \
src/compute-plane-services/nvca/internal/miniservice \
--glob '*_test.go' \
--glob '*.go' \
| head -n 1200Repository: NVIDIA/nvcf
Length of output: 458
🏁 Script executed:
#!/bin/bash
set -euo pipefail
echo '--- Karta scale types and documentation ---'
rg -n -l \
'type .*Scale|ScaleDefinition|replicasPath|ReplicaCount|replica count|scale definition' \
src/compute-plane-services/nvca \
--glob '*.go' --glob '*.yaml' --glob '*.md' \
| head -n 300
echo '--- Karta dependency metadata ---'
rg -n -C 4 \
'karta|Karta|run.ai' \
src/compute-plane-services/nvca/go.mod \
src/compute-plane-services/nvca/vendor/modules.txt \
| head -n 500
echo '--- scale consumers ---'
rg -n -C 8 \
'ReplicasPath|replicasPath|ScaleDefinition|DesiredReplicas|Desired.*Replica|replica.*scale|scale.*replica' \
src/compute-plane-services/nvca \
--glob '*.go' \
| head -n 1600Repository: NVIDIA/nvcf
Length of output: 50368
🏁 Script executed:
#!/bin/bash
set -euo pipefail
for f in \
src/compute-plane-services/nvca/vendor/github.com/run-ai/karta/pkg/api/runai/v1alpha1/structure.go \
src/compute-plane-services/nvca/vendor/github.com/run-ai/karta/pkg/resource/accessor.go \
src/compute-plane-services/nvca/vendor/github.com/run-ai/karta/pkg/resource/component.go \
src/compute-plane-services/nvca/vendor/github.com/run-ai/karta/pkg/jq/execution/execution.go
do
if [ -f "$f" ]; then
echo "--- $f ($(wc -l < "$f") lines) ---"
cat -n "$f"
fi
doneRepository: NVIDIA/nvcf
Length of output: 50367
Correct the replicasPath mapping for hierarchical PodGroups.
ReplicasPath represents the current replica count, but minMember and minSubGroup are scheduling thresholds. The expression returns 6 for minSubGroup: 1 with subgroup minima 2 and 4, although only one subgroup is required. Use a mapping that matches Karta’s scale contract, or omit scale reporting for unsupported hierarchical mode. Add regression coverage for both modes, or explain why tests are not applicable in the PR.
🤖 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
`@src/compute-plane-services/nvca/internal/miniservice/karta/kai-scheduler/scheduling-run-ai-podgroup-v2alpha2.yaml`
around lines 16 - 17, The scaleDefinition replicasPath mapping is incorrect for
hierarchical PodGroups because it reports scheduling thresholds as the current
replica count. Update the hierarchical PodGroup configuration to use a
Karta-compatible replica-count mapping, or remove scale reporting for this
unsupported mode; preserve the existing flat PodGroup behavior and add
regression coverage for both modes, or document why tests are not applicable.
Source: Coding guidelines
TL;DR
Add new Dynamo DGD version, Grove
PodCliqueSet, and KAI SchedulerPodGroupKarta types to miniservice controller as follow-up to #603Additional Details (optional for docs, build, test, refactor, ci, chore, style, and revert PRs)
For the Reviewer
For QA (optional for docs, build, test, refactor, ci, chore, style, and revert PRs)
Issues
Relates to #598
Checklist
Summary by CodeRabbit