-
Notifications
You must be signed in to change notification settings - Fork 49
fix(nvsnap): warn when L2 fan-out is disabled at install time #733
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Changes from all commits
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
| Original file line number | Diff line number | Diff line change |
|---|---|---|
|
|
@@ -227,6 +227,32 @@ else | |
| info "skipping cert-manager + webhook (--without-webhook)" | ||
| fi | ||
|
|
||
| # L2 per-capture PVC fan-out is off unless agent.l2.storageClass names an | ||
| # RWX-capable class. Left empty the install still succeeds, but restore | ||
| # fan-out silently degrades to the L3 peer cascade — a large throughput | ||
| # difference that only shows up under multi-node fan-out, long after the | ||
| # installer has printed a clean banner. Say so at install time. | ||
| # | ||
| # Reported, not auto-selected: picking the wrong class yields PVCs that | ||
| # never bind, and the right choice depends on cluster topology. RWX | ||
| # capability isn't exposed on the StorageClass API, so candidates are | ||
| # matched on known RWX provisioners. | ||
| if ! printf '%s\n' "${EXTRA_HELM_ARGS[@]}" | grep -q "agent.l2.storageClass="; then | ||
| rwx_re='smb\.csi|nfs\.csi|efs\.csi|filestore\.csi|azurefile|excelero|nvmesh|cephfs' | ||
|
Comment on lines
+230
to
+241
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. 🗄️ Data Integrity & Integration | 🟠 Major | ⚡ Quick win Use the L2 access-mode contract instead of an RWX-only test. The supplied manifest defines Detect L2-compatible provisioners and update the warning text to match the actual access modes. This follows the storage-class contract in Also applies to: 244-252 🤖 Prompt for AI Agents |
||
| candidates=$(kubectl get storageclass -o jsonpath='{range .items[*]}{.metadata.name}{" ("}{.provisioner}{")"}{"\n"}{end}' 2>/dev/null \ | ||
| | grep -iE "$rwx_re" || true) | ||
|
Comment on lines
+242
to
+243
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. 🗄️ Data Integrity & Integration | 🟠 Major | ⚡ Quick win Filter only the provisioner field. The JSONPath emits 🤖 Prompt for AI Agents |
||
| echo " WARNING: agent.l2.storageClass is unset — L2 per-capture PVC fan-out is DISABLED." >&2 | ||
| echo " Restore falls back to the L3 peer cascade (slower multi-node fan-out)." >&2 | ||
| if [ -n "$candidates" ]; then | ||
| echo " RWX-capable StorageClasses on this cluster:" >&2 | ||
| echo "$candidates" | sed 's/^/ /' >&2 | ||
| echo " Enable with: --set agent.l2.storageClass=<name>" >&2 | ||
| else | ||
| echo " No RWX-capable StorageClass detected; L2 needs one provisioned first." >&2 | ||
| echo " Reference: deploy/k8s/nvcf-cluster-prep/storage-classes.yaml" >&2 | ||
|
Comment on lines
+242
to
+252
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. 🎯 Functional Correctness | 🟡 Minor | ⚡ Quick win Report query failures separately from an empty result.
🤖 Prompt for AI Agents |
||
| fi | ||
| fi | ||
|
|
||
| # ─── 6. Helm install ─────────────────────────────────────────────────── | ||
|
|
||
| step "[6/7] helm install / upgrade nvsnap" | ||
|
|
||
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
🎯 Functional Correctness | 🟡 Minor | ⚡ Quick win
Require an exact, non-empty
agent.l2.storageClassvalue.The guard checks only for the substring
agent.l2.storageClass=. An empty value suppresses the warning, and unescaped.characters can match unrelated keys. Parse the Helm arguments or use an escaped, anchored match that requires a non-empty value.🤖 Prompt for AI Agents