Add mssql-server migration doc - #1030
Conversation
📝 WalkthroughWalkthroughAdds MSSQL Server migration concepts, examples, and an end-to-end guide. Adds database migration guides for MariaDB, MongoDB, MySQL, and PostgreSQL. Adds StorageClass migration guides for MySQL, PostgreSQL, Neo4j, and Qdrant. Corrects migration documentation links. ChangesMSSQL Server migration
Database migration guides
StorageClass migration guides
Estimated code review effort: 3 (Moderate) | ~25 minutes Possibly related PRs
Suggested reviewers: Sequence Diagram(s)sequenceDiagram
participant SourceMSSQLServer
participant MSSQLServerMigration
participant TargetMSSQLServer
SourceMSSQLServer->>MSSQLServerMigration: Provide schema and source changes
MSSQLServerMigration->>TargetMSSQLServer: Apply schema and snapshot
SourceMSSQLServer->>MSSQLServerMigration: Emit CDC events
MSSQLServerMigration->>TargetMSSQLServer: Apply CDC events
🚥 Pre-merge checks | ✅ 5✅ Passed checks (5 passed)
✨ Finishing Touches🧪 Generate unit tests (beta)
Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out. Comment |
There was a problem hiding this comment.
Actionable comments posted: 1
🧹 Nitpick comments (2)
docs/guides/mssqlserver/migration/databaseMigration.md (2)
110-116: 📐 Maintainability & Code Quality | 🔵 Trivial | 💤 Low valueAdd language specifiers to fenced output blocks.
Three fenced code blocks showing expected output (lines 110, 381, 426) lack a language specifier, triggering MD040. Adding
textas the language improves lint compliance and syntax highlighting consistency.✏️ Proposed fix (line 110 example)
-``` +```text CustomerID Name Email City CreatedAt ----------- ------ ------------------ -------- -----------------------Also applies to: 381-387, 426-432
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the rest with a brief reason, keep changes minimal, and validate. In `@docs/guides/mssqlserver/migration/databaseMigration.md` around lines 110 - 116, Add the text language specifier to the three fenced code blocks showing expected output, including the blocks near the CustomerID table and the sections referenced around lines 381 and 426. Update each opening fence from ``` to ```text while leaving the output contents unchanged.
324-326: 📐 Maintainability & Code Quality | 🔵 Trivial | 💤 Low valueClarify the
watchcommand presentation.Line 325 shows
Every 2.0s: kubectl get mssqlservermigrations -n demoinside abashcode block, which reads as a command to run. This is actually the header line fromwatchoutput. Consider either showing the actual command (watch kubectl get mssqlservermigrations -n demo) or separating the command from its output.✏️ Proposed fix
```bash -$ Every 2.0s: kubectl get mssqlservermigrations -n demo +$ watch kubectl get mssqlservermigrations -n demo🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the rest with a brief reason, keep changes minimal, and validate. In `@docs/guides/mssqlserver/migration/databaseMigration.md` around lines 324 - 326, Clarify the watch example by replacing the displayed output header with the executable command `watch kubectl get mssqlservermigrations -n demo` in the relevant migration guide code block, or separate the command from its sample output.
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
Inline comments:
In `@docs/guides/mssqlserver/migration/databaseMigration.md`:
- Around line 374-377: Update the sqlcmd executable path in the database
migration example to /opt/mssql-tools18/bin/sqlcmd, keeping the existing kubectl
command and arguments unchanged.
---
Nitpick comments:
In `@docs/guides/mssqlserver/migration/databaseMigration.md`:
- Around line 110-116: Add the text language specifier to the three fenced code
blocks showing expected output, including the blocks near the CustomerID table
and the sections referenced around lines 381 and 426. Update each opening fence
from ``` to ```text while leaving the output contents unchanged.
- Around line 324-326: Clarify the watch example by replacing the displayed
output header with the executable command `watch kubectl get
mssqlservermigrations -n demo` in the relevant migration guide code block, or
separate the command from its sample output.
🪄 Autofix (Beta)
Fix all unresolved CodeRabbit comments on this PR:
- Push a commit to this branch (recommended)
- Create a new PR with the fixes
ℹ️ Review info
⚙️ Run configuration
Configuration used: defaults
Review profile: CHILL
Plan: Pro Plus
Run ID: 2a93c205-3229-46bd-9e82-2aff720c4add
📒 Files selected for processing (7)
docs/examples/mssqlserver/migration/mssqlserver-migration.yamldocs/examples/mssqlserver/migration/source-issuer.yamldocs/examples/mssqlserver/migration/target-mssqlserver.yamldocs/guides/mssqlserver/concepts/migrator.mddocs/guides/mssqlserver/migration/_index.mddocs/guides/mssqlserver/migration/databaseMigration.mddocs/operatormanual/migration/README.md
There was a problem hiding this comment.
Actionable comments posted: 2
Caution
Some comments are outside the diff and can’t be posted inline due to platform limitations.
⚠️ Outside diff range comments (1)
docs/guides/mssqlserver/migration/databaseMigration.md (1)
110-116: 🎯 Functional Correctness | 🟡 Minor | ⚡ Quick winMark the timestamps as illustrative.
The data is generated with
GETDATE(), so fixed2026-07-10timestamps will not match most executions and may make valid migration output appear incorrect. Use placeholder timestamps or explicitly label them as illustrative.🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the rest with a brief reason, keep changes minimal, and validate. In `@docs/guides/mssqlserver/migration/databaseMigration.md` around lines 110 - 116, Mark the fixed CreatedAt timestamps in the example output as illustrative, or replace them with placeholder values, since the migration uses GETDATE() and actual execution times will differ.
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
Inline comments:
In `@docs/guides/mssqlserver/migration/databaseMigration.md`:
- Line 325: Remove the `$` prompt marker from the `watch kubectl get
mssqlservermigrations -n demo` example, or add representative command output
beneath it so the prompt is justified and markdownlint MD014 passes.
- Around line 375-376: Update the database migration documentation’s sqlcmd
examples to avoid inline or echoed SA passwords: use an interactive prompt or
another non-logged secret-injection method, and remove any commands that print
the decoded secret. Apply this consistently to the Customer query and the
related kubectl secret/sqlcmd examples.
---
Outside diff comments:
In `@docs/guides/mssqlserver/migration/databaseMigration.md`:
- Around line 110-116: Mark the fixed CreatedAt timestamps in the example output
as illustrative, or replace them with placeholder values, since the migration
uses GETDATE() and actual execution times will differ.
🪄 Autofix (Beta)
Fix all unresolved CodeRabbit comments on this PR:
- Push a commit to this branch (recommended)
- Create a new PR with the fixes
ℹ️ Review info
⚙️ Run configuration
Configuration used: defaults
Review profile: CHILL
Plan: Pro Plus
Run ID: 7971680a-1909-48c4-978b-0a436550036b
📒 Files selected for processing (1)
docs/guides/mssqlserver/migration/databaseMigration.md
|
Visit the preview URL for this PR (updated for commit 4cc6a4e): https://kubedb-v2-hugo--pr1030-mssqlserver-migratio-6ecdi32p.web.app (expires Fri, 07 Aug 2026 19:52:16 GMT) 🔥 via Firebase Hosting GitHub Action 🌎 Sign: 0f29ae8ae0bd54a99bf2b223b6833be47acd5943 |
Signed-off-by: Pulok Saha <puloksaha@appscode.com>
Signed-off-by: Pulok Saha <puloksaha@appscode.com>
eefd758 to
9d4f1c1
Compare
There was a problem hiding this comment.
Actionable comments posted: 5
🧹 Nitpick comments (5)
docs/guides/mssqlserver/concepts/migrator.md (3)
102-103: 🔒 Security & Privacy | 🔵 Trivial | ⚡ Quick winAdd a production warning for
insecureSkipVerify.This option disables server certificate and hostname verification. State that it is for testing only and recommend CA-based certificate validation for production connections.
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the rest with a brief reason, keep changes minimal, and validate. In `@docs/guides/mssqlserver/concepts/migrator.md` around lines 102 - 103, Update the insecureSkipVerify documentation entry to warn that it is intended for testing only and must not be used for production connections. Recommend CA-based certificate validation for production while preserving the existing description of disabled certificate and hostname verification.
85-103: 📐 Maintainability & Code Quality | 🔵 Trivial | ⚡ Quick winComplete the direct connection configuration.
Line 87 says that direct connection parameters are supported. Lines 95-103 do not show the endpoint, credentials, or a complete direct-connection example. Add the supported fields and an example, or remove this alternative from the description.
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the rest with a brief reason, keep changes minimal, and validate. In `@docs/guides/mssqlserver/concepts/migrator.md` around lines 85 - 103, The connectionInfo documentation claims direct connection parameters are supported but only lists AppBinding fields and TLS options. Update the connectionInfo section to document all supported direct-connection fields, including endpoint and credentials, and add a complete direct-connection example; otherwise remove the direct-parameters alternative from the opening description.
13-13: 📐 Maintainability & Code Quality | 🔵 Trivial | ⚡ Quick winUse descriptive link text throughout the migration documentation.
docs/guides/mssqlserver/concepts/migrator.md#L13-L13: replaceherewithKubeDB introduction.docs/guides/mssqlserver/concepts/migrator.md#L187-L187: replaceherewithMSSQLServer CRD reference.docs/guides/mssqlserver/migration/databaseMigration.md#L13-L13: replaceherewithKubeDB introduction.docs/guides/mssqlserver/migration/databaseMigration.md#L23-L23: replaceherewithmigration installation guide.🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the rest with a brief reason, keep changes minimal, and validate. In `@docs/guides/mssqlserver/concepts/migrator.md` at line 13, Replace the generic “here” link text with descriptive labels at all specified sites: use “KubeDB introduction” in docs/guides/mssqlserver/concepts/migrator.md lines 13-13 and docs/guides/mssqlserver/migration/databaseMigration.md lines 13-13, “MSSQLServer CRD reference” in docs/guides/mssqlserver/concepts/migrator.md lines 187-187, and “migration installation guide” in docs/guides/mssqlserver/migration/databaseMigration.md lines 23-23; preserve each link destination.Source: Linters/SAST tools
docs/guides/mssqlserver/migration/databaseMigration.md (2)
235-235: 🗄️ Data Integrity & Integration | 🔵 Trivial | 🏗️ Heavy liftAvoid
WipeOutfor the migration target.Deleting the target
MSSQLServercan erase the migrated storage. Use a non-destructive deletion policy for the main migration example, or label this manifest as disposable demo-only and add an explicit data-loss warning. Verify the supported safe policy name before changing it.🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the rest with a brief reason, keep changes minimal, and validate. In `@docs/guides/mssqlserver/migration/databaseMigration.md` at line 235, Update the migration manifest’s deletionPolicy from WipeOut to the verified supported non-destructive policy for the target MSSQLServer, preserving the main example without enabling data loss.
224-227: 🔒 Security & Privacy | 🔵 Trivial | ⚡ Quick winMark
Developeredition as non-production.The guide demonstrates live CDC, cutover, and application connection changes, but the target uses
MSSQL_PID: Developer. Microsoft licenses Developer edition only for development, testing, and demonstration. Mark this manifest as demo-only and instruct production users to select a licensed edition. (microsoft.com)🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the rest with a brief reason, keep changes minimal, and validate. In `@docs/guides/mssqlserver/migration/databaseMigration.md` around lines 224 - 227, Update the database migration guide around the MSSQL_PID manifest setting to clearly label the Developer edition deployment as demo-only, and instruct production users to replace it with an appropriately licensed SQL Server edition. Preserve the existing example configuration while adding this licensing guidance.
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
Inline comments:
In `@docs/guides/mssqlserver/concepts/migrator.md`:
- Around line 133-136: Update the autoEnableCDC option documentation to describe
provider-specific CDC setup: AWS RDS uses msdb.dbo.rds_cdc_enable_db with
db_owner permission, while Azure SQL Managed Instance uses sys.sp_cdc_enable_db
and requires CDC namespace/user access. Clarify that operators must use the
appropriate procedure, or set autoEnableCDC to false when configuring CDC
manually.
In `@docs/guides/mssqlserver/migration/databaseMigration.md`:
- Around line 74-75: Remove the leading “$” prompt markers from the referenced
sqlcmd command examples, including the occurrences near the shown command and
the additional locations noted in the review. Keep the commands unchanged
otherwise so the fenced blocks contain commands without unexplained prompt
prefixes.
- Around line 74-75: Update the SQL Server migration command examples in
databaseMigration.md to remove explicit -C certificate-trust bypasses. Use the
documented ssl:ca-secret AppBinding configuration or
trustServerCertificate=false/-N strict SQLClient settings for RDS checks, and
apply strict certificate validation to the mssql-tools18 target checks.
- Around line 172-179: Update the certificate generation commands around the
self-signed mssqlserver-ca certificate to create it with CA extensions,
including basicConstraints=CA:TRUE and certificate-signing key usage, before
creating the Kubernetes TLS secret consumed by the cert-manager CA Issuer.
- Around line 27-28: Update the MSSQL migration guide to replace hard-coded sa
references with the provider-specific <source-login> and associated source
secret, connection commands, and prerequisites. Document AWS RDS master-login
requirements and RDS-specific CDC enablement, and Azure SQL Managed Instance
administrator-login requirements; revise autoEnableCDC instructions to match
each provider’s setup.
---
Nitpick comments:
In `@docs/guides/mssqlserver/concepts/migrator.md`:
- Around line 102-103: Update the insecureSkipVerify documentation entry to warn
that it is intended for testing only and must not be used for production
connections. Recommend CA-based certificate validation for production while
preserving the existing description of disabled certificate and hostname
verification.
- Around line 85-103: The connectionInfo documentation claims direct connection
parameters are supported but only lists AppBinding fields and TLS options.
Update the connectionInfo section to document all supported direct-connection
fields, including endpoint and credentials, and add a complete direct-connection
example; otherwise remove the direct-parameters alternative from the opening
description.
- Line 13: Replace the generic “here” link text with descriptive labels at all
specified sites: use “KubeDB introduction” in
docs/guides/mssqlserver/concepts/migrator.md lines 13-13 and
docs/guides/mssqlserver/migration/databaseMigration.md lines 13-13, “MSSQLServer
CRD reference” in docs/guides/mssqlserver/concepts/migrator.md lines 187-187,
and “migration installation guide” in
docs/guides/mssqlserver/migration/databaseMigration.md lines 23-23; preserve
each link destination.
In `@docs/guides/mssqlserver/migration/databaseMigration.md`:
- Line 235: Update the migration manifest’s deletionPolicy from WipeOut to the
verified supported non-destructive policy for the target MSSQLServer, preserving
the main example without enabling data loss.
- Around line 224-227: Update the database migration guide around the MSSQL_PID
manifest setting to clearly label the Developer edition deployment as demo-only,
and instruct production users to replace it with an appropriately licensed SQL
Server edition. Preserve the existing example configuration while adding this
licensing guidance.
🪄 Autofix (Beta)
Fix all unresolved CodeRabbit comments on this PR:
- Push a commit to this branch (recommended)
- Create a new PR with the fixes
ℹ️ Review info
⚙️ Run configuration
Configuration used: defaults
Review profile: CHILL
Plan: Pro Plus
Run ID: d354bcb5-a443-4a76-855b-14ea135b59eb
📒 Files selected for processing (6)
docs/examples/mssqlserver/migration/mssqlserver-migration.yamldocs/examples/mssqlserver/migration/source-issuer.yamldocs/examples/mssqlserver/migration/target-mssqlserver.yamldocs/guides/mssqlserver/concepts/migrator.mddocs/guides/mssqlserver/migration/_index.mddocs/guides/mssqlserver/migration/databaseMigration.md
🚧 Files skipped from review as they are similar to previous changes (4)
- docs/examples/mssqlserver/migration/mssqlserver-migration.yaml
- docs/examples/mssqlserver/migration/target-mssqlserver.yaml
- docs/examples/mssqlserver/migration/source-issuer.yaml
- docs/guides/mssqlserver/migration/_index.md
Renamed these migration guide files to lowercase and updated every link that referenced them, since case-sensitive filesystems on the build host don't resolve the mixed-case names the same way local macOS development does. Signed-off-by: Tamal Saha <tamal@appscode.com>
Fixes from CodeRabbit review on #1030: - Correct migrator.md connectionInfo/schema/streaming field docs to match the actual MSSQLServerConnectionInfo/MSSQLServerSchema/MSSQLServerStreaming CRD structs (courier v1alpha1) instead of the non-existent url/tls.caFile fields and excludeDatabase field that were previously documented. - Document that autoEnableCDC uses sys.sp_cdc_enable_db/sp_cdc_enable_table, which AWS RDS doesn't support; RDS sources need msdb.dbo.rds_cdc_enable_db and autoEnableCDC: false instead (verified against migrator source). - Replace hard-coded sa references in the RDS walkthrough with <source-login>, since RDS doesn't create a default sa login and the master user isn't a sysadmin. - Avoid printing/inlining the target sa password: capture it into a shell variable instead of echoing the decoded secret and pasting it as a literal -P argument. - Add CA extensions (basicConstraints, keyCertSign) to the self-signed CA generation command so it's usable as a cert-manager CA Issuer. - Remove unexplained $ prompt markers on commands without shown output. - Note MSSQL_PID: Developer is for testing only. - Mark example timestamps as illustrative (GETDATE()-based). Signed-off-by: Tamal Saha <tamal@appscode.com>
There was a problem hiding this comment.
Note
Due to the large number of review comments, Critical severity comments were prioritized as inline comments.
🟠 Major comments (27)
docs/guides/mssqlserver/migration/databasemigration.md-75-78 (1)
75-78: 🔒 Security & Privacy | 🟠 Major | ⚡ Quick winDo not pass database passwords in command-line arguments.
sqlcmd -P ...and--from-literal=password=<password>expose plaintext passwords after user substitution. Use a masked prompt,SQLCMDPASSWORD, or other secret delivery that keeps credentials out of shell history and process arguments for lines 75, 126-129, 377-381, 386-406, and 429-430.🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the rest with a brief reason, keep changes minimal, and validate. In `@docs/guides/mssqlserver/migration/databasemigration.md` around lines 75 - 78, Update all documented sqlcmd examples and secret creation commands at the referenced sections to avoid plaintext passwords in command-line arguments. Replace `-P` and `--from-literal=password=...` usage with masked prompts, `SQLCMDPASSWORD`, or another supported secret-delivery mechanism that keeps credentials out of shell history and process arguments, while preserving the examples’ intended behavior.docs/guides/mssqlserver/migration/databasemigration.md-55-55 (1)
55-55: 🗄️ Data Integrity & Integration | 🟠 Major | ⚡ Quick winAdd an RDS-specific migration manifest with CDC pre-enabled.
The AWS RDS SQL Server section requires enabling CDC with
EXEC msdb.dbo.rds_cdc_enable_dbbefore mutation and settingspec.source.streaming.autoEnableCDC: false. The provided migration manifest still usesautoEnableCDC: true, so copying it for RDS follows the wrong CDC setup path. Include an RDS manifest with CDC already enabled andautoEnableCDC: false, or label the existing manifest as non-RDS.🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the rest with a brief reason, keep changes minimal, and validate. In `@docs/guides/mssqlserver/migration/databasemigration.md` at line 55, Update the MSSQL Server migration documentation to distinguish AWS RDS from non-RDS usage: add an RDS-specific migration manifest with CDC pre-enabled and spec.source.streaming.autoEnableCDC set to false, or clearly label the existing manifest as non-RDS while providing the required RDS configuration.docs/guides/postgres/migration/storagemigration.md-131-148 (1)
131-148: 🗄️ Data Integrity & Integration | 🟠 Major | ⚡ Quick winAlign the referenced migration manifest with the documented StorageClass.
The guide documents
standard-customat Line [132] and verifies that value later. However,docs/examples/postgres/migration/storage-migration.yaml, which the command at Line [148] applies, setsspec.migration.storageClassNametolonghorn-customat Line [11]. The shown cluster does not providelonghorn-custom, so the migration can fail or produce output that does not match this guide.Update the canonical manifest to
standard-custom, or change the guide and all expected output to uselonghorn-custom.Suggested alignment
- storageClassName: longhorn-custom + storageClassName: standard-custom🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the rest with a brief reason, keep changes minimal, and validate. In `@docs/guides/postgres/migration/storagemigration.md` around lines 131 - 148, Align the canonical storage migration manifest referenced by the kubectl command with the guide’s documented value by setting spec.migration.storageClassName in storage-migration.yaml to standard-custom, and ensure the guide’s verification and expected output remain consistent with that value.docs/guides/neo4j/migration/storagemigration.md-134-149 (1)
134-149: 🗄️ Data Integrity & Integration | 🟠 Major | ⚡ Quick winPreserve the source PV during the walkthrough.
oldPVReclaimPolicy: Deleteremoves the old PV after migration. This removes the rollback path before users finish validation. UseRetainin the example, or clearly warn thatDeleteis destructive and should be used only after validation.🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the rest with a brief reason, keep changes minimal, and validate. In `@docs/guides/neo4j/migration/storagemigration.md` around lines 134 - 149, Update the migration walkthrough example’s spec.migration.oldPVReclaimPolicy value to Retain so the source PV remains available for rollback and validation.docs/guides/neo4j/migration/storagemigration.md-173-183 (1)
173-183: 🗄️ Data Integrity & Integration | 🟠 Major | ⚡ Quick winDo not equate a matching node count with intact data.
The post-migration check only returns
count(u). A migration can alter records while preserving the count, so line 183 overstates what this check proves. Capture a pre-migration baseline and compare deterministic records, such asidandnamefor users 1, 1000, and 2000, after migration.🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the rest with a brief reason, keep changes minimal, and validate. In `@docs/guides/neo4j/migration/storagemigration.md` around lines 173 - 183, Replace the count-only validation around the StorageMigration verification with a pre-migration baseline and post-migration comparison of deterministic User records, including id and name for users 1, 1000, and 2000. Update the concluding statement to claim only that those sampled records match, rather than asserting all data remains intact.docs/guides/mysql/migration/storagemigration.md-43-48 (1)
43-48: 🗄️ Data Integrity & Integration | 🟠 Major | ⚡ Quick winSynchronize the target StorageClass across the guide and example manifest.
This guide uses
standard-custom, butdocs/examples/mysql/migration/storage-migration.yamluseslonghorn-custom. Line 208 applies the external manifest, andlonghorn-customis absent from the listed StorageClasses. The command can therefore fail or migrate to a different StorageClass than documented.Also applies to: 192-193, 208-208
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the rest with a brief reason, keep changes minimal, and validate. In `@docs/guides/mysql/migration/storagemigration.md` around lines 43 - 48, Synchronize the MySQL storage migration documentation and example manifest on one valid StorageClass: replace the inconsistent longhorn-custom references in the manifest application and related instructions with the documented standard-custom value, while preserving the existing migration workflow.docs/guides/mysql/migration/storagemigration.md-108-109 (1)
108-109: 🔒 Security & Privacy | 🟠 Major | ⚡ Quick winDo not pass the root password through the command line.
mysql -uroot -p$MYSQL_ROOT_PASSWORDexpands into a process argument, so shell-special characters in the password can change the command and the password appears in process inspection. Usemysql -uroot -pwith interactive input or a supported Secret-file method in both examples at lines 108 and 240.🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the rest with a brief reason, keep changes minimal, and validate. In `@docs/guides/mysql/migration/storagemigration.md` around lines 108 - 109, Update both MySQL login examples in the migration guide to avoid expanding MYSQL_ROOT_PASSWORD as a command-line argument; use mysql -uroot -p with interactive password input or the supported Secret-file method, preserving the existing connection behavior.docs/guides/mongodb/migration/databasemigration.md-320-325 (1)
320-325: 🗄️ Data Integrity & Integration | 🟠 Major | ⚡ Quick winDo not call nonzero lag fully synchronized.
A near-zero but nonzero lag still represents unapplied oplog events. Change this text to
nearly in sync. Reserve cutover readiness for verified zero lag after source writes stop.🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the rest with a brief reason, keep changes minimal, and validate. In `@docs/guides/mongodb/migration/databasemigration.md` around lines 320 - 325, Update the migration guide text around the LAG example to describe near-zero lag as “nearly in sync,” not fully synchronized. Clarify that cutover readiness requires verified zero lag after source writes have stopped.docs/guides/mongodb/migration/databasemigration.md-112-126 (1)
112-126: 🎯 Functional Correctness | 🟠 Major | ⚡ Quick winKeep source-user creation source-specific.
This section creates
migratora second time. The guide already creates this user for self-hosted MongoDB and instructs Atlas and DigitalOcean users to create it through their dashboards. Following both sections can cause a duplicate-user error or use the wrong managed-service workflow. Keep one creation step and reference that user later.🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the rest with a brief reason, keep changes minimal, and validate. In `@docs/guides/mongodb/migration/databasemigration.md` around lines 112 - 126, Remove the duplicate migrator creation from the dedicated migration user section, retaining the existing source-specific instructions for self-hosted MongoDB, Atlas, and DigitalOcean. Update this section to reference the already-created migrator user and preserve only the minimum-privilege guidance without introducing another creation workflow.docs/guides/mongodb/migration/databasemigration.md-175-179 (1)
175-179: 🎯 Functional Correctness | 🟠 Major | ⚡ Quick winMake credential commands executable and define the target password.
--from-literal=password=<password>and-p<root-password>are not shell-safe placeholders. The<and>characters are parsed as redirection operators. The target password is also never defined. Use quoted variable expansions and document how to obtain the generated KubeDB credential.Also applies to: 352-352
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the rest with a brief reason, keep changes minimal, and validate. In `@docs/guides/mongodb/migration/databasemigration.md` around lines 175 - 179, Update the MongoDB migration credential commands to use quoted shell variable expansions instead of angle-bracket placeholders, define the target password variable, and document how to retrieve the generated KubeDB credential before using it in the commands. Apply the same correction to the related root-password command.docs/guides/mongodb/migration/databasemigration.md-412-416 (1)
412-416: 🗄️ Data Integrity & Integration | 🟠 Major | ⚡ Quick winConnect to the target before querying it.
The
mongoshsession opened earlier connects to the source.use shoponly changes the database in that same session. This block therefore reads source state instead of target state. Add a targetmongoshorkubectl execconnection before the query.🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the rest with a brief reason, keep changes minimal, and validate. In `@docs/guides/mongodb/migration/databasemigration.md` around lines 412 - 416, Update the target verification block in the MongoDB migration guide to establish a new connection to the target before running `use shop` and querying `db.orders`. Add the appropriate target mongosh or kubectl exec command, while preserving the existing query and source-session steps.docs/guides/mongodb/migration/databasemigration.md-391-409 (1)
391-409: 🎯 Functional Correctness | 🟠 Major | ⚡ Quick winUse a write-capable test identity for CDC validation.
The
migratoruser has onlyreadAnyDatabaseandclusterMonitorroles. The laterinsertOne,updateOne, anddeleteOneoperations will be rejected. Keepmigratorread-only and create a separate test user withreadWriteaccess limited toshop.🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the rest with a brief reason, keep changes minimal, and validate. In `@docs/guides/mongodb/migration/databasemigration.md` around lines 391 - 409, Update the MongoDB CDC validation instructions around the mongosh connection and CRUD examples to keep the read-only migrator identity unchanged, then create and use a separate test user with readWrite access scoped to the shop database for insertOne, updateOne, and deleteOne. Ensure the connection example authenticates the write operations with that test identity.docs/guides/mariadb/migration/databasemigration.md-69-71 (1)
69-71: 🎯 Functional Correctness | 🟠 Major | 🏗️ Heavy liftRemove or replace the Azure Database for MariaDB section.
Microsoft retired Azure Database for MariaDB on September 19, 2025. This guide is not actionable on July 31, 2026. Replace this section with a supported Azure service and current prerequisites, or remove Azure from the source list. (learn.microsoft.com)
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the rest with a brief reason, keep changes minimal, and validate. In `@docs/guides/mariadb/migration/databasemigration.md` around lines 69 - 71, Remove the Azure Database for MariaDB section, including its configuration and privilege instructions, or replace it with a currently supported Azure database service and verified migration prerequisites; do not leave retired-service guidance in the source list.docs/guides/mariadb/migration/databasemigration.md-118-120 (1)
118-120: 🎯 Functional Correctness | 🟠 Major | ⚡ Quick winUse a separate writer for CDC validation.
Line 119 grants no
INSERT,UPDATE, orDELETEprivileges. Later, Line 328 connects asmigrator, and Lines 333-340 execute those statements. The validation procedure will fail with permission errors. Keepmigratorread/replication-only and create a separate short-lived test account with DML access toshop.orders.🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the rest with a brief reason, keep changes minimal, and validate. In `@docs/guides/mariadb/migration/databasemigration.md` around lines 118 - 120, Update the migration documentation around the migrator GRANT and CDC validation procedure so migrator remains read/replication-only, while a separate short-lived test account receives INSERT, UPDATE, and DELETE privileges limited to shop.orders. Use that writer account for the DML statements executed by the validation procedure instead of migrator.docs/guides/mariadb/migration/databasemigration.md-65-67 (1)
65-67: 🩺 Stability & Availability | 🟠 Major | 🏗️ Heavy liftDocument AWS RDS binlog retention.
The guide enables binary logging but does not configure retention for the snapshot and CDC window. Amazon RDS normally purges MariaDB binary logs as soon as possible. A long snapshot or CDC lag can therefore remove events before the migration reads them. Add a retention setting and monitoring step for the migration period. (docs.aws.amazon.com)
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the rest with a brief reason, keep changes minimal, and validate. In `@docs/guides/mariadb/migration/databasemigration.md` around lines 65 - 67, Update the AWS RDS MariaDB section to configure binary log retention for the migration and CDC window, using the appropriate RDS retention setting. Add a step to monitor retained binary logs during migration so snapshot or CDC lag does not cause required events to be purged.docs/guides/mariadb/migration/databasemigration.md-110-120 (1)
110-120: 🔒 Security & Privacy | 🟠 Major | ⚡ Quick winNarrow migration credentials and privileges.
The guide scopes the migration to
spec.schema.database: [shop], but the setup example creates'migrator'@'%'and grantsSELECT,SHOW DATABASES,TRIGGER,EVENT,LOCK TABLES, andPROCESSon*.*.PROCESSandSHOW DATABASESare global privileges, andSELECTapplies to all databases, so this exceeds the minimum privileges for migrating onlyshop. If%is necessary, restrict it to the source MariaDB host instead.🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the rest with a brief reason, keep changes minimal, and validate. In `@docs/guides/mariadb/migration/databasemigration.md` around lines 110 - 120, Update the migration credential example for the `shop` schema to use the narrowest required host instead of `'%'` when possible, and scope schema-level privileges such as `SELECT`, `SHOW VIEW`, `TRIGGER`, `EVENT`, and `LOCK TABLES` to `shop.*` rather than `*.*`. Remove global `SHOW DATABASES` and `PROCESS` unless the documented migration flow explicitly requires them, and keep only the CDC privileges globally if needed.docs/guides/mysql/migration/databasemigration.md-290-299 (1)
290-299: 🎯 Functional Correctness | 🟠 Major | ⚡ Quick winShow an executable watch command.
Every 2.0s: kubectl get mysqlmigrations -n demois watch output, not a command. Replace it with an executable command such askubectl get mysqlmigrations -n demo --watch.🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the rest with a brief reason, keep changes minimal, and validate. In `@docs/guides/mysql/migration/databasemigration.md` around lines 290 - 299, Update the “Watch Migration Progress” example to show an executable kubectl watch command, replacing the displayed “Every 2.0s:” watch output with `kubectl get mysqlmigrations -n demo --watch` while retaining the sample output separately.docs/guides/mysql/migration/databasemigration.md-110-123 (1)
110-123: 🔒 Security & Privacy | 🟠 Major | ⚡ Quick winScope migration privileges to the selected schema.
The migration manifest selects only
shop, but lines 121 grantSELECT,SHOW VIEW,TRIGGER,EVENT, andLOCK TABLESon*.*. This violates “minimum required privileges.” Scope these grants toshop.*; keep the globalREPLICATION SLAVEandREPLICATION CLIENTprivileges separate. Confirm whether globalPROCESSis required; avoid granting it unless the migration needs process information across the instance.🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the rest with a brief reason, keep changes minimal, and validate. In `@docs/guides/mysql/migration/databasemigration.md` around lines 110 - 123, Update the dedicated migration user grants so schema-migration privileges apply to shop.* rather than *.*, while keeping REPLICATION SLAVE and REPLICATION CLIENT granted globally. Remove PROCESS unless the migration explicitly requires instance-wide process information.docs/guides/mysql/migration/databasemigration.md-168-171 (1)
168-171: 🔒 Security & Privacy | 🟠 Major | ⚡ Quick winDo not pass credentials as command arguments.
docs/guides/mysql/migration/databasemigration.md:168-171creates the source auth secret with--from-literal=password=<password>.docs/guides/mysql/migration/databasemigration.md:306then passes the target root password tomysqlwith-p<root-password>and does not document the supported target Secret lookup. Use--from-filefor the protected credentials and startmysqlwith-pso the client prompts for the password.🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the rest with a brief reason, keep changes minimal, and validate. In `@docs/guides/mysql/migration/databasemigration.md` around lines 168 - 171, Update the source secret creation example to use --from-file for username and password instead of exposing credentials through --from-literal arguments. In the target MySQL command, replace the inline -p<root-password> argument with -p so mysql prompts interactively, and document/use the supported target Secret lookup rather than passing the password on the command line.docs/guides/mysql/migration/databasemigration.md-65-75 (1)
65-75: 🎯 Functional Correctness | 🟠 Major | ⚡ Quick winUse provider- and version-specific binary logging setup.
This section currently mixes RDS, Azure, and Cloud SQL and can lead users to change unsupported parameters: RDS 8.4 manages
binlog_formatautomatically in many replication modes; Azure fixed binary log format toROWand does not expose configurable binary log format; and Cloud SQL enables binary logging through PITR backup settings while keepingbinlog_row_imageconfigurable. Split the steps by provider and version, direct RDS/Azure users to verify the active values instead of changing fixed settings, and update Cloud SQL instructions to enable PITR/backup configuration rather than a generic “Backups” toggle.🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the rest with a brief reason, keep changes minimal, and validate. In `@docs/guides/mysql/migration/databasemigration.md` around lines 65 - 75, Revise the provider-specific section for AWS RDS MySQL, Azure Database for MySQL, and Google Cloud SQL. Split RDS guidance by version/replication mode, instructing users to verify active binlog_format and binlog_row_image values where RDS 8.4 manages binlog_format automatically; state that Azure uses fixed ROW format and direct users to verify values rather than changing unsupported settings; and instruct Cloud SQL users to enable point-in-time recovery (PITR) through the appropriate backup configuration while retaining binlog_row_image configuration. Keep the replication-privilege step referenced for each provider.docs/guides/postgres/migration/databasemigration.md-71-73 (1)
71-73: 🎯 Functional Correctness | 🟠 Major | ⚡ Quick winDocument the full Azure Flexible Server prerequisites for logical replication.
The current instruction omits the required
max_worker_processessetting, while the linked guide requires that change in addition to settingwal_level = logical, saving the parameters, and restarting the server.🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the rest with a brief reason, keep changes minimal, and validate. In `@docs/guides/postgres/migration/databasemigration.md` around lines 71 - 73, Update the Azure Database for PostgreSQL section to document all Flexible Server prerequisites for logical replication: set wal_level = logical and max_worker_processes under Server Parameters, save the changes, restart the server, and then grant the replication privilege via SQL.docs/guides/postgres/migration/databasemigration.md-19-25 (1)
19-25: 🗄️ Data Integrity & Integration | 🟠 Major | ⚡ Quick winDocument DDL handling during logical replication.
PostgreSQL logical replication only replicates DML. A source schema change can leave the target schema behind or stop replication. State that new DDL must be applied to both databases or freeze schema changes before cutover.
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the rest with a brief reason, keep changes minimal, and validate. In `@docs/guides/postgres/migration/databasemigration.md` around lines 19 - 25, Update the migration phases documentation near the logical replication description to state that PostgreSQL logical replication does not replicate DDL; require schema changes to be applied to both source and target databases, or schema changes to be frozen until cutover.docs/guides/postgres/migration/databasemigration.md-338-349 (1)
338-349: 🗄️ Data Integrity & Integration | 🟠 Major | ⚡ Quick winSynchronize sequences before cutover.
PostgresMigrationusespgDump.schemaOnly: true, so the target gets schema definitions but not source sequence state. Logical replication copies DML rows, not current sequence values. If the sampleorders.idSERIALsequence is still below the highest inserted ID, an application insert after cutover can conflict. Sync target sequences afterLAG == 0, or remove theorders.idSERIALdemonstration.🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the rest with a brief reason, keep changes minimal, and validate. In `@docs/guides/postgres/migration/databasemigration.md` around lines 338 - 349, Update the Cutover guide to synchronize target PostgreSQL sequences after replication LAG reaches exactly zero and before deleting the PostgresMigration or redirecting the application. Include commands or clear steps to set each target sequence, including the sample orders.id SERIAL sequence, above the current maximum ID; alternatively remove the orders.id SERIAL demonstration if sequence synchronization is not documented.docs/guides/qdrant/migration/storagemigration.md-54-70 (1)
54-70: 🎯 Functional Correctness | 🟠 Major | ⚡ Quick winUse a StorageClass that exists in the example output.
The StorageClass list includes
local-path,longhorn,longhorn-custom, andlonghorn-static, but the Qdrant spec requestsstandard. Readers who follow the guide can leave the PVCs pending. Use a listed StorageClass, or add a step to createstandardand update the expected storageclass and PVC output.🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the rest with a brief reason, keep changes minimal, and validate. In `@docs/guides/qdrant/migration/storagemigration.md` around lines 54 - 70, Update the Qdrant migration example’s storageClassName from “standard” to one of the StorageClasses shown in the guide’s example output, such as local-path, so the generated PVCs can bind without additional setup.docs/guides/qdrant/migration/storagemigration.md-121-124 (1)
121-124: 🗄️ Data Integrity & Integration | 🟠 Major | ⚡ Quick winVerify point contents instead of collection counts.
In both check blocks,
/collections/demo_vectorsonly returns counts. Qdrant count fields may lag, andvectors_countis deprecated/removed in newer versions, so replace this with aGET /collections/demo_vectors/pointscall for IDs1and2usingwith_vectorandwith_payload, then compare the returned point data with the inserted values.🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the rest with a brief reason, keep changes minimal, and validate. In `@docs/guides/qdrant/migration/storagemigration.md` around lines 121 - 124, Replace the collection-count verification in both check blocks with a GET request to /collections/demo_vectors/points requesting IDs 1 and 2 with with_vector and with_payload enabled. Validate the returned point vectors and payloads against the values inserted by the migration, rather than relying on vectors_count or other collection statistics.docs/guides/qdrant/migration/storagemigration.md-178-186 (1)
178-186: 🗄️ Data Integrity & Integration | 🟠 Major | ⚡ Quick winShow the migrated PVC/PV identities separately.
StorageMigrationprovisions a new PVC for the target StorageClass and handles the old PV separately viaoldPVReclaimPolicy; existing bound PVCs do not reuse the same PV identity while changing onlySTORAGECLASS. Fix the post-migration output to show the created PVC/new PV identity, or document that the sample output is illustrative.🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the rest with a brief reason, keep changes minimal, and validate. In `@docs/guides/qdrant/migration/storagemigration.md` around lines 178 - 186, Update the post-migration example around the kubectl get pvc output to avoid implying that existing PVCs retained the same PV while only changing STORAGECLASS. Show the migrated PVC and newly provisioned PV identities separately, or explicitly label the sample output as illustrative, consistent with StorageMigration and oldPVReclaimPolicy behavior.docs/guides/qdrant/migration/storagemigration.md-60-63 (1)
60-63: 🎯 Functional Correctness | 🟠 Major | ⚡ Quick winDeclare Qdrant distributed mode explicitly.
This guide creates a multi-replica Qdrant instance but omits the required
spec.mode: Distributed. Add it to the embedded manifest and sync the referenceddocs/examples/qdrant/migration/sample-qdrant.yamlso the StorageClass migration example actually provisions a distributed Qdrant cluster.Proposed fix
spec: version: "1.17.0" + mode: Distributed replicas: 3🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the rest with a brief reason, keep changes minimal, and validate. In `@docs/guides/qdrant/migration/storagemigration.md` around lines 60 - 63, Add spec.mode: Distributed to the embedded Qdrant manifest near spec.version/replicas, and apply the same mode setting to the referenced sample-qdrant.yaml example so both StorageClass migration manifests provision distributed Qdrant clusters.
🧹 Nitpick comments (4)
docs/guides/mysql/migration/storagemigration.md (1)
289-292: 📐 Maintainability & Code Quality | 🔵 Trivial | ⚡ Quick winResolve the MD014 warnings in the cleanup block.
Lines 290-292 use
$prompts without showing command output. Remove the prompts or add expected output somarkdownlint-cli2passes.🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the rest with a brief reason, keep changes minimal, and validate. In `@docs/guides/mysql/migration/storagemigration.md` around lines 289 - 292, Update the cleanup command block containing the kubectl commands to resolve MD014 by removing the leading "$" prompts from each command, without changing the commands themselves.Source: Linters/SAST tools
docs/guides/mariadb/migration/databasemigration.md (2)
13-13: 📐 Maintainability & Code Quality | 🔵 Trivial | ⚡ Quick winUse descriptive link text.
Replace
[here]with text that identifies the destination. This fixes the MD059 warnings and improves link accessibility.Proposed wording
-- New to KubeDB? Please start [here](/docs/README.md). +- New to KubeDB? Start with the [KubeDB documentation overview](/docs/README.md). -- Install `KubeDB` operator ... following the steps [here](/docs/operatormanual/migration/). +- Install `KubeDB` operator ... by following the [migration installation guide](/docs/operatormanual/migration/).Also applies to: 23-23
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the rest with a brief reason, keep changes minimal, and validate. In `@docs/guides/mariadb/migration/databasemigration.md` at line 13, Update the introductory link in the migration documentation to replace the vague “here” label with descriptive text identifying the KubeDB getting-started destination, while preserving the existing link target and applying the same change at the other reported occurrence.Source: Linters/SAST tools
80-80: 📐 Maintainability & Code Quality | 🔵 Trivial | ⚡ Quick winUse executable command blocks.
These
$-prefixed commands do not show command output. Remove the$prefix or add representative output to satisfy MD014 and keep the guide consistent.Also applies to: 307-307, 328-328
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the rest with a brief reason, keep changes minimal, and validate. In `@docs/guides/mariadb/migration/databasemigration.md` at line 80, Update the executable command blocks in databasemigration.md, including the referenced command occurrences, to remove the leading "$" prompt characters. Keep the commands executable and consistent with the guide’s existing formatting.Source: Linters/SAST tools
docs/guides/mysql/migration/databasemigration.md (1)
13-13: 📐 Maintainability & Code Quality | 🔵 Trivial | ⚡ Quick winUse descriptive link text.
Replace
[here]with labels that identify the destination, such as[KubeDB documentation]and[migration installation guide]. This improves navigation for screen-reader users.Also applies to: 23-23
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the rest with a brief reason, keep changes minimal, and validate. In `@docs/guides/mysql/migration/databasemigration.md` at line 13, Replace the generic “here” link text in the introductory KubeDB link with a descriptive label identifying the destination, such as “KubeDB documentation,” while preserving the existing link target.Source: Linters/SAST tools
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
Major comments:
In `@docs/guides/mariadb/migration/databasemigration.md`:
- Around line 69-71: Remove the Azure Database for MariaDB section, including
its configuration and privilege instructions, or replace it with a currently
supported Azure database service and verified migration prerequisites; do not
leave retired-service guidance in the source list.
- Around line 118-120: Update the migration documentation around the migrator
GRANT and CDC validation procedure so migrator remains read/replication-only,
while a separate short-lived test account receives INSERT, UPDATE, and DELETE
privileges limited to shop.orders. Use that writer account for the DML
statements executed by the validation procedure instead of migrator.
- Around line 65-67: Update the AWS RDS MariaDB section to configure binary log
retention for the migration and CDC window, using the appropriate RDS retention
setting. Add a step to monitor retained binary logs during migration so snapshot
or CDC lag does not cause required events to be purged.
- Around line 110-120: Update the migration credential example for the `shop`
schema to use the narrowest required host instead of `'%'` when possible, and
scope schema-level privileges such as `SELECT`, `SHOW VIEW`, `TRIGGER`, `EVENT`,
and `LOCK TABLES` to `shop.*` rather than `*.*`. Remove global `SHOW DATABASES`
and `PROCESS` unless the documented migration flow explicitly requires them, and
keep only the CDC privileges globally if needed.
In `@docs/guides/mongodb/migration/databasemigration.md`:
- Around line 320-325: Update the migration guide text around the LAG example to
describe near-zero lag as “nearly in sync,” not fully synchronized. Clarify that
cutover readiness requires verified zero lag after source writes have stopped.
- Around line 112-126: Remove the duplicate migrator creation from the dedicated
migration user section, retaining the existing source-specific instructions for
self-hosted MongoDB, Atlas, and DigitalOcean. Update this section to reference
the already-created migrator user and preserve only the minimum-privilege
guidance without introducing another creation workflow.
- Around line 175-179: Update the MongoDB migration credential commands to use
quoted shell variable expansions instead of angle-bracket placeholders, define
the target password variable, and document how to retrieve the generated KubeDB
credential before using it in the commands. Apply the same correction to the
related root-password command.
- Around line 412-416: Update the target verification block in the MongoDB
migration guide to establish a new connection to the target before running `use
shop` and querying `db.orders`. Add the appropriate target mongosh or kubectl
exec command, while preserving the existing query and source-session steps.
- Around line 391-409: Update the MongoDB CDC validation instructions around the
mongosh connection and CRUD examples to keep the read-only migrator identity
unchanged, then create and use a separate test user with readWrite access scoped
to the shop database for insertOne, updateOne, and deleteOne. Ensure the
connection example authenticates the write operations with that test identity.
In `@docs/guides/mssqlserver/migration/databasemigration.md`:
- Around line 75-78: Update all documented sqlcmd examples and secret creation
commands at the referenced sections to avoid plaintext passwords in command-line
arguments. Replace `-P` and `--from-literal=password=...` usage with masked
prompts, `SQLCMDPASSWORD`, or another supported secret-delivery mechanism that
keeps credentials out of shell history and process arguments, while preserving
the examples’ intended behavior.
- Line 55: Update the MSSQL Server migration documentation to distinguish AWS
RDS from non-RDS usage: add an RDS-specific migration manifest with CDC
pre-enabled and spec.source.streaming.autoEnableCDC set to false, or clearly
label the existing manifest as non-RDS while providing the required RDS
configuration.
In `@docs/guides/mysql/migration/databasemigration.md`:
- Around line 290-299: Update the “Watch Migration Progress” example to show an
executable kubectl watch command, replacing the displayed “Every 2.0s:” watch
output with `kubectl get mysqlmigrations -n demo --watch` while retaining the
sample output separately.
- Around line 110-123: Update the dedicated migration user grants so
schema-migration privileges apply to shop.* rather than *.*, while keeping
REPLICATION SLAVE and REPLICATION CLIENT granted globally. Remove PROCESS unless
the migration explicitly requires instance-wide process information.
- Around line 168-171: Update the source secret creation example to use
--from-file for username and password instead of exposing credentials through
--from-literal arguments. In the target MySQL command, replace the inline
-p<root-password> argument with -p so mysql prompts interactively, and
document/use the supported target Secret lookup rather than passing the password
on the command line.
- Around line 65-75: Revise the provider-specific section for AWS RDS MySQL,
Azure Database for MySQL, and Google Cloud SQL. Split RDS guidance by
version/replication mode, instructing users to verify active binlog_format and
binlog_row_image values where RDS 8.4 manages binlog_format automatically; state
that Azure uses fixed ROW format and direct users to verify values rather than
changing unsupported settings; and instruct Cloud SQL users to enable
point-in-time recovery (PITR) through the appropriate backup configuration while
retaining binlog_row_image configuration. Keep the replication-privilege step
referenced for each provider.
In `@docs/guides/mysql/migration/storagemigration.md`:
- Around line 43-48: Synchronize the MySQL storage migration documentation and
example manifest on one valid StorageClass: replace the inconsistent
longhorn-custom references in the manifest application and related instructions
with the documented standard-custom value, while preserving the existing
migration workflow.
- Around line 108-109: Update both MySQL login examples in the migration guide
to avoid expanding MYSQL_ROOT_PASSWORD as a command-line argument; use mysql
-uroot -p with interactive password input or the supported Secret-file method,
preserving the existing connection behavior.
In `@docs/guides/neo4j/migration/storagemigration.md`:
- Around line 134-149: Update the migration walkthrough example’s
spec.migration.oldPVReclaimPolicy value to Retain so the source PV remains
available for rollback and validation.
- Around line 173-183: Replace the count-only validation around the
StorageMigration verification with a pre-migration baseline and post-migration
comparison of deterministic User records, including id and name for users 1,
1000, and 2000. Update the concluding statement to claim only that those sampled
records match, rather than asserting all data remains intact.
In `@docs/guides/postgres/migration/databasemigration.md`:
- Around line 71-73: Update the Azure Database for PostgreSQL section to
document all Flexible Server prerequisites for logical replication: set
wal_level = logical and max_worker_processes under Server Parameters, save the
changes, restart the server, and then grant the replication privilege via SQL.
- Around line 19-25: Update the migration phases documentation near the logical
replication description to state that PostgreSQL logical replication does not
replicate DDL; require schema changes to be applied to both source and target
databases, or schema changes to be frozen until cutover.
- Around line 338-349: Update the Cutover guide to synchronize target PostgreSQL
sequences after replication LAG reaches exactly zero and before deleting the
PostgresMigration or redirecting the application. Include commands or clear
steps to set each target sequence, including the sample orders.id SERIAL
sequence, above the current maximum ID; alternatively remove the orders.id
SERIAL demonstration if sequence synchronization is not documented.
In `@docs/guides/postgres/migration/storagemigration.md`:
- Around line 131-148: Align the canonical storage migration manifest referenced
by the kubectl command with the guide’s documented value by setting
spec.migration.storageClassName in storage-migration.yaml to standard-custom,
and ensure the guide’s verification and expected output remain consistent with
that value.
In `@docs/guides/qdrant/migration/storagemigration.md`:
- Around line 54-70: Update the Qdrant migration example’s storageClassName from
“standard” to one of the StorageClasses shown in the guide’s example output,
such as local-path, so the generated PVCs can bind without additional setup.
- Around line 121-124: Replace the collection-count verification in both check
blocks with a GET request to /collections/demo_vectors/points requesting IDs 1
and 2 with with_vector and with_payload enabled. Validate the returned point
vectors and payloads against the values inserted by the migration, rather than
relying on vectors_count or other collection statistics.
- Around line 178-186: Update the post-migration example around the kubectl get
pvc output to avoid implying that existing PVCs retained the same PV while only
changing STORAGECLASS. Show the migrated PVC and newly provisioned PV identities
separately, or explicitly label the sample output as illustrative, consistent
with StorageMigration and oldPVReclaimPolicy behavior.
- Around line 60-63: Add spec.mode: Distributed to the embedded Qdrant manifest
near spec.version/replicas, and apply the same mode setting to the referenced
sample-qdrant.yaml example so both StorageClass migration manifests provision
distributed Qdrant clusters.
---
Minor comments:
In `@docs/guides/mariadb/migration/databasemigration.md`:
- Around line 296-300: Replace the non-executable “Every 2.0s:” watch output in
the migration example with the runnable command “kubectl get mariadbmigrations
-n demo --watch”, while preserving the displayed resource output.
- Around line 144-155: Update the orders seed example around the INSERT INTO
orders statement so its created_at values match the documented SELECT output
deterministically. Add explicit created_at values to each inserted row, or
replace the hardcoded timestamps in the expected output with placeholders; keep
the remaining sample data unchanged.
- Around line 165-176: Update the MariaDB migration documentation commands to
read the source password into a variable and pass it as a double-quoted
--from-literal value, making that the final documented command. Double-quote the
CA certificate path and any mTLS paths, document the source of <root-password>
for target verification, and replace the mysql root command’s inline password
with the interactive -p form.
In `@docs/guides/mongodb/migration/databasemigration.md`:
- Line 13: Update the links in the migration guide to replace both generic
“here” labels with descriptive text identifying their destinations, using labels
such as “KubeDB overview” and “Migration operator installation” while preserving
the existing target URLs.
- Around line 305-311: Replace the non-runnable “Every 2.0s: kubectl get
mongodbmigrations -n demo” block in the Watch Migration Progress section with a
runnable progress command, using kubectl’s --watch option or an explicit watch
invocation.
- Line 79: Remove the leading “$” prompt marker from the command-only MongoDB
examples, including the blocks containing mongosh commands and the additional
occurrences at the referenced locations. Keep each command otherwise unchanged,
unless adding corresponding output to the same fenced block.
- Around line 397-400: Update the CDC example around db.orders.insertOne so
created_at uses a fixed ISO timestamp matching the documented expected output,
or explicitly mark the timestamp as variable wherever the output is shown. Apply
the same deterministic treatment to the additional referenced example.
In `@docs/guides/mssqlserver/migration/databasemigration.md`:
- Line 426: Update the CDC verification instructions in the migration guide to
replace the fixed wait with polling or retries that re-query the target until
the expected rows appear. Include a bounded timeout and preserve reuse of the
existing $SA_PASSWORD variable.
- Line 330: Update the kubectl command in the migration guide to use kubectl’s
native watch mode by adding the --watch option to kubectl get
mssqlservermigrations -n demo, removing reliance on the separate watch
executable.
In `@docs/guides/mysql/migration/databasemigration.md`:
- Line 238: In the migration guide instruction, correct the spelling of “untill”
to “until” while leaving the rest of the text unchanged.
In `@docs/guides/mysql/migration/storagemigration.md`:
- Line 13: Replace the vague “here” link text in both affected documentation
links with descriptive labels that identify their destinations, such as “KubeDB
documentation” and “KubeDB installation guide,” while preserving the existing
URLs.
- Line 64: Align the MySQL version declaration in the sample-mysql manifest with
the expected transcript output: update the version at the shown declaration and
corresponding occurrences at the referenced sections so the resource and both
server banners consistently report the same deployed version.
- Around line 101-106: Update the primary-pod discovery command in the migration
guide to assign its result to PRIMARY_POD, then replace hardcoded sample-mysql-0
targets in the shown kubectl exec commands and the post-migration verification
with PRIMARY_POD.
- Around line 218-223: Update the storage migration monitoring command in the
guide to use kubectl’s built-in streaming via kubectl get mysqlopsrequest -n
demo --watch, avoiding the undeclared standalone watch dependency.
In `@docs/guides/neo4j/migration/storagemigration.md`:
- Around line 188-191: Update the cleanup command examples in the migration
guide by removing the leading “$” prompts from each kubectl command, since no
representative command output is shown.
- Line 84: Update the “Create a Database and Seed Data” section heading to
remove the misleading “Step 3” prefix, since this guide does not define Steps 1
or 2.
- Line 114: Update the expected command output code fence in the storage
migration documentation to specify the text language identifier, using ```text
instead of an unannotated fence.
- Line 86: Update the introductory sentence before the Cypher commands to
accurately describe direct command execution: replace the “Open a shell into
pod” wording with “Run the following commands in pod `neo4j-test-0`,” unless the
commands are changed to use an interactive shell.
- Around line 101-104: Update the seed command near the “Seed 2,000 User nodes”
section to be safe on repeated execution: establish uniqueness for User.id and
replace CREATE with MERGE so each generated ID is inserted only once, preserving
the expected 2,000-node count.
- Line 82: Update the sentence in the migration guide to use
“PersistentVolumeClaims” and state that all of them use the `local-path`
StorageClass, then separate the database creation instruction into its own
sentence with “seed data.”
- Line 13: Update the introductory link in storagemigration.md to replace the
generic “here” anchor text with descriptive text identifying the KubeDB
documentation, while preserving the existing destination.
In `@docs/guides/postgres/migration/databasemigration.md`:
- Around line 161-165: Update the Kubernetes secret creation example for
source-postgres-auth to avoid passing the migration password via --from-literal.
Use --from-file with a protected temporary password file or an interactive input
mechanism, while preserving the username and secret type configuration.
- Line 13: Update the links in databasemigration.md, including the corresponding
link at the other referenced location, to replace generic “here” text with
descriptive labels identifying their destinations, such as “KubeDB
documentation” and “Migration operator installation.”
- Around line 127-135: Update the orders table setup in the migration guide so
the table is owned by the publication user before it is added to pub. Create
orders under that user, transfer ownership after creation, or explicitly
document the required ownership dependency; do not rely on pg_read_all_data
permissions.
In `@docs/guides/postgres/migration/storagemigration.md`:
- Line 14: Replace both generic “here” link labels in the document with
descriptive text identifying their targets, such as “KubeDB documentation” and
“KubeDB installation guide,” while preserving the existing destination URLs.
- Around line 100-116: Update both interactive kubectl/psql examples in the
storage migration guide to close each session after the final query: add psql’s
\q, followed by exit from the pod shell. Ensure this sequence appears in both
examples before any subsequent kubectl commands.
- Around line 199-202: Remove the leading shell prompt characters from the
cleanup commands in the migration guide code block, including the kubectl delete
commands for postgresopsrequest, postgres, and namespace. Do not add output;
keep the commands themselves unchanged.
In `@docs/guides/qdrant/migration/storagemigration.md`:
- Line 14: Update the Markdown links in storagemigration.md to use descriptive
link text instead of “here,” including both occurrences, while preserving their
existing destinations.
- Around line 110-119: Update the Qdrant point upsert curl command in the
migration guide to include the API’s wait=true parameter, ensuring the request
completes before the subsequent collection-count verification runs.
- Around line 96-98: Update the Qdrant port-forward examples at both occurrences
to capture the kubectl process PID, poll localhost:6333 or the Qdrant endpoint
until it is reachable, and terminate the port-forward process after verification
before continuing.
---
Nitpick comments:
In `@docs/guides/mariadb/migration/databasemigration.md`:
- Line 13: Update the introductory link in the migration documentation to
replace the vague “here” label with descriptive text identifying the KubeDB
getting-started destination, while preserving the existing link target and
applying the same change at the other reported occurrence.
- Line 80: Update the executable command blocks in databasemigration.md,
including the referenced command occurrences, to remove the leading "$" prompt
characters. Keep the commands executable and consistent with the guide’s
existing formatting.
In `@docs/guides/mysql/migration/databasemigration.md`:
- Line 13: Replace the generic “here” link text in the introductory KubeDB link
with a descriptive label identifying the destination, such as “KubeDB
documentation,” while preserving the existing link target.
In `@docs/guides/mysql/migration/storagemigration.md`:
- Around line 289-292: Update the cleanup command block containing the kubectl
commands to resolve MD014 by removing the leading "$" prompts from each command,
without changing the commands themselves.
ℹ️ Review info
⚙️ Run configuration
Configuration used: defaults
Review profile: CHILL
Plan: Pro Plus
Run ID: a035d5a7-7253-439d-9822-18d1bc96aa37
📒 Files selected for processing (18)
docs/examples/mssqlserver/migration/target-mssqlserver.yamldocs/guides/mariadb/concepts/migrator/index.mddocs/guides/mariadb/migration/databasemigration.mddocs/guides/mongodb/concepts/migrator.mddocs/guides/mongodb/migration/databasemigration.mddocs/guides/mssqlserver/concepts/migrator.mddocs/guides/mssqlserver/migration/databasemigration.mddocs/guides/mysql/concepts/migrator/index.mddocs/guides/mysql/migration/databasemigration.mddocs/guides/mysql/migration/storagemigration.mddocs/guides/neo4j/README.mddocs/guides/neo4j/concepts/opsrequest.mddocs/guides/neo4j/migration/storagemigration.mddocs/guides/postgres/concepts/migrator.mddocs/guides/postgres/migration/databasemigration.mddocs/guides/postgres/migration/storagemigration.mddocs/guides/qdrant/migration/storagemigration.mddocs/operatormanual/migration/README.md
🚧 Files skipped from review as they are similar to previous changes (3)
- docs/operatormanual/migration/README.md
- docs/examples/mssqlserver/migration/target-mssqlserver.yaml
- docs/guides/mssqlserver/concepts/migrator.md
Summary by CodeRabbit