Skip to content

Add mssql-server migration doc - #1030

Open
PulokSaha0706 wants to merge 4 commits into
masterfrom
mssqlserver-migration-docs
Open

Add mssql-server migration doc#1030
PulokSaha0706 wants to merge 4 commits into
masterfrom
mssqlserver-migration-docs

Conversation

@PulokSaha0706

@PulokSaha0706 PulokSaha0706 commented Jul 10, 2026

Copy link
Copy Markdown
Member

Summary by CodeRabbit

  • Documentation
    • Added comprehensive database migration guides for MSSQL Server, MariaDB, MongoDB, MySQL, and PostgreSQL, including setup, monitoring, CDC verification, and cutover.
    • Added storage migration guides for MySQL, PostgreSQL, Neo4j, and Qdrant.
    • Added MSSQL Server migration examples covering source and target setup, TLS, snapshots, streaming, and CDC.
    • Added an MSSQL Server migration CRD reference and migration documentation index.
    • Corrected migration and storage guide links and standardized documentation paths.

@coderabbitai

coderabbitai Bot commented Jul 10, 2026

Copy link
Copy Markdown

Review Change Stack

📝 Walkthrough

Walkthrough

Adds 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.

Changes

MSSQL Server migration

Layer / File(s) Summary
Migration concepts and navigation
docs/guides/mssqlserver/concepts/migrator.md, docs/guides/mssqlserver/migration/_index.md, docs/operatormanual/migration/README.md
Documents MSSQLServerMigration configuration, phases, status, and related links.
Source and target setup
docs/guides/mssqlserver/migration/databasemigration.md, docs/examples/mssqlserver/migration/source-issuer.yaml, docs/examples/mssqlserver/migration/target-mssqlserver.yaml
Documents source preparation, TLS, AppBinding, and target MSSQLServer provisioning.
Migration execution and validation
docs/guides/mssqlserver/migration/databasemigration.md, docs/examples/mssqlserver/migration/mssqlserver-migration.yaml
Adds migration configuration, monitoring, snapshot checks, CDC tests, and cutover steps.

Database migration guides

Layer / File(s) Summary
MariaDB migration workflow
docs/guides/mariadb/migration/databasemigration.md, docs/guides/mariadb/concepts/migrator/index.md
Adds MariaDB source setup, migration configuration, CDC validation, cutover, and corrected navigation.
MongoDB migration workflow
docs/guides/mongodb/migration/databasemigration.md, docs/guides/mongodb/concepts/migrator.md
Adds MongoDB replica-set preparation, synchronization, validation, cutover, and corrected navigation.
MySQL migration workflow
docs/guides/mysql/migration/databasemigration.md, docs/guides/mysql/concepts/migrator/index.md
Adds MySQL source setup, migration resources, CDC validation, cutover, and corrected navigation.
PostgreSQL migration workflow
docs/guides/postgres/migration/databasemigration.md, docs/guides/postgres/concepts/migrator.md
Adds PostgreSQL logical-replication setup, migration configuration, CDC validation, cutover, and corrected navigation.

StorageClass migration guides

Layer / File(s) Summary
MySQL storage migration
docs/guides/mysql/migration/storagemigration.md
Documents MySQL storage migration, data checks, verification, and cleanup.
PostgreSQL storage migration
docs/guides/postgres/migration/storagemigration.md
Documents PostgreSQL storage migration, data checks, verification, and cleanup.
Neo4j storage migration
docs/guides/neo4j/migration/storagemigration.md, docs/guides/neo4j/README.md, docs/guides/neo4j/concepts/opsrequest.md
Adds Neo4j storage migration procedures and corrects related links.
Qdrant storage migration
docs/guides/qdrant/migration/storagemigration.md
Documents Qdrant storage migration, data checks, verification, and cleanup.

Estimated code review effort: 3 (Moderate) | ~25 minutes

Possibly related PRs

Suggested reviewers: tamalsaha

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
Loading
🚥 Pre-merge checks | ✅ 5
✅ Passed checks (5 passed)
Check name Status Explanation
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Title check ✅ Passed The title clearly identifies the primary change: adding MSSQL Server migration documentation and examples.
Docstring Coverage ✅ Passed No functions found in the changed files to evaluate docstring coverage. Skipping docstring coverage check.
Linked Issues check ✅ Passed Check skipped because no linked issues were found for this pull request.
Out of Scope Changes check ✅ Passed Check skipped because no linked issues were found for this pull request.
✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch mssqlserver-migration-docs

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.

❤️ Share

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

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

Actionable comments posted: 1

🧹 Nitpick comments (2)
docs/guides/mssqlserver/migration/databaseMigration.md (2)

110-116: 📐 Maintainability & Code Quality | 🔵 Trivial | 💤 Low value

Add language specifiers to fenced output blocks.

Three fenced code blocks showing expected output (lines 110, 381, 426) lack a language specifier, triggering MD040. Adding text as 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 value

Clarify the watch command presentation.

Line 325 shows Every 2.0s: kubectl get mssqlservermigrations -n demo inside a bash code block, which reads as a command to run. This is actually the header line from watch output. 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

