[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill-cockroachdb-debugging-cockroachdb-operator-migrations":3,"mdc--e5p899-key":36,"related-org-cockroachdb-debugging-cockroachdb-operator-migrations":2506,"related-repo-cockroachdb-debugging-cockroachdb-operator-migrations":2658},{"slug":4,"name":4,"fn":5,"description":6,"org":7,"tags":11,"stars":25,"repoUrl":26,"updatedAt":27,"license":28,"forks":29,"topics":30,"repo":31,"sourceUrl":34,"mdContent":35},"debugging-cockroachdb-operator-migrations","debug CockroachDB Operator migration scenarios","Debugs CockroachDB Operator migration scenarios, including Helm StatefulSet to v1beta1 CrdbNode migration and public operator v1alpha1 to v1beta1 migration. Use when migration labels, migration phases, source StatefulSet ownership, converted CRDs, PVC ownership, or post-migration reconciliation are unclear or stuck.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},"cockroachdb","CockroachDB","https:\u002F\u002Fpexgzepcugksgbtrxkhf.supabase.co\u002Fstorage\u002Fv1\u002Fobject\u002Fpublic\u002Forg-logos\u002Fcockroachdb.png",[12,16,19,22],{"name":13,"slug":14,"type":15},"Database","database","tag",{"name":17,"slug":18,"type":15},"Migration","migration",{"name":20,"slug":21,"type":15},"Kubernetes","kubernetes",{"name":23,"slug":24,"type":15},"Debugging","debugging",105,"https:\u002F\u002Fgithub.com\u002Fcockroachdb\u002Fhelm-charts","2026-07-12T07:56:48.360871",null,153,[],{"repoUrl":26,"stars":25,"forks":29,"topics":32,"description":33},[],"Helm charts for cockroachdb","https:\u002F\u002Fgithub.com\u002Fcockroachdb\u002Fhelm-charts\u002Ftree\u002FHEAD\u002Fskills\u002Fcockroachdb-onboarding-and-migrations\u002Fdebugging-cockroachdb-operator-migrations","---\nname: debugging-cockroachdb-operator-migrations\ndescription: Debugs CockroachDB Operator migration scenarios, including Helm StatefulSet to v1beta1 CrdbNode migration and public operator v1alpha1 to v1beta1 migration. Use when migration labels, migration phases, source StatefulSet ownership, converted CRDs, PVC ownership, or post-migration reconciliation are unclear or stuck.\ncompatibility: CockroachDB Helm v2 charts and CockroachDB Operator resources, including crdb.cockroachlabs.com\u002Fv1alpha1 and v1beta1. Requires read access to the CockroachDB namespace and operator namespace; final source StatefulSet deletion must be explicitly approved by the customer.\nmetadata:\n  author: cockroachdb\n  version: \"1.0\"\n---\n\n# Debugging CockroachDB Operator Migrations\n\nDebugs migration from Helm StatefulSet or public operator v1alpha1 workloads to CockroachDB Operator v1beta1 `CrdbNode` management. Use this after collecting the general baseline from [diagnosing-cockroachdb-helm-deployments](..\u002F..\u002Fcockroachdb-observability-and-diagnostics\u002Fdiagnosing-cockroachdb-helm-deployments\u002FSKILL.md).\n\n## When to Use This Skill\n\n- A Helm StatefulSet to operator migration is stuck or unclear\n- A public operator v1alpha1 to v1beta1 migration has conversion or webhook issues\n- Migration labels remain `start` or `finalized`\n- `status.migration.phase` or `status.migration.message` reports an error\n- Source StatefulSet ownership, pod ownerReferences, or PVC ownerReferences are unclear\n- The operator stops reconciling after migration\n\n## Safety Considerations\n\n- Do not delete the source StatefulSet until the migration phase is `finalized` and the customer is ready to complete migration.\n- Do not modify the source StatefulSet spec during migration.\n- Do not remove the migration label `crdb.io\u002Fmigrate` during an active migration.\n- Do not manually create `CrdbNode` resources during migration.\n- Do not delete migrated PVCs. They contain CockroachDB data.\n- If the operator stalls after migration, collect the escalation packet before restarting it.\n\n## Execution Discipline\n\n- Execute one step at a time and inspect the output before moving on. Migration phase, source workload state, and ownership determine which later checks are safe.\n- Do not delete the source StatefulSet, patch labels, patch mode, restart the operator, run Helm upgrades, or change ownerReferences unless the user explicitly approves the action for the target cluster.\n- Do not run interactive `kubectl exec` shells or debug containers unless the user approves them and the customer policy allows the image\u002Fsource.\n- In production or when the migration phase is ambiguous, involve TSE or the operator team before changing source or target resources.\n\n## Required Inputs\n\n- Migration type: Helm StatefulSet to operator, or public operator v1alpha1 to v1beta1\n- Source resource name and namespace\n- Target `CrdbCluster` name and namespace\n- Operator namespace and version\n- Values file or migration command used\n- Current migration label and phase\n- Whether the source StatefulSet has already been deleted\n\n## Step 1: Confirm Migration Documentation and Versions\n\n```bash\nkubectl -n \u003Coperator-namespace> get deploy cockroach-operator -o jsonpath='{.spec.template.spec.containers[0].image}{\"\\n\"}'\nkubectl get crd crdbclusters.crdb.cockroachlabs.com -o jsonpath='{.spec.versions[*].name}{\"\\n\"}'\nhelm -n \u003Ccockroachdb-namespace> history \u003Ccockroachdb-release> || true\n```\n\nCheck the local migration guide and chart changelog for version-specific migration fixes:\n\n- [v1alpha1 to v1beta1 Migration Guide](..\u002F..\u002F..\u002Fcockroachdb-parent\u002FMIGRATION_v1alpha1_to_v1beta1.md)\n- [CockroachDB Helm Chart Changelog](..\u002F..\u002F..\u002FCHANGELOG.md)\n\n## Step 2: Inspect Migration State\n\n```bash\nkubectl -n \u003Ccockroachdb-namespace> get crdbcluster \u003Ccockroachdb-release> -o json | jq '{\n  mode: .spec.mode,\n  migrateLabel: .metadata.labels[\"crdb.io\u002Fmigrate\"],\n  migrationStatus: .metadata.labels[\"crdb.cockroachlabs.com\u002Fmigration\"],\n  migrationPhase: .status.migration.phase,\n  migrationMessage: .status.migration.message,\n  initialized: [.status.conditions[]? | select(.type==\"Initialized\" or .type==\"ClusterInitialized\")],\n  generation: .metadata.generation,\n  observedGeneration: .status.observedGeneration\n}'\n\nkubectl -n \u003Coperator-namespace> logs -l app=cockroach-operator --tail=300 | grep -Ei 'migrationctrl|migration|phase|cert' || true\nkubectl -n \u003Ccockroachdb-namespace> get crdbnodes -o wide\nkubectl -n \u003Ccockroachdb-namespace> get crdbnodes -o yaml\n```\n\n## Step 3: Inspect Source Workload\n\nFor Helm StatefulSet migration:\n\n```bash\nkubectl -n \u003Ccockroachdb-namespace> get sts \u003Csource-statefulset> -o json | jq '{\n  replicas: .spec.replicas,\n  readyReplicas: .status.readyReplicas,\n  migrateLabel: .metadata.labels[\"crdb.io\u002Fmigrate\"],\n  ownerReferences: .metadata.ownerReferences\n}'\n\nkubectl -n \u003Ccockroachdb-namespace> get sts \u003Csource-statefulset> -o yaml\nkubectl -n \u003Ccockroachdb-namespace> get pods -l app.kubernetes.io\u002Fname=cockroachdb -o yaml | grep -E 'name:|ownerReferences:|kind:|uid:|controller:' -A8\nkubectl -n \u003Ccockroachdb-namespace> get pvc -o yaml | grep -E 'name:|ownerReferences:|kind:|uid:|controller:' -A8\n```\n\nFor public operator v1alpha1 migration:\n\n```bash\nkubectl -n \u003Ccockroachdb-namespace> get crdbcluster.crdb.cockroachlabs.com \u003Ccluster-name> -o yaml\nkubectl -n \u003Ccockroachdb-namespace> get crdbcluster.v1beta1.crdb.cockroachlabs.com \u003Ccluster-name> -o yaml 2>&1 || true\nkubectl -n \u003Coperator-namespace> get svc cockroach-webhook-service\nkubectl -n \u003Coperator-namespace> get endpoints cockroach-webhook-service\nkubectl get validatingwebhookconfigurations | grep cockroach\n```\n\nThe operator supports both v1alpha1 and v1beta1 through conversion webhooks. If conversion fails, check webhook service health and operator logs.\n\n## Step 4: Interpret Migration Phases\n\n| Phase | What Happens | What to Check |\n|---|---|---|\n| Init | Operator validates prerequisites and prepares migration | Migration label is `start`; check operator logs for validation errors |\n| CertMigration | Operator migrates or creates TLS certificate resources | Check certificate Secrets, CA resources, cert-manager resources, and cert metadata |\n| PodMigration | Operator creates `CrdbNode` resources to take over pods from the StatefulSet | Check `CrdbNode` creation and pod ownerReferences |\n| Finalization | Operator sets `mode=MutableOnly` and stops source migration work | `CrdbCluster` mode should be `MutableOnly`; migration label should be `finalized` |\n| Complete | Customer deletes the source StatefulSet and the delete event triggers final reconcile | StatefulSet must be manually deleted only after finalization; migration label should become `complete` |\n\n## Step 5: Debug Common Migration Stalls\n\n### Migration Not Progressing\n\n```bash\nkubectl -n \u003Ccockroachdb-namespace> get crdbcluster \u003Ccockroachdb-release> -o jsonpath='{.status.migration}{\"\\n\"}'\nkubectl -n \u003Coperator-namespace> logs -l app=cockroach-operator --tail=300 | grep -Ei 'migration|phase|cert|error' || true\nkubectl -n \u003Coperator-namespace> get deploy cockroach-operator -o jsonpath='{.spec.template.spec.containers[0].args}{\"\\n\"}'\n```\n\nCheck:\n\n- The migration feature is enabled in operator args, if the deployed version uses a feature flag.\n- The source StatefulSet still exists when phase is before `finalized`.\n- The source StatefulSet spec has not been changed mid-migration.\n- Certificate prerequisites are present and trusted.\n- `CrdbNode` objects are being created and observed.\n\n### CertMigration Issues\n\nUse [configuring-cockroachdb-helm-tls](..\u002F..\u002Fcockroachdb-operations-and-lifecycle\u002Fconfiguring-cockroachdb-helm-tls\u002FSKILL.md). Confirm:\n\n- CA ConfigMap or Secret exists.\n- Node, HTTP, and root client certificate resources exist.\n- Certificate expiry, issuer, subject, and SANs match generated pod DNS names.\n- Cert-manager `Certificate` resources are Ready, when cert-manager is used.\n- Secret keys are present without printing private key values.\n\n### PodMigration Issues\n\n```bash\nkubectl -n \u003Ccockroachdb-namespace> get pods -l app.kubernetes.io\u002Fname=cockroachdb -o wide\nkubectl -n \u003Ccockroachdb-namespace> describe pods -l app.kubernetes.io\u002Fname=cockroachdb\nkubectl -n \u003Ccockroachdb-namespace> get crdbnodes -o custom-columns=NAME:.metadata.name,PHASE:.status.phase,NODE_ID:.status.nodeID,OBSERVED:.status.observedGeneration\nkubectl -n \u003Ccockroachdb-namespace> get pvc -o json | jq '.items[] | {name: .metadata.name, ownerReferences: .metadata.ownerReferences, storageClass: .spec.storageClassName, capacity: .status.capacity}'\n```\n\nCheck:\n\n- `CrdbNode` resources are created for expected pods.\n- Pods and PVCs have expected ownership after the operator takes over.\n- PVCs are not orphaned before deleting source resources.\n\n### Finalization or Completion Stuck\n\nCheck:\n\n- `mode` is `MutableOnly`, not `Disabled`.\n- migration label is `finalized` before deleting the source StatefulSet.\n- source StatefulSet deletion happened only after finalization.\n- migration label eventually becomes `complete`.\n- operator logs show a final reconcile after the source StatefulSet delete event.\n\n## Step 6: Post-Migration Operator Stall\n\nIf the operator stops reconciling after migration completes:\n\n1. Check the initialization condition. If missing on an already-initialized cluster, the operator may try to initialize and block.\n2. Verify `mode` is `MutableOnly`.\n3. Verify the migration label is `complete`, not `start` or `finalized`.\n4. Use [collecting-cockroachdb-operator-escalation-packet](..\u002F..\u002Fcockroachdb-observability-and-diagnostics\u002Fcollecting-cockroachdb-operator-escalation-packet\u002FSKILL.md) to collect pprof goroutine dump, metrics, and logs before restart.\n\n## Output Format\n\nReturn findings in this order:\n\n1. Migration type and current phase\n2. Source workload state\n3. Target `CrdbCluster` mode, migration labels, and migration message\n4. `CrdbNode`, pod, and PVC ownership state\n5. Current blocker and likely cause\n6. Safe next action\n7. Whether escalation packet collection is required\n\n## References\n\n- [diagnosing-cockroachdb-helm-deployments](..\u002F..\u002Fcockroachdb-observability-and-diagnostics\u002Fdiagnosing-cockroachdb-helm-deployments\u002FSKILL.md)\n- [collecting-cockroachdb-operator-escalation-packet](..\u002F..\u002Fcockroachdb-observability-and-diagnostics\u002Fcollecting-cockroachdb-operator-escalation-packet\u002FSKILL.md)\n- [v1alpha1 to v1beta1 Migration Guide](..\u002F..\u002F..\u002Fcockroachdb-parent\u002FMIGRATION_v1alpha1_to_v1beta1.md)\n- [CockroachDB Helm Chart Changelog](..\u002F..\u002F..\u002FCHANGELOG.md)\n",{"data":37,"body":41},{"name":4,"description":6,"compatibility":38,"metadata":39},"CockroachDB Helm v2 charts and CockroachDB Operator resources, including crdb.cockroachlabs.com\u002Fv1alpha1 and v1beta1. Requires read access to the CockroachDB namespace and operator namespace; final source StatefulSet deletion must be explicitly approved by the customer.",{"author":8,"version":40},"1.0",{"type":42,"children":43},"root",[44,52,76,83,145,151,206,212,243,249,295,301,498,503,524,530,885,891,896,1246,1251,1502,1507,1513,1689,1695,1702,1917,1922,1961,1967,1980,2016,2022,2233,2237,2260,2266,2270,2331,2337,2342,2403,2409,2414,2463,2469,2500],{"type":45,"tag":46,"props":47,"children":48},"element","h1",{"id":4},[49],{"type":50,"value":51},"text","Debugging CockroachDB Operator Migrations",{"type":45,"tag":53,"props":54,"children":55},"p",{},[56,58,65,67,74],{"type":50,"value":57},"Debugs migration from Helm StatefulSet or public operator v1alpha1 workloads to CockroachDB Operator v1beta1 ",{"type":45,"tag":59,"props":60,"children":62},"code",{"className":61},[],[63],{"type":50,"value":64},"CrdbNode",{"type":50,"value":66}," management. Use this after collecting the general baseline from ",{"type":45,"tag":68,"props":69,"children":71},"a",{"href":70},"..\u002F..\u002Fcockroachdb-observability-and-diagnostics\u002Fdiagnosing-cockroachdb-helm-deployments\u002FSKILL.md",[72],{"type":50,"value":73},"diagnosing-cockroachdb-helm-deployments",{"type":50,"value":75},".",{"type":45,"tag":77,"props":78,"children":80},"h2",{"id":79},"when-to-use-this-skill",[81],{"type":50,"value":82},"When to Use This Skill",{"type":45,"tag":84,"props":85,"children":86},"ul",{},[87,93,98,117,135,140],{"type":45,"tag":88,"props":89,"children":90},"li",{},[91],{"type":50,"value":92},"A Helm StatefulSet to operator migration is stuck or unclear",{"type":45,"tag":88,"props":94,"children":95},{},[96],{"type":50,"value":97},"A public operator v1alpha1 to v1beta1 migration has conversion or webhook issues",{"type":45,"tag":88,"props":99,"children":100},{},[101,103,109,111],{"type":50,"value":102},"Migration labels remain ",{"type":45,"tag":59,"props":104,"children":106},{"className":105},[],[107],{"type":50,"value":108},"start",{"type":50,"value":110}," or ",{"type":45,"tag":59,"props":112,"children":114},{"className":113},[],[115],{"type":50,"value":116},"finalized",{"type":45,"tag":88,"props":118,"children":119},{},[120,126,127,133],{"type":45,"tag":59,"props":121,"children":123},{"className":122},[],[124],{"type":50,"value":125},"status.migration.phase",{"type":50,"value":110},{"type":45,"tag":59,"props":128,"children":130},{"className":129},[],[131],{"type":50,"value":132},"status.migration.message",{"type":50,"value":134}," reports an error",{"type":45,"tag":88,"props":136,"children":137},{},[138],{"type":50,"value":139},"Source StatefulSet ownership, pod ownerReferences, or PVC ownerReferences are unclear",{"type":45,"tag":88,"props":141,"children":142},{},[143],{"type":50,"value":144},"The operator stops reconciling after migration",{"type":45,"tag":77,"props":146,"children":148},{"id":147},"safety-considerations",[149],{"type":50,"value":150},"Safety Considerations",{"type":45,"tag":84,"props":152,"children":153},{},[154,166,171,184,196,201],{"type":45,"tag":88,"props":155,"children":156},{},[157,159,164],{"type":50,"value":158},"Do not delete the source StatefulSet until the migration phase is ",{"type":45,"tag":59,"props":160,"children":162},{"className":161},[],[163],{"type":50,"value":116},{"type":50,"value":165}," and the customer is ready to complete migration.",{"type":45,"tag":88,"props":167,"children":168},{},[169],{"type":50,"value":170},"Do not modify the source StatefulSet spec during migration.",{"type":45,"tag":88,"props":172,"children":173},{},[174,176,182],{"type":50,"value":175},"Do not remove the migration label ",{"type":45,"tag":59,"props":177,"children":179},{"className":178},[],[180],{"type":50,"value":181},"crdb.io\u002Fmigrate",{"type":50,"value":183}," during an active migration.",{"type":45,"tag":88,"props":185,"children":186},{},[187,189,194],{"type":50,"value":188},"Do not manually create ",{"type":45,"tag":59,"props":190,"children":192},{"className":191},[],[193],{"type":50,"value":64},{"type":50,"value":195}," resources during migration.",{"type":45,"tag":88,"props":197,"children":198},{},[199],{"type":50,"value":200},"Do not delete migrated PVCs. They contain CockroachDB data.",{"type":45,"tag":88,"props":202,"children":203},{},[204],{"type":50,"value":205},"If the operator stalls after migration, collect the escalation packet before restarting it.",{"type":45,"tag":77,"props":207,"children":209},{"id":208},"execution-discipline",[210],{"type":50,"value":211},"Execution Discipline",{"type":45,"tag":84,"props":213,"children":214},{},[215,220,225,238],{"type":45,"tag":88,"props":216,"children":217},{},[218],{"type":50,"value":219},"Execute one step at a time and inspect the output before moving on. Migration phase, source workload state, and ownership determine which later checks are safe.",{"type":45,"tag":88,"props":221,"children":222},{},[223],{"type":50,"value":224},"Do not delete the source StatefulSet, patch labels, patch mode, restart the operator, run Helm upgrades, or change ownerReferences unless the user explicitly approves the action for the target cluster.",{"type":45,"tag":88,"props":226,"children":227},{},[228,230,236],{"type":50,"value":229},"Do not run interactive ",{"type":45,"tag":59,"props":231,"children":233},{"className":232},[],[234],{"type":50,"value":235},"kubectl exec",{"type":50,"value":237}," shells or debug containers unless the user approves them and the customer policy allows the image\u002Fsource.",{"type":45,"tag":88,"props":239,"children":240},{},[241],{"type":50,"value":242},"In production or when the migration phase is ambiguous, involve TSE or the operator team before changing source or target resources.",{"type":45,"tag":77,"props":244,"children":246},{"id":245},"required-inputs",[247],{"type":50,"value":248},"Required Inputs",{"type":45,"tag":84,"props":250,"children":251},{},[252,257,262,275,280,285,290],{"type":45,"tag":88,"props":253,"children":254},{},[255],{"type":50,"value":256},"Migration type: Helm StatefulSet to operator, or public operator v1alpha1 to v1beta1",{"type":45,"tag":88,"props":258,"children":259},{},[260],{"type":50,"value":261},"Source resource name and namespace",{"type":45,"tag":88,"props":263,"children":264},{},[265,267,273],{"type":50,"value":266},"Target ",{"type":45,"tag":59,"props":268,"children":270},{"className":269},[],[271],{"type":50,"value":272},"CrdbCluster",{"type":50,"value":274}," name and namespace",{"type":45,"tag":88,"props":276,"children":277},{},[278],{"type":50,"value":279},"Operator namespace and version",{"type":45,"tag":88,"props":281,"children":282},{},[283],{"type":50,"value":284},"Values file or migration command used",{"type":45,"tag":88,"props":286,"children":287},{},[288],{"type":50,"value":289},"Current migration label and phase",{"type":45,"tag":88,"props":291,"children":292},{},[293],{"type":50,"value":294},"Whether the source StatefulSet has already been deleted",{"type":45,"tag":77,"props":296,"children":298},{"id":297},"step-1-confirm-migration-documentation-and-versions",[299],{"type":50,"value":300},"Step 1: Confirm Migration Documentation and Versions",{"type":45,"tag":302,"props":303,"children":308},"pre",{"className":304,"code":305,"language":306,"meta":307,"style":307},"language-bash shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","kubectl -n \u003Coperator-namespace> get deploy cockroach-operator -o jsonpath='{.spec.template.spec.containers[0].image}{\"\\n\"}'\nkubectl get crd crdbclusters.crdb.cockroachlabs.com -o jsonpath='{.spec.versions[*].name}{\"\\n\"}'\nhelm -n \u003Ccockroachdb-namespace> history \u003Ccockroachdb-release> || true\n","bash","",[309],{"type":45,"tag":59,"props":310,"children":311},{"__ignoreMap":307},[312,392,435],{"type":45,"tag":313,"props":314,"children":317},"span",{"class":315,"line":316},"line",1,[318,324,330,336,341,347,352,357,362,367,372,377,382,387],{"type":45,"tag":313,"props":319,"children":321},{"style":320},"--shiki-light:#E2931D;--shiki-default:#FFCB6B;--shiki-dark:#FFCB6B",[322],{"type":50,"value":323},"kubectl",{"type":45,"tag":313,"props":325,"children":327},{"style":326},"--shiki-light:#91B859;--shiki-default:#C3E88D;--shiki-dark:#C3E88D",[328],{"type":50,"value":329}," -n",{"type":45,"tag":313,"props":331,"children":333},{"style":332},"--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF",[334],{"type":50,"value":335}," \u003C",{"type":45,"tag":313,"props":337,"children":338},{"style":326},[339],{"type":50,"value":340},"operator-namespac",{"type":45,"tag":313,"props":342,"children":344},{"style":343},"--shiki-light:#90A4AE;--shiki-default:#EEFFFF;--shiki-dark:#BABED8",[345],{"type":50,"value":346},"e",{"type":45,"tag":313,"props":348,"children":349},{"style":332},[350],{"type":50,"value":351},">",{"type":45,"tag":313,"props":353,"children":354},{"style":326},[355],{"type":50,"value":356}," get",{"type":45,"tag":313,"props":358,"children":359},{"style":326},[360],{"type":50,"value":361}," deploy",{"type":45,"tag":313,"props":363,"children":364},{"style":326},[365],{"type":50,"value":366}," cockroach-operator",{"type":45,"tag":313,"props":368,"children":369},{"style":326},[370],{"type":50,"value":371}," -o",{"type":45,"tag":313,"props":373,"children":374},{"style":326},[375],{"type":50,"value":376}," jsonpath=",{"type":45,"tag":313,"props":378,"children":379},{"style":332},[380],{"type":50,"value":381},"'",{"type":45,"tag":313,"props":383,"children":384},{"style":326},[385],{"type":50,"value":386},"{.spec.template.spec.containers[0].image}{\"\\n\"}",{"type":45,"tag":313,"props":388,"children":389},{"style":332},[390],{"type":50,"value":391},"'\n",{"type":45,"tag":313,"props":393,"children":395},{"class":315,"line":394},2,[396,400,404,409,414,418,422,426,431],{"type":45,"tag":313,"props":397,"children":398},{"style":320},[399],{"type":50,"value":323},{"type":45,"tag":313,"props":401,"children":402},{"style":326},[403],{"type":50,"value":356},{"type":45,"tag":313,"props":405,"children":406},{"style":326},[407],{"type":50,"value":408}," crd",{"type":45,"tag":313,"props":410,"children":411},{"style":326},[412],{"type":50,"value":413}," crdbclusters.crdb.cockroachlabs.com",{"type":45,"tag":313,"props":415,"children":416},{"style":326},[417],{"type":50,"value":371},{"type":45,"tag":313,"props":419,"children":420},{"style":326},[421],{"type":50,"value":376},{"type":45,"tag":313,"props":423,"children":424},{"style":332},[425],{"type":50,"value":381},{"type":45,"tag":313,"props":427,"children":428},{"style":326},[429],{"type":50,"value":430},"{.spec.versions[*].name}{\"\\n\"}",{"type":45,"tag":313,"props":432,"children":433},{"style":332},[434],{"type":50,"value":391},{"type":45,"tag":313,"props":436,"children":438},{"class":315,"line":437},3,[439,444,448,452,457,461,465,470,474,479,483,487,492],{"type":45,"tag":313,"props":440,"children":441},{"style":320},[442],{"type":50,"value":443},"helm",{"type":45,"tag":313,"props":445,"children":446},{"style":326},[447],{"type":50,"value":329},{"type":45,"tag":313,"props":449,"children":450},{"style":332},[451],{"type":50,"value":335},{"type":45,"tag":313,"props":453,"children":454},{"style":326},[455],{"type":50,"value":456},"cockroachdb-namespac",{"type":45,"tag":313,"props":458,"children":459},{"style":343},[460],{"type":50,"value":346},{"type":45,"tag":313,"props":462,"children":463},{"style":332},[464],{"type":50,"value":351},{"type":45,"tag":313,"props":466,"children":467},{"style":326},[468],{"type":50,"value":469}," history",{"type":45,"tag":313,"props":471,"children":472},{"style":332},[473],{"type":50,"value":335},{"type":45,"tag":313,"props":475,"children":476},{"style":326},[477],{"type":50,"value":478},"cockroachdb-releas",{"type":45,"tag":313,"props":480,"children":481},{"style":343},[482],{"type":50,"value":346},{"type":45,"tag":313,"props":484,"children":485},{"style":332},[486],{"type":50,"value":351},{"type":45,"tag":313,"props":488,"children":489},{"style":332},[490],{"type":50,"value":491}," ||",{"type":45,"tag":313,"props":493,"children":495},{"style":494},"--shiki-light:#6182B8;--shiki-default:#82AAFF;--shiki-dark:#82AAFF",[496],{"type":50,"value":497}," true\n",{"type":45,"tag":53,"props":499,"children":500},{},[501],{"type":50,"value":502},"Check the local migration guide and chart changelog for version-specific migration fixes:",{"type":45,"tag":84,"props":504,"children":505},{},[506,515],{"type":45,"tag":88,"props":507,"children":508},{},[509],{"type":45,"tag":68,"props":510,"children":512},{"href":511},"..\u002F..\u002F..\u002Fcockroachdb-parent\u002FMIGRATION_v1alpha1_to_v1beta1.md",[513],{"type":50,"value":514},"v1alpha1 to v1beta1 Migration Guide",{"type":45,"tag":88,"props":516,"children":517},{},[518],{"type":45,"tag":68,"props":519,"children":521},{"href":520},"..\u002F..\u002F..\u002FCHANGELOG.md",[522],{"type":50,"value":523},"CockroachDB Helm Chart Changelog",{"type":45,"tag":77,"props":525,"children":527},{"id":526},"step-2-inspect-migration-state",[528],{"type":50,"value":529},"Step 2: Inspect Migration State",{"type":45,"tag":302,"props":531,"children":533},{"className":304,"code":532,"language":306,"meta":307,"style":307},"kubectl -n \u003Ccockroachdb-namespace> get crdbcluster \u003Ccockroachdb-release> -o json | jq '{\n  mode: .spec.mode,\n  migrateLabel: .metadata.labels[\"crdb.io\u002Fmigrate\"],\n  migrationStatus: .metadata.labels[\"crdb.cockroachlabs.com\u002Fmigration\"],\n  migrationPhase: .status.migration.phase,\n  migrationMessage: .status.migration.message,\n  initialized: [.status.conditions[]? | select(.type==\"Initialized\" or .type==\"ClusterInitialized\")],\n  generation: .metadata.generation,\n  observedGeneration: .status.observedGeneration\n}'\n\nkubectl -n \u003Coperator-namespace> logs -l app=cockroach-operator --tail=300 | grep -Ei 'migrationctrl|migration|phase|cert' || true\nkubectl -n \u003Ccockroachdb-namespace> get crdbnodes -o wide\nkubectl -n \u003Ccockroachdb-namespace> get crdbnodes -o yaml\n",[534],{"type":45,"tag":59,"props":535,"children":536},{"__ignoreMap":307},[537,618,626,634,643,652,661,670,679,688,701,711,794,840],{"type":45,"tag":313,"props":538,"children":539},{"class":315,"line":316},[540,544,548,552,556,560,564,568,573,577,581,585,589,593,598,603,608,613],{"type":45,"tag":313,"props":541,"children":542},{"style":320},[543],{"type":50,"value":323},{"type":45,"tag":313,"props":545,"children":546},{"style":326},[547],{"type":50,"value":329},{"type":45,"tag":313,"props":549,"children":550},{"style":332},[551],{"type":50,"value":335},{"type":45,"tag":313,"props":553,"children":554},{"style":326},[555],{"type":50,"value":456},{"type":45,"tag":313,"props":557,"children":558},{"style":343},[559],{"type":50,"value":346},{"type":45,"tag":313,"props":561,"children":562},{"style":332},[563],{"type":50,"value":351},{"type":45,"tag":313,"props":565,"children":566},{"style":326},[567],{"type":50,"value":356},{"type":45,"tag":313,"props":569,"children":570},{"style":326},[571],{"type":50,"value":572}," crdbcluster",{"type":45,"tag":313,"props":574,"children":575},{"style":332},[576],{"type":50,"value":335},{"type":45,"tag":313,"props":578,"children":579},{"style":326},[580],{"type":50,"value":478},{"type":45,"tag":313,"props":582,"children":583},{"style":343},[584],{"type":50,"value":346},{"type":45,"tag":313,"props":586,"children":587},{"style":332},[588],{"type":50,"value":351},{"type":45,"tag":313,"props":590,"children":591},{"style":326},[592],{"type":50,"value":371},{"type":45,"tag":313,"props":594,"children":595},{"style":326},[596],{"type":50,"value":597}," json",{"type":45,"tag":313,"props":599,"children":600},{"style":332},[601],{"type":50,"value":602}," |",{"type":45,"tag":313,"props":604,"children":605},{"style":320},[606],{"type":50,"value":607}," jq",{"type":45,"tag":313,"props":609,"children":610},{"style":332},[611],{"type":50,"value":612}," '",{"type":45,"tag":313,"props":614,"children":615},{"style":326},[616],{"type":50,"value":617},"{\n",{"type":45,"tag":313,"props":619,"children":620},{"class":315,"line":394},[621],{"type":45,"tag":313,"props":622,"children":623},{"style":326},[624],{"type":50,"value":625},"  mode: .spec.mode,\n",{"type":45,"tag":313,"props":627,"children":628},{"class":315,"line":437},[629],{"type":45,"tag":313,"props":630,"children":631},{"style":326},[632],{"type":50,"value":633},"  migrateLabel: .metadata.labels[\"crdb.io\u002Fmigrate\"],\n",{"type":45,"tag":313,"props":635,"children":637},{"class":315,"line":636},4,[638],{"type":45,"tag":313,"props":639,"children":640},{"style":326},[641],{"type":50,"value":642},"  migrationStatus: .metadata.labels[\"crdb.cockroachlabs.com\u002Fmigration\"],\n",{"type":45,"tag":313,"props":644,"children":646},{"class":315,"line":645},5,[647],{"type":45,"tag":313,"props":648,"children":649},{"style":326},[650],{"type":50,"value":651},"  migrationPhase: .status.migration.phase,\n",{"type":45,"tag":313,"props":653,"children":655},{"class":315,"line":654},6,[656],{"type":45,"tag":313,"props":657,"children":658},{"style":326},[659],{"type":50,"value":660},"  migrationMessage: .status.migration.message,\n",{"type":45,"tag":313,"props":662,"children":664},{"class":315,"line":663},7,[665],{"type":45,"tag":313,"props":666,"children":667},{"style":326},[668],{"type":50,"value":669},"  initialized: [.status.conditions[]? | select(.type==\"Initialized\" or .type==\"ClusterInitialized\")],\n",{"type":45,"tag":313,"props":671,"children":673},{"class":315,"line":672},8,[674],{"type":45,"tag":313,"props":675,"children":676},{"style":326},[677],{"type":50,"value":678},"  generation: .metadata.generation,\n",{"type":45,"tag":313,"props":680,"children":682},{"class":315,"line":681},9,[683],{"type":45,"tag":313,"props":684,"children":685},{"style":326},[686],{"type":50,"value":687},"  observedGeneration: .status.observedGeneration\n",{"type":45,"tag":313,"props":689,"children":691},{"class":315,"line":690},10,[692,697],{"type":45,"tag":313,"props":693,"children":694},{"style":326},[695],{"type":50,"value":696},"}",{"type":45,"tag":313,"props":698,"children":699},{"style":332},[700],{"type":50,"value":391},{"type":45,"tag":313,"props":702,"children":704},{"class":315,"line":703},11,[705],{"type":45,"tag":313,"props":706,"children":708},{"emptyLinePlaceholder":707},true,[709],{"type":50,"value":710},"\n",{"type":45,"tag":313,"props":712,"children":714},{"class":315,"line":713},12,[715,719,723,727,731,735,739,744,749,754,759,763,768,773,777,782,786,790],{"type":45,"tag":313,"props":716,"children":717},{"style":320},[718],{"type":50,"value":323},{"type":45,"tag":313,"props":720,"children":721},{"style":326},[722],{"type":50,"value":329},{"type":45,"tag":313,"props":724,"children":725},{"style":332},[726],{"type":50,"value":335},{"type":45,"tag":313,"props":728,"children":729},{"style":326},[730],{"type":50,"value":340},{"type":45,"tag":313,"props":732,"children":733},{"style":343},[734],{"type":50,"value":346},{"type":45,"tag":313,"props":736,"children":737},{"style":332},[738],{"type":50,"value":351},{"type":45,"tag":313,"props":740,"children":741},{"style":326},[742],{"type":50,"value":743}," logs",{"type":45,"tag":313,"props":745,"children":746},{"style":326},[747],{"type":50,"value":748}," -l",{"type":45,"tag":313,"props":750,"children":751},{"style":326},[752],{"type":50,"value":753}," app=cockroach-operator",{"type":45,"tag":313,"props":755,"children":756},{"style":326},[757],{"type":50,"value":758}," --tail=300",{"type":45,"tag":313,"props":760,"children":761},{"style":332},[762],{"type":50,"value":602},{"type":45,"tag":313,"props":764,"children":765},{"style":320},[766],{"type":50,"value":767}," grep",{"type":45,"tag":313,"props":769,"children":770},{"style":326},[771],{"type":50,"value":772}," -Ei",{"type":45,"tag":313,"props":774,"children":775},{"style":332},[776],{"type":50,"value":612},{"type":45,"tag":313,"props":778,"children":779},{"style":326},[780],{"type":50,"value":781},"migrationctrl|migration|phase|cert",{"type":45,"tag":313,"props":783,"children":784},{"style":332},[785],{"type":50,"value":381},{"type":45,"tag":313,"props":787,"children":788},{"style":332},[789],{"type":50,"value":491},{"type":45,"tag":313,"props":791,"children":792},{"style":494},[793],{"type":50,"value":497},{"type":45,"tag":313,"props":795,"children":797},{"class":315,"line":796},13,[798,802,806,810,814,818,822,826,831,835],{"type":45,"tag":313,"props":799,"children":800},{"style":320},[801],{"type":50,"value":323},{"type":45,"tag":313,"props":803,"children":804},{"style":326},[805],{"type":50,"value":329},{"type":45,"tag":313,"props":807,"children":808},{"style":332},[809],{"type":50,"value":335},{"type":45,"tag":313,"props":811,"children":812},{"style":326},[813],{"type":50,"value":456},{"type":45,"tag":313,"props":815,"children":816},{"style":343},[817],{"type":50,"value":346},{"type":45,"tag":313,"props":819,"children":820},{"style":332},[821],{"type":50,"value":351},{"type":45,"tag":313,"props":823,"children":824},{"style":326},[825],{"type":50,"value":356},{"type":45,"tag":313,"props":827,"children":828},{"style":326},[829],{"type":50,"value":830}," crdbnodes",{"type":45,"tag":313,"props":832,"children":833},{"style":326},[834],{"type":50,"value":371},{"type":45,"tag":313,"props":836,"children":837},{"style":326},[838],{"type":50,"value":839}," wide\n",{"type":45,"tag":313,"props":841,"children":843},{"class":315,"line":842},14,[844,848,852,856,860,864,868,872,876,880],{"type":45,"tag":313,"props":845,"children":846},{"style":320},[847],{"type":50,"value":323},{"type":45,"tag":313,"props":849,"children":850},{"style":326},[851],{"type":50,"value":329},{"type":45,"tag":313,"props":853,"children":854},{"style":332},[855],{"type":50,"value":335},{"type":45,"tag":313,"props":857,"children":858},{"style":326},[859],{"type":50,"value":456},{"type":45,"tag":313,"props":861,"children":862},{"style":343},[863],{"type":50,"value":346},{"type":45,"tag":313,"props":865,"children":866},{"style":332},[867],{"type":50,"value":351},{"type":45,"tag":313,"props":869,"children":870},{"style":326},[871],{"type":50,"value":356},{"type":45,"tag":313,"props":873,"children":874},{"style":326},[875],{"type":50,"value":830},{"type":45,"tag":313,"props":877,"children":878},{"style":326},[879],{"type":50,"value":371},{"type":45,"tag":313,"props":881,"children":882},{"style":326},[883],{"type":50,"value":884}," yaml\n",{"type":45,"tag":77,"props":886,"children":888},{"id":887},"step-3-inspect-source-workload",[889],{"type":50,"value":890},"Step 3: Inspect Source Workload",{"type":45,"tag":53,"props":892,"children":893},{},[894],{"type":50,"value":895},"For Helm StatefulSet migration:",{"type":45,"tag":302,"props":897,"children":899},{"className":304,"code":898,"language":306,"meta":307,"style":307},"kubectl -n \u003Ccockroachdb-namespace> get sts \u003Csource-statefulset> -o json | jq '{\n  replicas: .spec.replicas,\n  readyReplicas: .status.readyReplicas,\n  migrateLabel: .metadata.labels[\"crdb.io\u002Fmigrate\"],\n  ownerReferences: .metadata.ownerReferences\n}'\n\nkubectl -n \u003Ccockroachdb-namespace> get sts \u003Csource-statefulset> -o yaml\nkubectl -n \u003Ccockroachdb-namespace> get pods -l app.kubernetes.io\u002Fname=cockroachdb -o yaml | grep -E 'name:|ownerReferences:|kind:|uid:|controller:' -A8\nkubectl -n \u003Ccockroachdb-namespace> get pvc -o yaml | grep -E 'name:|ownerReferences:|kind:|uid:|controller:' -A8\n",[900],{"type":45,"tag":59,"props":901,"children":902},{"__ignoreMap":307},[903,981,989,997,1004,1012,1023,1030,1089,1174],{"type":45,"tag":313,"props":904,"children":905},{"class":315,"line":316},[906,910,914,918,922,926,930,934,939,943,948,953,957,961,965,969,973,977],{"type":45,"tag":313,"props":907,"children":908},{"style":320},[909],{"type":50,"value":323},{"type":45,"tag":313,"props":911,"children":912},{"style":326},[913],{"type":50,"value":329},{"type":45,"tag":313,"props":915,"children":916},{"style":332},[917],{"type":50,"value":335},{"type":45,"tag":313,"props":919,"children":920},{"style":326},[921],{"type":50,"value":456},{"type":45,"tag":313,"props":923,"children":924},{"style":343},[925],{"type":50,"value":346},{"type":45,"tag":313,"props":927,"children":928},{"style":332},[929],{"type":50,"value":351},{"type":45,"tag":313,"props":931,"children":932},{"style":326},[933],{"type":50,"value":356},{"type":45,"tag":313,"props":935,"children":936},{"style":326},[937],{"type":50,"value":938}," sts",{"type":45,"tag":313,"props":940,"children":941},{"style":332},[942],{"type":50,"value":335},{"type":45,"tag":313,"props":944,"children":945},{"style":326},[946],{"type":50,"value":947},"source-statefulse",{"type":45,"tag":313,"props":949,"children":950},{"style":343},[951],{"type":50,"value":952},"t",{"type":45,"tag":313,"props":954,"children":955},{"style":332},[956],{"type":50,"value":351},{"type":45,"tag":313,"props":958,"children":959},{"style":326},[960],{"type":50,"value":371},{"type":45,"tag":313,"props":962,"children":963},{"style":326},[964],{"type":50,"value":597},{"type":45,"tag":313,"props":966,"children":967},{"style":332},[968],{"type":50,"value":602},{"type":45,"tag":313,"props":970,"children":971},{"style":320},[972],{"type":50,"value":607},{"type":45,"tag":313,"props":974,"children":975},{"style":332},[976],{"type":50,"value":612},{"type":45,"tag":313,"props":978,"children":979},{"style":326},[980],{"type":50,"value":617},{"type":45,"tag":313,"props":982,"children":983},{"class":315,"line":394},[984],{"type":45,"tag":313,"props":985,"children":986},{"style":326},[987],{"type":50,"value":988},"  replicas: .spec.replicas,\n",{"type":45,"tag":313,"props":990,"children":991},{"class":315,"line":437},[992],{"type":45,"tag":313,"props":993,"children":994},{"style":326},[995],{"type":50,"value":996},"  readyReplicas: .status.readyReplicas,\n",{"type":45,"tag":313,"props":998,"children":999},{"class":315,"line":636},[1000],{"type":45,"tag":313,"props":1001,"children":1002},{"style":326},[1003],{"type":50,"value":633},{"type":45,"tag":313,"props":1005,"children":1006},{"class":315,"line":645},[1007],{"type":45,"tag":313,"props":1008,"children":1009},{"style":326},[1010],{"type":50,"value":1011},"  ownerReferences: .metadata.ownerReferences\n",{"type":45,"tag":313,"props":1013,"children":1014},{"class":315,"line":654},[1015,1019],{"type":45,"tag":313,"props":1016,"children":1017},{"style":326},[1018],{"type":50,"value":696},{"type":45,"tag":313,"props":1020,"children":1021},{"style":332},[1022],{"type":50,"value":391},{"type":45,"tag":313,"props":1024,"children":1025},{"class":315,"line":663},[1026],{"type":45,"tag":313,"props":1027,"children":1028},{"emptyLinePlaceholder":707},[1029],{"type":50,"value":710},{"type":45,"tag":313,"props":1031,"children":1032},{"class":315,"line":672},[1033,1037,1041,1045,1049,1053,1057,1061,1065,1069,1073,1077,1081,1085],{"type":45,"tag":313,"props":1034,"children":1035},{"style":320},[1036],{"type":50,"value":323},{"type":45,"tag":313,"props":1038,"children":1039},{"style":326},[1040],{"type":50,"value":329},{"type":45,"tag":313,"props":1042,"children":1043},{"style":332},[1044],{"type":50,"value":335},{"type":45,"tag":313,"props":1046,"children":1047},{"style":326},[1048],{"type":50,"value":456},{"type":45,"tag":313,"props":1050,"children":1051},{"style":343},[1052],{"type":50,"value":346},{"type":45,"tag":313,"props":1054,"children":1055},{"style":332},[1056],{"type":50,"value":351},{"type":45,"tag":313,"props":1058,"children":1059},{"style":326},[1060],{"type":50,"value":356},{"type":45,"tag":313,"props":1062,"children":1063},{"style":326},[1064],{"type":50,"value":938},{"type":45,"tag":313,"props":1066,"children":1067},{"style":332},[1068],{"type":50,"value":335},{"type":45,"tag":313,"props":1070,"children":1071},{"style":326},[1072],{"type":50,"value":947},{"type":45,"tag":313,"props":1074,"children":1075},{"style":343},[1076],{"type":50,"value":952},{"type":45,"tag":313,"props":1078,"children":1079},{"style":332},[1080],{"type":50,"value":351},{"type":45,"tag":313,"props":1082,"children":1083},{"style":326},[1084],{"type":50,"value":371},{"type":45,"tag":313,"props":1086,"children":1087},{"style":326},[1088],{"type":50,"value":884},{"type":45,"tag":313,"props":1090,"children":1091},{"class":315,"line":681},[1092,1096,1100,1104,1108,1112,1116,1120,1125,1129,1134,1138,1143,1147,1151,1156,1160,1165,1169],{"type":45,"tag":313,"props":1093,"children":1094},{"style":320},[1095],{"type":50,"value":323},{"type":45,"tag":313,"props":1097,"children":1098},{"style":326},[1099],{"type":50,"value":329},{"type":45,"tag":313,"props":1101,"children":1102},{"style":332},[1103],{"type":50,"value":335},{"type":45,"tag":313,"props":1105,"children":1106},{"style":326},[1107],{"type":50,"value":456},{"type":45,"tag":313,"props":1109,"children":1110},{"style":343},[1111],{"type":50,"value":346},{"type":45,"tag":313,"props":1113,"children":1114},{"style":332},[1115],{"type":50,"value":351},{"type":45,"tag":313,"props":1117,"children":1118},{"style":326},[1119],{"type":50,"value":356},{"type":45,"tag":313,"props":1121,"children":1122},{"style":326},[1123],{"type":50,"value":1124}," pods",{"type":45,"tag":313,"props":1126,"children":1127},{"style":326},[1128],{"type":50,"value":748},{"type":45,"tag":313,"props":1130,"children":1131},{"style":326},[1132],{"type":50,"value":1133}," app.kubernetes.io\u002Fname=cockroachdb",{"type":45,"tag":313,"props":1135,"children":1136},{"style":326},[1137],{"type":50,"value":371},{"type":45,"tag":313,"props":1139,"children":1140},{"style":326},[1141],{"type":50,"value":1142}," yaml",{"type":45,"tag":313,"props":1144,"children":1145},{"style":332},[1146],{"type":50,"value":602},{"type":45,"tag":313,"props":1148,"children":1149},{"style":320},[1150],{"type":50,"value":767},{"type":45,"tag":313,"props":1152,"children":1153},{"style":326},[1154],{"type":50,"value":1155}," -E",{"type":45,"tag":313,"props":1157,"children":1158},{"style":332},[1159],{"type":50,"value":612},{"type":45,"tag":313,"props":1161,"children":1162},{"style":326},[1163],{"type":50,"value":1164},"name:|ownerReferences:|kind:|uid:|controller:",{"type":45,"tag":313,"props":1166,"children":1167},{"style":332},[1168],{"type":50,"value":381},{"type":45,"tag":313,"props":1170,"children":1171},{"style":326},[1172],{"type":50,"value":1173}," -A8\n",{"type":45,"tag":313,"props":1175,"children":1176},{"class":315,"line":690},[1177,1181,1185,1189,1193,1197,1201,1205,1210,1214,1218,1222,1226,1230,1234,1238,1242],{"type":45,"tag":313,"props":1178,"children":1179},{"style":320},[1180],{"type":50,"value":323},{"type":45,"tag":313,"props":1182,"children":1183},{"style":326},[1184],{"type":50,"value":329},{"type":45,"tag":313,"props":1186,"children":1187},{"style":332},[1188],{"type":50,"value":335},{"type":45,"tag":313,"props":1190,"children":1191},{"style":326},[1192],{"type":50,"value":456},{"type":45,"tag":313,"props":1194,"children":1195},{"style":343},[1196],{"type":50,"value":346},{"type":45,"tag":313,"props":1198,"children":1199},{"style":332},[1200],{"type":50,"value":351},{"type":45,"tag":313,"props":1202,"children":1203},{"style":326},[1204],{"type":50,"value":356},{"type":45,"tag":313,"props":1206,"children":1207},{"style":326},[1208],{"type":50,"value":1209}," pvc",{"type":45,"tag":313,"props":1211,"children":1212},{"style":326},[1213],{"type":50,"value":371},{"type":45,"tag":313,"props":1215,"children":1216},{"style":326},[1217],{"type":50,"value":1142},{"type":45,"tag":313,"props":1219,"children":1220},{"style":332},[1221],{"type":50,"value":602},{"type":45,"tag":313,"props":1223,"children":1224},{"style":320},[1225],{"type":50,"value":767},{"type":45,"tag":313,"props":1227,"children":1228},{"style":326},[1229],{"type":50,"value":1155},{"type":45,"tag":313,"props":1231,"children":1232},{"style":332},[1233],{"type":50,"value":612},{"type":45,"tag":313,"props":1235,"children":1236},{"style":326},[1237],{"type":50,"value":1164},{"type":45,"tag":313,"props":1239,"children":1240},{"style":332},[1241],{"type":50,"value":381},{"type":45,"tag":313,"props":1243,"children":1244},{"style":326},[1245],{"type":50,"value":1173},{"type":45,"tag":53,"props":1247,"children":1248},{},[1249],{"type":50,"value":1250},"For public operator v1alpha1 migration:",{"type":45,"tag":302,"props":1252,"children":1254},{"className":304,"code":1253,"language":306,"meta":307,"style":307},"kubectl -n \u003Ccockroachdb-namespace> get crdbcluster.crdb.cockroachlabs.com \u003Ccluster-name> -o yaml\nkubectl -n \u003Ccockroachdb-namespace> get crdbcluster.v1beta1.crdb.cockroachlabs.com \u003Ccluster-name> -o yaml 2>&1 || true\nkubectl -n \u003Coperator-namespace> get svc cockroach-webhook-service\nkubectl -n \u003Coperator-namespace> get endpoints cockroach-webhook-service\nkubectl get validatingwebhookconfigurations | grep cockroach\n",[1255],{"type":45,"tag":59,"props":1256,"children":1257},{"__ignoreMap":307},[1258,1319,1392,1433,1473],{"type":45,"tag":313,"props":1259,"children":1260},{"class":315,"line":316},[1261,1265,1269,1273,1277,1281,1285,1289,1294,1298,1303,1307,1311,1315],{"type":45,"tag":313,"props":1262,"children":1263},{"style":320},[1264],{"type":50,"value":323},{"type":45,"tag":313,"props":1266,"children":1267},{"style":326},[1268],{"type":50,"value":329},{"type":45,"tag":313,"props":1270,"children":1271},{"style":332},[1272],{"type":50,"value":335},{"type":45,"tag":313,"props":1274,"children":1275},{"style":326},[1276],{"type":50,"value":456},{"type":45,"tag":313,"props":1278,"children":1279},{"style":343},[1280],{"type":50,"value":346},{"type":45,"tag":313,"props":1282,"children":1283},{"style":332},[1284],{"type":50,"value":351},{"type":45,"tag":313,"props":1286,"children":1287},{"style":326},[1288],{"type":50,"value":356},{"type":45,"tag":313,"props":1290,"children":1291},{"style":326},[1292],{"type":50,"value":1293}," crdbcluster.crdb.cockroachlabs.com",{"type":45,"tag":313,"props":1295,"children":1296},{"style":332},[1297],{"type":50,"value":335},{"type":45,"tag":313,"props":1299,"children":1300},{"style":326},[1301],{"type":50,"value":1302},"cluster-nam",{"type":45,"tag":313,"props":1304,"children":1305},{"style":343},[1306],{"type":50,"value":346},{"type":45,"tag":313,"props":1308,"children":1309},{"style":332},[1310],{"type":50,"value":351},{"type":45,"tag":313,"props":1312,"children":1313},{"style":326},[1314],{"type":50,"value":371},{"type":45,"tag":313,"props":1316,"children":1317},{"style":326},[1318],{"type":50,"value":884},{"type":45,"tag":313,"props":1320,"children":1321},{"class":315,"line":394},[1322,1326,1330,1334,1338,1342,1346,1350,1355,1359,1363,1367,1371,1375,1379,1384,1388],{"type":45,"tag":313,"props":1323,"children":1324},{"style":320},[1325],{"type":50,"value":323},{"type":45,"tag":313,"props":1327,"children":1328},{"style":326},[1329],{"type":50,"value":329},{"type":45,"tag":313,"props":1331,"children":1332},{"style":332},[1333],{"type":50,"value":335},{"type":45,"tag":313,"props":1335,"children":1336},{"style":326},[1337],{"type":50,"value":456},{"type":45,"tag":313,"props":1339,"children":1340},{"style":343},[1341],{"type":50,"value":346},{"type":45,"tag":313,"props":1343,"children":1344},{"style":332},[1345],{"type":50,"value":351},{"type":45,"tag":313,"props":1347,"children":1348},{"style":326},[1349],{"type":50,"value":356},{"type":45,"tag":313,"props":1351,"children":1352},{"style":326},[1353],{"type":50,"value":1354}," crdbcluster.v1beta1.crdb.cockroachlabs.com",{"type":45,"tag":313,"props":1356,"children":1357},{"style":332},[1358],{"type":50,"value":335},{"type":45,"tag":313,"props":1360,"children":1361},{"style":326},[1362],{"type":50,"value":1302},{"type":45,"tag":313,"props":1364,"children":1365},{"style":343},[1366],{"type":50,"value":346},{"type":45,"tag":313,"props":1368,"children":1369},{"style":332},[1370],{"type":50,"value":351},{"type":45,"tag":313,"props":1372,"children":1373},{"style":326},[1374],{"type":50,"value":371},{"type":45,"tag":313,"props":1376,"children":1377},{"style":326},[1378],{"type":50,"value":1142},{"type":45,"tag":313,"props":1380,"children":1381},{"style":332},[1382],{"type":50,"value":1383}," 2>&1",{"type":45,"tag":313,"props":1385,"children":1386},{"style":332},[1387],{"type":50,"value":491},{"type":45,"tag":313,"props":1389,"children":1390},{"style":494},[1391],{"type":50,"value":497},{"type":45,"tag":313,"props":1393,"children":1394},{"class":315,"line":437},[1395,1399,1403,1407,1411,1415,1419,1423,1428],{"type":45,"tag":313,"props":1396,"children":1397},{"style":320},[1398],{"type":50,"value":323},{"type":45,"tag":313,"props":1400,"children":1401},{"style":326},[1402],{"type":50,"value":329},{"type":45,"tag":313,"props":1404,"children":1405},{"style":332},[1406],{"type":50,"value":335},{"type":45,"tag":313,"props":1408,"children":1409},{"style":326},[1410],{"type":50,"value":340},{"type":45,"tag":313,"props":1412,"children":1413},{"style":343},[1414],{"type":50,"value":346},{"type":45,"tag":313,"props":1416,"children":1417},{"style":332},[1418],{"type":50,"value":351},{"type":45,"tag":313,"props":1420,"children":1421},{"style":326},[1422],{"type":50,"value":356},{"type":45,"tag":313,"props":1424,"children":1425},{"style":326},[1426],{"type":50,"value":1427}," svc",{"type":45,"tag":313,"props":1429,"children":1430},{"style":326},[1431],{"type":50,"value":1432}," cockroach-webhook-service\n",{"type":45,"tag":313,"props":1434,"children":1435},{"class":315,"line":636},[1436,1440,1444,1448,1452,1456,1460,1464,1469],{"type":45,"tag":313,"props":1437,"children":1438},{"style":320},[1439],{"type":50,"value":323},{"type":45,"tag":313,"props":1441,"children":1442},{"style":326},[1443],{"type":50,"value":329},{"type":45,"tag":313,"props":1445,"children":1446},{"style":332},[1447],{"type":50,"value":335},{"type":45,"tag":313,"props":1449,"children":1450},{"style":326},[1451],{"type":50,"value":340},{"type":45,"tag":313,"props":1453,"children":1454},{"style":343},[1455],{"type":50,"value":346},{"type":45,"tag":313,"props":1457,"children":1458},{"style":332},[1459],{"type":50,"value":351},{"type":45,"tag":313,"props":1461,"children":1462},{"style":326},[1463],{"type":50,"value":356},{"type":45,"tag":313,"props":1465,"children":1466},{"style":326},[1467],{"type":50,"value":1468}," endpoints",{"type":45,"tag":313,"props":1470,"children":1471},{"style":326},[1472],{"type":50,"value":1432},{"type":45,"tag":313,"props":1474,"children":1475},{"class":315,"line":645},[1476,1480,1484,1489,1493,1497],{"type":45,"tag":313,"props":1477,"children":1478},{"style":320},[1479],{"type":50,"value":323},{"type":45,"tag":313,"props":1481,"children":1482},{"style":326},[1483],{"type":50,"value":356},{"type":45,"tag":313,"props":1485,"children":1486},{"style":326},[1487],{"type":50,"value":1488}," validatingwebhookconfigurations",{"type":45,"tag":313,"props":1490,"children":1491},{"style":332},[1492],{"type":50,"value":602},{"type":45,"tag":313,"props":1494,"children":1495},{"style":320},[1496],{"type":50,"value":767},{"type":45,"tag":313,"props":1498,"children":1499},{"style":326},[1500],{"type":50,"value":1501}," cockroach\n",{"type":45,"tag":53,"props":1503,"children":1504},{},[1505],{"type":50,"value":1506},"The operator supports both v1alpha1 and v1beta1 through conversion webhooks. If conversion fails, check webhook service health and operator logs.",{"type":45,"tag":77,"props":1508,"children":1510},{"id":1509},"step-4-interpret-migration-phases",[1511],{"type":50,"value":1512},"Step 4: Interpret Migration Phases",{"type":45,"tag":1514,"props":1515,"children":1516},"table",{},[1517,1541],{"type":45,"tag":1518,"props":1519,"children":1520},"thead",{},[1521],{"type":45,"tag":1522,"props":1523,"children":1524},"tr",{},[1525,1531,1536],{"type":45,"tag":1526,"props":1527,"children":1528},"th",{},[1529],{"type":50,"value":1530},"Phase",{"type":45,"tag":1526,"props":1532,"children":1533},{},[1534],{"type":50,"value":1535},"What Happens",{"type":45,"tag":1526,"props":1537,"children":1538},{},[1539],{"type":50,"value":1540},"What to Check",{"type":45,"tag":1542,"props":1543,"children":1544},"tbody",{},[1545,1571,1589,1621,1665],{"type":45,"tag":1522,"props":1546,"children":1547},{},[1548,1554,1559],{"type":45,"tag":1549,"props":1550,"children":1551},"td",{},[1552],{"type":50,"value":1553},"Init",{"type":45,"tag":1549,"props":1555,"children":1556},{},[1557],{"type":50,"value":1558},"Operator validates prerequisites and prepares migration",{"type":45,"tag":1549,"props":1560,"children":1561},{},[1562,1564,1569],{"type":50,"value":1563},"Migration label is ",{"type":45,"tag":59,"props":1565,"children":1567},{"className":1566},[],[1568],{"type":50,"value":108},{"type":50,"value":1570},"; check operator logs for validation errors",{"type":45,"tag":1522,"props":1572,"children":1573},{},[1574,1579,1584],{"type":45,"tag":1549,"props":1575,"children":1576},{},[1577],{"type":50,"value":1578},"CertMigration",{"type":45,"tag":1549,"props":1580,"children":1581},{},[1582],{"type":50,"value":1583},"Operator migrates or creates TLS certificate resources",{"type":45,"tag":1549,"props":1585,"children":1586},{},[1587],{"type":50,"value":1588},"Check certificate Secrets, CA resources, cert-manager resources, and cert metadata",{"type":45,"tag":1522,"props":1590,"children":1591},{},[1592,1597,1609],{"type":45,"tag":1549,"props":1593,"children":1594},{},[1595],{"type":50,"value":1596},"PodMigration",{"type":45,"tag":1549,"props":1598,"children":1599},{},[1600,1602,1607],{"type":50,"value":1601},"Operator creates ",{"type":45,"tag":59,"props":1603,"children":1605},{"className":1604},[],[1606],{"type":50,"value":64},{"type":50,"value":1608}," resources to take over pods from the StatefulSet",{"type":45,"tag":1549,"props":1610,"children":1611},{},[1612,1614,1619],{"type":50,"value":1613},"Check ",{"type":45,"tag":59,"props":1615,"children":1617},{"className":1616},[],[1618],{"type":50,"value":64},{"type":50,"value":1620}," creation and pod ownerReferences",{"type":45,"tag":1522,"props":1622,"children":1623},{},[1624,1629,1642],{"type":45,"tag":1549,"props":1625,"children":1626},{},[1627],{"type":50,"value":1628},"Finalization",{"type":45,"tag":1549,"props":1630,"children":1631},{},[1632,1634,1640],{"type":50,"value":1633},"Operator sets ",{"type":45,"tag":59,"props":1635,"children":1637},{"className":1636},[],[1638],{"type":50,"value":1639},"mode=MutableOnly",{"type":50,"value":1641}," and stops source migration work",{"type":45,"tag":1549,"props":1643,"children":1644},{},[1645,1650,1652,1658,1660],{"type":45,"tag":59,"props":1646,"children":1648},{"className":1647},[],[1649],{"type":50,"value":272},{"type":50,"value":1651}," mode should be ",{"type":45,"tag":59,"props":1653,"children":1655},{"className":1654},[],[1656],{"type":50,"value":1657},"MutableOnly",{"type":50,"value":1659},"; migration label should be ",{"type":45,"tag":59,"props":1661,"children":1663},{"className":1662},[],[1664],{"type":50,"value":116},{"type":45,"tag":1522,"props":1666,"children":1667},{},[1668,1673,1678],{"type":45,"tag":1549,"props":1669,"children":1670},{},[1671],{"type":50,"value":1672},"Complete",{"type":45,"tag":1549,"props":1674,"children":1675},{},[1676],{"type":50,"value":1677},"Customer deletes the source StatefulSet and the delete event triggers final reconcile",{"type":45,"tag":1549,"props":1679,"children":1680},{},[1681,1683],{"type":50,"value":1682},"StatefulSet must be manually deleted only after finalization; migration label should become ",{"type":45,"tag":59,"props":1684,"children":1686},{"className":1685},[],[1687],{"type":50,"value":1688},"complete",{"type":45,"tag":77,"props":1690,"children":1692},{"id":1691},"step-5-debug-common-migration-stalls",[1693],{"type":50,"value":1694},"Step 5: Debug Common Migration Stalls",{"type":45,"tag":1696,"props":1697,"children":1699},"h3",{"id":1698},"migration-not-progressing",[1700],{"type":50,"value":1701},"Migration Not Progressing",{"type":45,"tag":302,"props":1703,"children":1705},{"className":304,"code":1704,"language":306,"meta":307,"style":307},"kubectl -n \u003Ccockroachdb-namespace> get crdbcluster \u003Ccockroachdb-release> -o jsonpath='{.status.migration}{\"\\n\"}'\nkubectl -n \u003Coperator-namespace> logs -l app=cockroach-operator --tail=300 | grep -Ei 'migration|phase|cert|error' || true\nkubectl -n \u003Coperator-namespace> get deploy cockroach-operator -o jsonpath='{.spec.template.spec.containers[0].args}{\"\\n\"}'\n",[1706],{"type":45,"tag":59,"props":1707,"children":1708},{"__ignoreMap":307},[1709,1781,1857],{"type":45,"tag":313,"props":1710,"children":1711},{"class":315,"line":316},[1712,1716,1720,1724,1728,1732,1736,1740,1744,1748,1752,1756,1760,1764,1768,1772,1777],{"type":45,"tag":313,"props":1713,"children":1714},{"style":320},[1715],{"type":50,"value":323},{"type":45,"tag":313,"props":1717,"children":1718},{"style":326},[1719],{"type":50,"value":329},{"type":45,"tag":313,"props":1721,"children":1722},{"style":332},[1723],{"type":50,"value":335},{"type":45,"tag":313,"props":1725,"children":1726},{"style":326},[1727],{"type":50,"value":456},{"type":45,"tag":313,"props":1729,"children":1730},{"style":343},[1731],{"type":50,"value":346},{"type":45,"tag":313,"props":1733,"children":1734},{"style":332},[1735],{"type":50,"value":351},{"type":45,"tag":313,"props":1737,"children":1738},{"style":326},[1739],{"type":50,"value":356},{"type":45,"tag":313,"props":1741,"children":1742},{"style":326},[1743],{"type":50,"value":572},{"type":45,"tag":313,"props":1745,"children":1746},{"style":332},[1747],{"type":50,"value":335},{"type":45,"tag":313,"props":1749,"children":1750},{"style":326},[1751],{"type":50,"value":478},{"type":45,"tag":313,"props":1753,"children":1754},{"style":343},[1755],{"type":50,"value":346},{"type":45,"tag":313,"props":1757,"children":1758},{"style":332},[1759],{"type":50,"value":351},{"type":45,"tag":313,"props":1761,"children":1762},{"style":326},[1763],{"type":50,"value":371},{"type":45,"tag":313,"props":1765,"children":1766},{"style":326},[1767],{"type":50,"value":376},{"type":45,"tag":313,"props":1769,"children":1770},{"style":332},[1771],{"type":50,"value":381},{"type":45,"tag":313,"props":1773,"children":1774},{"style":326},[1775],{"type":50,"value":1776},"{.status.migration}{\"\\n\"}",{"type":45,"tag":313,"props":1778,"children":1779},{"style":332},[1780],{"type":50,"value":391},{"type":45,"tag":313,"props":1782,"children":1783},{"class":315,"line":394},[1784,1788,1792,1796,1800,1804,1808,1812,1816,1820,1824,1828,1832,1836,1840,1845,1849,1853],{"type":45,"tag":313,"props":1785,"children":1786},{"style":320},[1787],{"type":50,"value":323},{"type":45,"tag":313,"props":1789,"children":1790},{"style":326},[1791],{"type":50,"value":329},{"type":45,"tag":313,"props":1793,"children":1794},{"style":332},[1795],{"type":50,"value":335},{"type":45,"tag":313,"props":1797,"children":1798},{"style":326},[1799],{"type":50,"value":340},{"type":45,"tag":313,"props":1801,"children":1802},{"style":343},[1803],{"type":50,"value":346},{"type":45,"tag":313,"props":1805,"children":1806},{"style":332},[1807],{"type":50,"value":351},{"type":45,"tag":313,"props":1809,"children":1810},{"style":326},[1811],{"type":50,"value":743},{"type":45,"tag":313,"props":1813,"children":1814},{"style":326},[1815],{"type":50,"value":748},{"type":45,"tag":313,"props":1817,"children":1818},{"style":326},[1819],{"type":50,"value":753},{"type":45,"tag":313,"props":1821,"children":1822},{"style":326},[1823],{"type":50,"value":758},{"type":45,"tag":313,"props":1825,"children":1826},{"style":332},[1827],{"type":50,"value":602},{"type":45,"tag":313,"props":1829,"children":1830},{"style":320},[1831],{"type":50,"value":767},{"type":45,"tag":313,"props":1833,"children":1834},{"style":326},[1835],{"type":50,"value":772},{"type":45,"tag":313,"props":1837,"children":1838},{"style":332},[1839],{"type":50,"value":612},{"type":45,"tag":313,"props":1841,"children":1842},{"style":326},[1843],{"type":50,"value":1844},"migration|phase|cert|error",{"type":45,"tag":313,"props":1846,"children":1847},{"style":332},[1848],{"type":50,"value":381},{"type":45,"tag":313,"props":1850,"children":1851},{"style":332},[1852],{"type":50,"value":491},{"type":45,"tag":313,"props":1854,"children":1855},{"style":494},[1856],{"type":50,"value":497},{"type":45,"tag":313,"props":1858,"children":1859},{"class":315,"line":437},[1860,1864,1868,1872,1876,1880,1884,1888,1892,1896,1900,1904,1908,1913],{"type":45,"tag":313,"props":1861,"children":1862},{"style":320},[1863],{"type":50,"value":323},{"type":45,"tag":313,"props":1865,"children":1866},{"style":326},[1867],{"type":50,"value":329},{"type":45,"tag":313,"props":1869,"children":1870},{"style":332},[1871],{"type":50,"value":335},{"type":45,"tag":313,"props":1873,"children":1874},{"style":326},[1875],{"type":50,"value":340},{"type":45,"tag":313,"props":1877,"children":1878},{"style":343},[1879],{"type":50,"value":346},{"type":45,"tag":313,"props":1881,"children":1882},{"style":332},[1883],{"type":50,"value":351},{"type":45,"tag":313,"props":1885,"children":1886},{"style":326},[1887],{"type":50,"value":356},{"type":45,"tag":313,"props":1889,"children":1890},{"style":326},[1891],{"type":50,"value":361},{"type":45,"tag":313,"props":1893,"children":1894},{"style":326},[1895],{"type":50,"value":366},{"type":45,"tag":313,"props":1897,"children":1898},{"style":326},[1899],{"type":50,"value":371},{"type":45,"tag":313,"props":1901,"children":1902},{"style":326},[1903],{"type":50,"value":376},{"type":45,"tag":313,"props":1905,"children":1906},{"style":332},[1907],{"type":50,"value":381},{"type":45,"tag":313,"props":1909,"children":1910},{"style":326},[1911],{"type":50,"value":1912},"{.spec.template.spec.containers[0].args}{\"\\n\"}",{"type":45,"tag":313,"props":1914,"children":1915},{"style":332},[1916],{"type":50,"value":391},{"type":45,"tag":53,"props":1918,"children":1919},{},[1920],{"type":50,"value":1921},"Check:",{"type":45,"tag":84,"props":1923,"children":1924},{},[1925,1930,1941,1946,1951],{"type":45,"tag":88,"props":1926,"children":1927},{},[1928],{"type":50,"value":1929},"The migration feature is enabled in operator args, if the deployed version uses a feature flag.",{"type":45,"tag":88,"props":1931,"children":1932},{},[1933,1935,1940],{"type":50,"value":1934},"The source StatefulSet still exists when phase is before ",{"type":45,"tag":59,"props":1936,"children":1938},{"className":1937},[],[1939],{"type":50,"value":116},{"type":50,"value":75},{"type":45,"tag":88,"props":1942,"children":1943},{},[1944],{"type":50,"value":1945},"The source StatefulSet spec has not been changed mid-migration.",{"type":45,"tag":88,"props":1947,"children":1948},{},[1949],{"type":50,"value":1950},"Certificate prerequisites are present and trusted.",{"type":45,"tag":88,"props":1952,"children":1953},{},[1954,1959],{"type":45,"tag":59,"props":1955,"children":1957},{"className":1956},[],[1958],{"type":50,"value":64},{"type":50,"value":1960}," objects are being created and observed.",{"type":45,"tag":1696,"props":1962,"children":1964},{"id":1963},"certmigration-issues",[1965],{"type":50,"value":1966},"CertMigration Issues",{"type":45,"tag":53,"props":1968,"children":1969},{},[1970,1972,1978],{"type":50,"value":1971},"Use ",{"type":45,"tag":68,"props":1973,"children":1975},{"href":1974},"..\u002F..\u002Fcockroachdb-operations-and-lifecycle\u002Fconfiguring-cockroachdb-helm-tls\u002FSKILL.md",[1976],{"type":50,"value":1977},"configuring-cockroachdb-helm-tls",{"type":50,"value":1979},". Confirm:",{"type":45,"tag":84,"props":1981,"children":1982},{},[1983,1988,1993,1998,2011],{"type":45,"tag":88,"props":1984,"children":1985},{},[1986],{"type":50,"value":1987},"CA ConfigMap or Secret exists.",{"type":45,"tag":88,"props":1989,"children":1990},{},[1991],{"type":50,"value":1992},"Node, HTTP, and root client certificate resources exist.",{"type":45,"tag":88,"props":1994,"children":1995},{},[1996],{"type":50,"value":1997},"Certificate expiry, issuer, subject, and SANs match generated pod DNS names.",{"type":45,"tag":88,"props":1999,"children":2000},{},[2001,2003,2009],{"type":50,"value":2002},"Cert-manager ",{"type":45,"tag":59,"props":2004,"children":2006},{"className":2005},[],[2007],{"type":50,"value":2008},"Certificate",{"type":50,"value":2010}," resources are Ready, when cert-manager is used.",{"type":45,"tag":88,"props":2012,"children":2013},{},[2014],{"type":50,"value":2015},"Secret keys are present without printing private key values.",{"type":45,"tag":1696,"props":2017,"children":2019},{"id":2018},"podmigration-issues",[2020],{"type":50,"value":2021},"PodMigration Issues",{"type":45,"tag":302,"props":2023,"children":2025},{"className":304,"code":2024,"language":306,"meta":307,"style":307},"kubectl -n \u003Ccockroachdb-namespace> get pods -l app.kubernetes.io\u002Fname=cockroachdb -o wide\nkubectl -n \u003Ccockroachdb-namespace> describe pods -l app.kubernetes.io\u002Fname=cockroachdb\nkubectl -n \u003Ccockroachdb-namespace> get crdbnodes -o custom-columns=NAME:.metadata.name,PHASE:.status.phase,NODE_ID:.status.nodeID,OBSERVED:.status.observedGeneration\nkubectl -n \u003Ccockroachdb-namespace> get pvc -o json | jq '.items[] | {name: .metadata.name, ownerReferences: .metadata.ownerReferences, storageClass: .spec.storageClassName, capacity: .status.capacity}'\n",[2026],{"type":45,"tag":59,"props":2027,"children":2028},{"__ignoreMap":307},[2029,2080,2125,2169],{"type":45,"tag":313,"props":2030,"children":2031},{"class":315,"line":316},[2032,2036,2040,2044,2048,2052,2056,2060,2064,2068,2072,2076],{"type":45,"tag":313,"props":2033,"children":2034},{"style":320},[2035],{"type":50,"value":323},{"type":45,"tag":313,"props":2037,"children":2038},{"style":326},[2039],{"type":50,"value":329},{"type":45,"tag":313,"props":2041,"children":2042},{"style":332},[2043],{"type":50,"value":335},{"type":45,"tag":313,"props":2045,"children":2046},{"style":326},[2047],{"type":50,"value":456},{"type":45,"tag":313,"props":2049,"children":2050},{"style":343},[2051],{"type":50,"value":346},{"type":45,"tag":313,"props":2053,"children":2054},{"style":332},[2055],{"type":50,"value":351},{"type":45,"tag":313,"props":2057,"children":2058},{"style":326},[2059],{"type":50,"value":356},{"type":45,"tag":313,"props":2061,"children":2062},{"style":326},[2063],{"type":50,"value":1124},{"type":45,"tag":313,"props":2065,"children":2066},{"style":326},[2067],{"type":50,"value":748},{"type":45,"tag":313,"props":2069,"children":2070},{"style":326},[2071],{"type":50,"value":1133},{"type":45,"tag":313,"props":2073,"children":2074},{"style":326},[2075],{"type":50,"value":371},{"type":45,"tag":313,"props":2077,"children":2078},{"style":326},[2079],{"type":50,"value":839},{"type":45,"tag":313,"props":2081,"children":2082},{"class":315,"line":394},[2083,2087,2091,2095,2099,2103,2107,2112,2116,2120],{"type":45,"tag":313,"props":2084,"children":2085},{"style":320},[2086],{"type":50,"value":323},{"type":45,"tag":313,"props":2088,"children":2089},{"style":326},[2090],{"type":50,"value":329},{"type":45,"tag":313,"props":2092,"children":2093},{"style":332},[2094],{"type":50,"value":335},{"type":45,"tag":313,"props":2096,"children":2097},{"style":326},[2098],{"type":50,"value":456},{"type":45,"tag":313,"props":2100,"children":2101},{"style":343},[2102],{"type":50,"value":346},{"type":45,"tag":313,"props":2104,"children":2105},{"style":332},[2106],{"type":50,"value":351},{"type":45,"tag":313,"props":2108,"children":2109},{"style":326},[2110],{"type":50,"value":2111}," describe",{"type":45,"tag":313,"props":2113,"children":2114},{"style":326},[2115],{"type":50,"value":1124},{"type":45,"tag":313,"props":2117,"children":2118},{"style":326},[2119],{"type":50,"value":748},{"type":45,"tag":313,"props":2121,"children":2122},{"style":326},[2123],{"type":50,"value":2124}," app.kubernetes.io\u002Fname=cockroachdb\n",{"type":45,"tag":313,"props":2126,"children":2127},{"class":315,"line":437},[2128,2132,2136,2140,2144,2148,2152,2156,2160,2164],{"type":45,"tag":313,"props":2129,"children":2130},{"style":320},[2131],{"type":50,"value":323},{"type":45,"tag":313,"props":2133,"children":2134},{"style":326},[2135],{"type":50,"value":329},{"type":45,"tag":313,"props":2137,"children":2138},{"style":332},[2139],{"type":50,"value":335},{"type":45,"tag":313,"props":2141,"children":2142},{"style":326},[2143],{"type":50,"value":456},{"type":45,"tag":313,"props":2145,"children":2146},{"style":343},[2147],{"type":50,"value":346},{"type":45,"tag":313,"props":2149,"children":2150},{"style":332},[2151],{"type":50,"value":351},{"type":45,"tag":313,"props":2153,"children":2154},{"style":326},[2155],{"type":50,"value":356},{"type":45,"tag":313,"props":2157,"children":2158},{"style":326},[2159],{"type":50,"value":830},{"type":45,"tag":313,"props":2161,"children":2162},{"style":326},[2163],{"type":50,"value":371},{"type":45,"tag":313,"props":2165,"children":2166},{"style":326},[2167],{"type":50,"value":2168}," custom-columns=NAME:.metadata.name,PHASE:.status.phase,NODE_ID:.status.nodeID,OBSERVED:.status.observedGeneration\n",{"type":45,"tag":313,"props":2170,"children":2171},{"class":315,"line":636},[2172,2176,2180,2184,2188,2192,2196,2200,2204,2208,2212,2216,2220,2224,2229],{"type":45,"tag":313,"props":2173,"children":2174},{"style":320},[2175],{"type":50,"value":323},{"type":45,"tag":313,"props":2177,"children":2178},{"style":326},[2179],{"type":50,"value":329},{"type":45,"tag":313,"props":2181,"children":2182},{"style":332},[2183],{"type":50,"value":335},{"type":45,"tag":313,"props":2185,"children":2186},{"style":326},[2187],{"type":50,"value":456},{"type":45,"tag":313,"props":2189,"children":2190},{"style":343},[2191],{"type":50,"value":346},{"type":45,"tag":313,"props":2193,"children":2194},{"style":332},[2195],{"type":50,"value":351},{"type":45,"tag":313,"props":2197,"children":2198},{"style":326},[2199],{"type":50,"value":356},{"type":45,"tag":313,"props":2201,"children":2202},{"style":326},[2203],{"type":50,"value":1209},{"type":45,"tag":313,"props":2205,"children":2206},{"style":326},[2207],{"type":50,"value":371},{"type":45,"tag":313,"props":2209,"children":2210},{"style":326},[2211],{"type":50,"value":597},{"type":45,"tag":313,"props":2213,"children":2214},{"style":332},[2215],{"type":50,"value":602},{"type":45,"tag":313,"props":2217,"children":2218},{"style":320},[2219],{"type":50,"value":607},{"type":45,"tag":313,"props":2221,"children":2222},{"style":332},[2223],{"type":50,"value":612},{"type":45,"tag":313,"props":2225,"children":2226},{"style":326},[2227],{"type":50,"value":2228},".items[] | {name: .metadata.name, ownerReferences: .metadata.ownerReferences, storageClass: .spec.storageClassName, capacity: .status.capacity}",{"type":45,"tag":313,"props":2230,"children":2231},{"style":332},[2232],{"type":50,"value":391},{"type":45,"tag":53,"props":2234,"children":2235},{},[2236],{"type":50,"value":1921},{"type":45,"tag":84,"props":2238,"children":2239},{},[2240,2250,2255],{"type":45,"tag":88,"props":2241,"children":2242},{},[2243,2248],{"type":45,"tag":59,"props":2244,"children":2246},{"className":2245},[],[2247],{"type":50,"value":64},{"type":50,"value":2249}," resources are created for expected pods.",{"type":45,"tag":88,"props":2251,"children":2252},{},[2253],{"type":50,"value":2254},"Pods and PVCs have expected ownership after the operator takes over.",{"type":45,"tag":88,"props":2256,"children":2257},{},[2258],{"type":50,"value":2259},"PVCs are not orphaned before deleting source resources.",{"type":45,"tag":1696,"props":2261,"children":2263},{"id":2262},"finalization-or-completion-stuck",[2264],{"type":50,"value":2265},"Finalization or Completion Stuck",{"type":45,"tag":53,"props":2267,"children":2268},{},[2269],{"type":50,"value":1921},{"type":45,"tag":84,"props":2271,"children":2272},{},[2273,2298,2310,2315,2326],{"type":45,"tag":88,"props":2274,"children":2275},{},[2276,2282,2284,2289,2291,2297],{"type":45,"tag":59,"props":2277,"children":2279},{"className":2278},[],[2280],{"type":50,"value":2281},"mode",{"type":50,"value":2283}," is ",{"type":45,"tag":59,"props":2285,"children":2287},{"className":2286},[],[2288],{"type":50,"value":1657},{"type":50,"value":2290},", not ",{"type":45,"tag":59,"props":2292,"children":2294},{"className":2293},[],[2295],{"type":50,"value":2296},"Disabled",{"type":50,"value":75},{"type":45,"tag":88,"props":2299,"children":2300},{},[2301,2303,2308],{"type":50,"value":2302},"migration label is ",{"type":45,"tag":59,"props":2304,"children":2306},{"className":2305},[],[2307],{"type":50,"value":116},{"type":50,"value":2309}," before deleting the source StatefulSet.",{"type":45,"tag":88,"props":2311,"children":2312},{},[2313],{"type":50,"value":2314},"source StatefulSet deletion happened only after finalization.",{"type":45,"tag":88,"props":2316,"children":2317},{},[2318,2320,2325],{"type":50,"value":2319},"migration label eventually becomes ",{"type":45,"tag":59,"props":2321,"children":2323},{"className":2322},[],[2324],{"type":50,"value":1688},{"type":50,"value":75},{"type":45,"tag":88,"props":2327,"children":2328},{},[2329],{"type":50,"value":2330},"operator logs show a final reconcile after the source StatefulSet delete event.",{"type":45,"tag":77,"props":2332,"children":2334},{"id":2333},"step-6-post-migration-operator-stall",[2335],{"type":50,"value":2336},"Step 6: Post-Migration Operator Stall",{"type":45,"tag":53,"props":2338,"children":2339},{},[2340],{"type":50,"value":2341},"If the operator stops reconciling after migration completes:",{"type":45,"tag":2343,"props":2344,"children":2345},"ol",{},[2346,2351,2368,2391],{"type":45,"tag":88,"props":2347,"children":2348},{},[2349],{"type":50,"value":2350},"Check the initialization condition. If missing on an already-initialized cluster, the operator may try to initialize and block.",{"type":45,"tag":88,"props":2352,"children":2353},{},[2354,2356,2361,2362,2367],{"type":50,"value":2355},"Verify ",{"type":45,"tag":59,"props":2357,"children":2359},{"className":2358},[],[2360],{"type":50,"value":2281},{"type":50,"value":2283},{"type":45,"tag":59,"props":2363,"children":2365},{"className":2364},[],[2366],{"type":50,"value":1657},{"type":50,"value":75},{"type":45,"tag":88,"props":2369,"children":2370},{},[2371,2373,2378,2379,2384,2385,2390],{"type":50,"value":2372},"Verify the migration label is ",{"type":45,"tag":59,"props":2374,"children":2376},{"className":2375},[],[2377],{"type":50,"value":1688},{"type":50,"value":2290},{"type":45,"tag":59,"props":2380,"children":2382},{"className":2381},[],[2383],{"type":50,"value":108},{"type":50,"value":110},{"type":45,"tag":59,"props":2386,"children":2388},{"className":2387},[],[2389],{"type":50,"value":116},{"type":50,"value":75},{"type":45,"tag":88,"props":2392,"children":2393},{},[2394,2395,2401],{"type":50,"value":1971},{"type":45,"tag":68,"props":2396,"children":2398},{"href":2397},"..\u002F..\u002Fcockroachdb-observability-and-diagnostics\u002Fcollecting-cockroachdb-operator-escalation-packet\u002FSKILL.md",[2399],{"type":50,"value":2400},"collecting-cockroachdb-operator-escalation-packet",{"type":50,"value":2402}," to collect pprof goroutine dump, metrics, and logs before restart.",{"type":45,"tag":77,"props":2404,"children":2406},{"id":2405},"output-format",[2407],{"type":50,"value":2408},"Output Format",{"type":45,"tag":53,"props":2410,"children":2411},{},[2412],{"type":50,"value":2413},"Return findings in this order:",{"type":45,"tag":2343,"props":2415,"children":2416},{},[2417,2422,2427,2438,2448,2453,2458],{"type":45,"tag":88,"props":2418,"children":2419},{},[2420],{"type":50,"value":2421},"Migration type and current phase",{"type":45,"tag":88,"props":2423,"children":2424},{},[2425],{"type":50,"value":2426},"Source workload state",{"type":45,"tag":88,"props":2428,"children":2429},{},[2430,2431,2436],{"type":50,"value":266},{"type":45,"tag":59,"props":2432,"children":2434},{"className":2433},[],[2435],{"type":50,"value":272},{"type":50,"value":2437}," mode, migration labels, and migration message",{"type":45,"tag":88,"props":2439,"children":2440},{},[2441,2446],{"type":45,"tag":59,"props":2442,"children":2444},{"className":2443},[],[2445],{"type":50,"value":64},{"type":50,"value":2447},", pod, and PVC ownership state",{"type":45,"tag":88,"props":2449,"children":2450},{},[2451],{"type":50,"value":2452},"Current blocker and likely cause",{"type":45,"tag":88,"props":2454,"children":2455},{},[2456],{"type":50,"value":2457},"Safe next action",{"type":45,"tag":88,"props":2459,"children":2460},{},[2461],{"type":50,"value":2462},"Whether escalation packet collection is required",{"type":45,"tag":77,"props":2464,"children":2466},{"id":2465},"references",[2467],{"type":50,"value":2468},"References",{"type":45,"tag":84,"props":2470,"children":2471},{},[2472,2479,2486,2493],{"type":45,"tag":88,"props":2473,"children":2474},{},[2475],{"type":45,"tag":68,"props":2476,"children":2477},{"href":70},[2478],{"type":50,"value":73},{"type":45,"tag":88,"props":2480,"children":2481},{},[2482],{"type":45,"tag":68,"props":2483,"children":2484},{"href":2397},[2485],{"type":50,"value":2400},{"type":45,"tag":88,"props":2487,"children":2488},{},[2489],{"type":45,"tag":68,"props":2490,"children":2491},{"href":511},[2492],{"type":50,"value":514},{"type":45,"tag":88,"props":2494,"children":2495},{},[2496],{"type":45,"tag":68,"props":2497,"children":2498},{"href":520},[2499],{"type":50,"value":523},{"type":45,"tag":2501,"props":2502,"children":2503},"style",{},[2504],{"type":50,"value":2505},"html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}",{"items":2507,"total":2657},[2508,2522,2537,2544,2554,2564,2577,2590,2605,2620,2631,2644],{"slug":2400,"name":2400,"fn":2509,"description":2510,"org":2511,"tags":2512,"stars":25,"repoUrl":26,"updatedAt":2521},"collect CockroachDB operator escalation packets","Collects a complete CockroachDB Operator escalation packet for TSC\u002FTSE or operator-team handoff, including Helm state, Kubernetes resources, logs, operation-specific evidence, pprof goroutine dumps, metrics, and a customer action timeline. Use when general diagnosis cannot resolve an operator-managed CockroachDB Helm issue or before restarting a stuck operator.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[2513,2514,2517,2518],{"name":13,"slug":14,"type":15},{"name":2515,"slug":2516,"type":15},"Incident Response","incident-response",{"name":20,"slug":21,"type":15},{"name":2519,"slug":2520,"type":15},"Monitoring","monitoring","2026-07-12T07:57:25.288146",{"slug":1977,"name":1977,"fn":2523,"description":2524,"org":2525,"tags":2526,"stars":25,"repoUrl":26,"updatedAt":2536},"configure TLS for CockroachDB Helm charts","Selects and validates TLS settings for CockroachDB Helm chart deployments, including self-signer, cert-manager, and external certificate modes. Use when a customer needs secure CockroachDB Helm values, certificate secret mapping, cert-manager integration, or TLS install troubleshooting before deploying the chart.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[2527,2530,2533],{"name":2528,"slug":2529,"type":15},"Deployment","deployment",{"name":2531,"slug":2532,"type":15},"Encryption","encryption",{"name":2534,"slug":2535,"type":15},"Security","security","2026-07-12T07:56:37.675396",{"slug":4,"name":4,"fn":5,"description":6,"org":2538,"tags":2539,"stars":25,"repoUrl":26,"updatedAt":27},{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[2540,2541,2542,2543],{"name":13,"slug":14,"type":15},{"name":23,"slug":24,"type":15},{"name":20,"slug":21,"type":15},{"name":17,"slug":18,"type":15},{"slug":73,"name":73,"fn":2545,"description":2546,"org":2547,"tags":2548,"stars":25,"repoUrl":26,"updatedAt":2553},"diagnose CockroachDB Helm chart deployments","Diagnoses failed or unhealthy CockroachDB Helm chart deployments by checking Helm release state, operator health, CrdbCluster and CrdbNode status, pod readiness, RBAC, webhooks, TLS, upgrades, scaling, PVCs, DNS, and multi-region assumptions. Use when Helm install or upgrade fails, pods are not Ready, or the operator is not reconciling.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[2549,2550,2551,2552],{"name":13,"slug":14,"type":15},{"name":23,"slug":24,"type":15},{"name":2528,"slug":2529,"type":15},{"name":20,"slug":21,"type":15},"2026-07-12T07:57:24.018818",{"slug":2555,"name":2555,"fn":2556,"description":2557,"org":2558,"tags":2559,"stars":25,"repoUrl":26,"updatedAt":2563},"installing-cockroachdb-with-helm","install CockroachDB using Helm","Guides customer-facing installation of CockroachDB on Kubernetes using the CockroachDB split Helm charts and operator-managed v1beta1 resources. Use when installing CockroachDB with Helm, choosing between published and local split charts, verifying a new install, or helping an agent complete first-time Kubernetes onboarding.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[2560,2561,2562],{"name":13,"slug":14,"type":15},{"name":2528,"slug":2529,"type":15},{"name":20,"slug":21,"type":15},"2026-07-12T07:56:45.777567",{"slug":2565,"name":2565,"fn":2566,"description":2567,"org":2568,"tags":2569,"stars":25,"repoUrl":26,"updatedAt":2576},"validating-cockroachdb-helm-multiregion","validate CockroachDB multi-region Helm deployments","Validates CockroachDB Helm chart values and Kubernetes prerequisites for operator-managed multi-region deployments. Use before adding a region, deploying CockroachDB across multiple Kubernetes clusters, checking region DNS domains, or confirming that all regions share certificate and networking assumptions.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[2570,2571,2572,2573],{"name":13,"slug":14,"type":15},{"name":2528,"slug":2529,"type":15},{"name":20,"slug":21,"type":15},{"name":2574,"slug":2575,"type":15},"Operations","operations","2026-07-12T07:56:47.082609",{"slug":2578,"name":2578,"fn":2579,"description":2580,"org":2581,"tags":2582,"stars":437,"repoUrl":2588,"updatedAt":2589},"analyzing-range-distribution","analyze CockroachDB range distribution and health","Analyzes CockroachDB range distribution across tables and indexes using SHOW RANGES to identify range count, size patterns, leaseholder placement, and replication health. Use when investigating hotspots, uneven data distribution, range fragmentation, or validating zone configuration effects without DB Console access.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[2583,2584,2585],{"name":13,"slug":14,"type":15},{"name":2519,"slug":2520,"type":15},{"name":2586,"slug":2587,"type":15},"Performance","performance","https:\u002F\u002Fgithub.com\u002Fcockroachdb\u002Fclaude-plugin","2026-07-12T07:57:18.753533",{"slug":2591,"name":2591,"fn":2592,"description":2593,"org":2594,"tags":2595,"stars":437,"repoUrl":2588,"updatedAt":2604},"analyzing-schema-change-storage-risk","analyze schema change storage requirements","Estimates storage requirements for CockroachDB online schema change backfills using SHOW RANGES WITH DETAILS, KEYS, INDEXES. Use before CREATE INDEX, ADD COLUMN with INDEX\u002FUNIQUE, ALTER PRIMARY KEY, CREATE MATERIALIZED VIEW, CREATE TABLE AS, REFRESH, or SET LOCALITY on tables with large per-index footprints, to avoid mid-backfill disk exhaustion.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[2596,2599,2600,2601],{"name":2597,"slug":2598,"type":15},"Data Modeling","data-modeling",{"name":13,"slug":14,"type":15},{"name":2586,"slug":2587,"type":15},{"name":2602,"slug":2603,"type":15},"SQL","sql","2026-07-12T07:57:22.763788",{"slug":2606,"name":2606,"fn":2607,"description":2608,"org":2609,"tags":2610,"stars":437,"repoUrl":2588,"updatedAt":2619},"auditing-cis-benchmark","audit CockroachDB clusters against CIS benchmarks","Audits a self-hosted CockroachDB cluster against the CIS CockroachDB Benchmark v1.0.0 Level 1 controls. Supports two audit depths — quick automated scans and full CIS audit procedures. Produces a structured PASS\u002FFAIL\u002FMANUAL report covering installation, system hardening, logging, user access, data protection, and CockroachDB settings. Use when preparing for CIS compliance assessments, hardening self-hosted deployments, or validating security posture against industry benchmarks.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[2611,2614,2617,2618],{"name":2612,"slug":2613,"type":15},"Audit","audit",{"name":2615,"slug":2616,"type":15},"Compliance","compliance",{"name":13,"slug":14,"type":15},{"name":2534,"slug":2535,"type":15},"2026-07-18T05:48:00.862384",{"slug":2621,"name":2621,"fn":2622,"description":2623,"org":2624,"tags":2625,"stars":437,"repoUrl":2588,"updatedAt":2630},"auditing-cloud-cluster-security","audit CockroachDB cluster security posture","Audits the security posture of a CockroachDB cluster (Cloud or self-hosted) across network, authentication, authorization, encryption, audit logging, and backup dimensions. Use when assessing cluster security readiness, preparing for compliance reviews, or investigating security configuration gaps.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[2626,2627,2628,2629],{"name":2612,"slug":2613,"type":15},{"name":13,"slug":14,"type":15},{"name":2574,"slug":2575,"type":15},{"name":2534,"slug":2535,"type":15},"2026-07-12T07:57:01.506735",{"slug":2632,"name":2632,"fn":2633,"description":2634,"org":2635,"tags":2636,"stars":437,"repoUrl":2588,"updatedAt":2643},"auditing-table-statistics","audit optimizer table statistics","Audits optimizer table statistics for staleness, missing coverage, and data quality issues using SHOW STATISTICS. Use when diagnosing poor query performance, unexpected plan changes, or after bulk data changes to identify stale statistics requiring refresh via CREATE STATISTICS.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[2637,2638,2641,2642],{"name":2612,"slug":2613,"type":15},{"name":2639,"slug":2640,"type":15},"Data Analysis","data-analysis",{"name":13,"slug":14,"type":15},{"name":2586,"slug":2587,"type":15},"2026-07-12T07:57:16.190081",{"slug":2645,"name":2645,"fn":2646,"description":2647,"org":2648,"tags":2649,"stars":437,"repoUrl":2588,"updatedAt":2656},"benchmarking-transaction-patterns","benchmark CockroachDB transaction patterns","Guides benchmarking and comparing explicit multi-statement transactions versus single-statement CTE transactions in CockroachDB, with fair test methodology, contention analysis, and performance interpretation. Use when comparing transaction formulations, benchmarking CockroachDB workloads under contention, investigating retry pressure, or deciding whether to rewrite multi-step application flows into single SQL statements.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[2650,2651,2654,2655],{"name":13,"slug":14,"type":15},{"name":2652,"slug":2653,"type":15},"Engineering","engineering",{"name":2586,"slug":2587,"type":15},{"name":2602,"slug":2603,"type":15},"2026-07-12T07:57:26.543278",40,{"items":2659,"total":654},[2660,2667,2673,2680,2687,2693],{"slug":2400,"name":2400,"fn":2509,"description":2510,"org":2661,"tags":2662,"stars":25,"repoUrl":26,"updatedAt":2521},{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[2663,2664,2665,2666],{"name":13,"slug":14,"type":15},{"name":2515,"slug":2516,"type":15},{"name":20,"slug":21,"type":15},{"name":2519,"slug":2520,"type":15},{"slug":1977,"name":1977,"fn":2523,"description":2524,"org":2668,"tags":2669,"stars":25,"repoUrl":26,"updatedAt":2536},{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[2670,2671,2672],{"name":2528,"slug":2529,"type":15},{"name":2531,"slug":2532,"type":15},{"name":2534,"slug":2535,"type":15},{"slug":4,"name":4,"fn":5,"description":6,"org":2674,"tags":2675,"stars":25,"repoUrl":26,"updatedAt":27},{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[2676,2677,2678,2679],{"name":13,"slug":14,"type":15},{"name":23,"slug":24,"type":15},{"name":20,"slug":21,"type":15},{"name":17,"slug":18,"type":15},{"slug":73,"name":73,"fn":2545,"description":2546,"org":2681,"tags":2682,"stars":25,"repoUrl":26,"updatedAt":2553},{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[2683,2684,2685,2686],{"name":13,"slug":14,"type":15},{"name":23,"slug":24,"type":15},{"name":2528,"slug":2529,"type":15},{"name":20,"slug":21,"type":15},{"slug":2555,"name":2555,"fn":2556,"description":2557,"org":2688,"tags":2689,"stars":25,"repoUrl":26,"updatedAt":2563},{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[2690,2691,2692],{"name":13,"slug":14,"type":15},{"name":2528,"slug":2529,"type":15},{"name":20,"slug":21,"type":15},{"slug":2565,"name":2565,"fn":2566,"description":2567,"org":2694,"tags":2695,"stars":25,"repoUrl":26,"updatedAt":2576},{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[2696,2697,2698,2699],{"name":13,"slug":14,"type":15},{"name":2528,"slug":2529,"type":15},{"name":20,"slug":21,"type":15},{"name":2574,"slug":2575,"type":15}]