📥 Commits

Reviewing files that changed from the base of the PR and between 6fb820a and 0a0d7e5.

📒 Files selected for processing (7)
  • docs/examples/mssqlserver/migration/mssqlserver-migration.yaml
  • docs/examples/mssqlserver/migration/source-issuer.yaml
  • docs/examples/mssqlserver/migration/target-mssqlserver.yaml
  • docs/guides/mssqlserver/concepts/migrator.md
  • docs/guides/mssqlserver/migration/_index.md
  • docs/guides/mssqlserver/migration/databaseMigration.md
  • docs/operatormanual/migration/README.md

Comment thread docs/guides/mssqlserver/migration/databasemigration.md

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

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 win

Mark the timestamps as illustrative.

The data is generated with GETDATE(), so fixed 2026-07-10 timestamps 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

📥 Commits

Reviewing files that changed from the base of the PR and between 0a0d7e5 and eefd758.

📒 Files selected for processing (1)
  • docs/guides/mssqlserver/migration/databaseMigration.md

Comment thread docs/guides/mssqlserver/migration/databaseMigration.md Outdated
Comment thread docs/guides/mssqlserver/migration/databaseMigration.md Outdated
@github-actions

github-actions Bot commented Jul 10, 2026

Copy link
Copy Markdown

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>
@tamalsaha
tamalsaha force-pushed the mssqlserver-migration-docs branch from eefd758 to 9d4f1c1 Compare July 31, 2026 18:39
@tamalsaha tamalsaha changed the title added mssql-server migration doc Add mssql-server migration doc Jul 31, 2026

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

Actionable comments posted: 5

🧹 Nitpick comments (5)
docs/guides/mssqlserver/concepts/migrator.md (3)

102-103: 🔒 Security & Privacy | 🔵 Trivial | ⚡ Quick win

Add 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 win

Complete 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 win

Use descriptive link text throughout the migration documentation.

  • docs/guides/mssqlserver/concepts/migrator.md#L13-L13: replace here with KubeDB introduction.
  • docs/guides/mssqlserver/concepts/migrator.md#L187-L187: replace here with MSSQLServer CRD reference.
  • docs/guides/mssqlserver/migration/databaseMigration.md#L13-L13: replace here with KubeDB introduction.
  • docs/guides/mssqlserver/migration/databaseMigration.md#L23-L23: replace here with migration 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 lift

Avoid WipeOut for the migration target.

Deleting the target MSSQLServer can 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 win

Mark Developer edition 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

📥 Commits

Reviewing files that changed from the base of the PR and between eefd758 and 9d4f1c1.

📒 Files selected for processing (6)
  • docs/examples/mssqlserver/migration/mssqlserver-migration.yaml
  • docs/examples/mssqlserver/migration/source-issuer.yaml
  • docs/examples/mssqlserver/migration/target-mssqlserver.yaml
  • docs/guides/mssqlserver/concepts/migrator.md
  • docs/guides/mssqlserver/migration/_index.md
  • docs/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

Comment thread docs/guides/mssqlserver/concepts/migrator.md
Comment thread docs/guides/mssqlserver/migration/databaseMigration.md Outdated
Comment thread docs/guides/mssqlserver/migration/databaseMigration.md Outdated
Comment thread docs/guides/mssqlserver/migration/databaseMigration.md Outdated
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>

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

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 win

Do 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 win

Add 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_db before mutation and setting spec.source.streaming.autoEnableCDC: false. The provided migration manifest still uses autoEnableCDC: true, so copying it for RDS follows the wrong CDC setup path. Include an RDS manifest with CDC already enabled and autoEnableCDC: 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 win

Align the referenced migration manifest with the documented StorageClass.

The guide documents standard-custom at Line [132] and verifies that value later. However, docs/examples/postgres/migration/storage-migration.yaml, which the command at Line [148] applies, sets spec.migration.storageClassName to longhorn-custom at Line [11]. The shown cluster does not provide longhorn-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 use longhorn-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 win

Preserve the source PV during the walkthrough.

oldPVReclaimPolicy: Delete removes the old PV after migration. This removes the rollback path before users finish validation. Use Retain in the example, or clearly warn that Delete is 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 win

Do 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 as id and name for 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 win

Synchronize the target StorageClass across the guide and example manifest.

This guide uses standard-custom, but docs/examples/mysql/migration/storage-migration.yaml uses longhorn-custom. Line 208 applies the external manifest, and longhorn-custom is 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 win

Do not pass the root password through the command line.

mysql -uroot -p$MYSQL_ROOT_PASSWORD expands into a process argument, so shell-special characters in the password can change the command and the password appears in process inspection. Use mysql -uroot -p with 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 win

Do 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 win

Keep source-user creation source-specific.

This section creates migrator a 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 win

Make 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 win

Connect to the target before querying it.

The mongosh session opened earlier connects to the source. use shop only changes the database in that same session. This block therefore reads source state instead of target state. Add a target mongosh or kubectl exec connection 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 win

Use a write-capable test identity for CDC validation.

The migrator user has only readAnyDatabase and clusterMonitor roles. The later insertOne, updateOne, and deleteOne operations will be rejected. Keep migrator read-only and create a separate test user with readWrite access limited to shop.

🤖 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 lift

Remove 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 win

Use a separate writer for CDC validation.

Line 119 grants no INSERT, UPDATE, or DELETE privileges. Later, Line 328 connects as migrator, and Lines 333-340 execute those statements. The validation procedure will fail with permission errors. Keep migrator read/replication-only and create a separate short-lived test account with DML access to shop.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 lift

Document 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 win

Narrow migration credentials and privileges.

The guide scopes the migration to spec.schema.database: [shop], but the setup example creates 'migrator'@'%' and grants SELECT, SHOW DATABASES, TRIGGER, EVENT, LOCK TABLES, and PROCESS on *.*. PROCESS and SHOW DATABASES are global privileges, and SELECT applies to all databases, so this exceeds the minimum privileges for migrating only shop. 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 win

Show an executable watch command.

Every 2.0s: kubectl get mysqlmigrations -n demo is watch output, not a command. Replace it with an executable command such as kubectl 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 win

Scope migration privileges to the selected schema.

The migration manifest selects only shop, but lines 121 grant SELECT, SHOW VIEW, TRIGGER, EVENT, and LOCK TABLES on *.*. This violates “minimum required privileges.” Scope these grants to shop.*; keep the global REPLICATION SLAVE and REPLICATION CLIENT privileges separate. Confirm whether global PROCESS is 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 win

Do not pass credentials as command arguments.

docs/guides/mysql/migration/databasemigration.md:168-171 creates the source auth secret with --from-literal=password=<password>. docs/guides/mysql/migration/databasemigration.md:306 then passes the target root password to mysql with -p<root-password> and does not document the supported target Secret lookup. Use --from-file for the protected credentials and start mysql with -p so 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 win

Use 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_format automatically in many replication modes; Azure fixed binary log format to ROW and does not expose configurable binary log format; and Cloud SQL enables binary logging through PITR backup settings while keeping binlog_row_image configurable. 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 win

Document the full Azure Flexible Server prerequisites for logical replication.

The current instruction omits the required max_worker_processes setting, while the linked guide requires that change in addition to setting wal_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 win

Document 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 win

Synchronize sequences before cutover.

PostgresMigration uses pgDump.schemaOnly: true, so the target gets schema definitions but not source sequence state. Logical replication copies DML rows, not current sequence values. If the sample orders.id SERIAL sequence is still below the highest inserted ID, an application insert after cutover can conflict. Sync target sequences after LAG == 0, or remove the orders.id SERIAL demonstration.

🤖 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 win

Use a StorageClass that exists in the example output.

The StorageClass list includes local-path, longhorn, longhorn-custom, and longhorn-static, but the Qdrant spec requests standard. Readers who follow the guide can leave the PVCs pending. Use a listed StorageClass, or add a step to create standard and 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 win

Verify point contents instead of collection counts.

In both check blocks, /collections/demo_vectors only returns counts. Qdrant count fields may lag, and vectors_count is deprecated/removed in newer versions, so replace this with a GET /collections/demo_vectors/points call for IDs 1 and 2 using with_vector and with_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 win

Show the migrated PVC/PV identities separately.

StorageMigration provisions a new PVC for the target StorageClass and handles the old PV separately via oldPVReclaimPolicy; existing bound PVCs do not reuse the same PV identity while changing only STORAGECLASS. 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 win

Declare 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 referenced docs/examples/qdrant/migration/sample-qdrant.yaml so 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 win

Resolve the MD014 warnings in the cleanup block.

Lines 290-292 use $ prompts without showing command output. Remove the prompts or add expected output so markdownlint-cli2 passes.

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

In `@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 win

Use 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 win

Use 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 win

Use 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

📥 Commits

Reviewing files that changed from the base of the PR and between 9d4f1c1 and 4cc6a4e.

📒 Files selected for processing (18)
  • docs/examples/mssqlserver/migration/target-mssqlserver.yaml
  • docs/guides/mariadb/concepts/migrator/index.md
  • docs/guides/mariadb/migration/databasemigration.md
  • docs/guides/mongodb/concepts/migrator.md
  • docs/guides/mongodb/migration/databasemigration.md
  • docs/guides/mssqlserver/concepts/migrator.md
  • docs/guides/mssqlserver/migration/databasemigration.md
  • docs/guides/mysql/concepts/migrator/index.md
  • docs/guides/mysql/migration/databasemigration.md
  • docs/guides/mysql/migration/storagemigration.md
  • docs/guides/neo4j/README.md
  • docs/guides/neo4j/concepts/opsrequest.md
  • docs/guides/neo4j/migration/storagemigration.md
  • docs/guides/postgres/concepts/migrator.md
  • docs/guides/postgres/migration/databasemigration.md
  • docs/guides/postgres/migration/storagemigration.md
  • docs/guides/qdrant/migration/storagemigration.md
  • docs/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

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants