Skip to content

[WIP]#4270

Draft
wk989898 wants to merge 2 commits intopingcap:masterfrom
wk989898:add-named-index
Draft

[WIP]#4270
wk989898 wants to merge 2 commits intopingcap:masterfrom
wk989898:add-named-index

Conversation

@wk989898
Copy link
Collaborator

@wk989898 wk989898 commented Feb 25, 2026

What problem does this PR solve?

Issue Number: close #2327

What is changed and how it works?

Check List

Tests

  • Unit test
  • Integration test
  • Manual test (add detailed scripts or steps below)
  • No code

Questions

Will it cause performance regression or break compatibility?
Do you need to update user documentation, design documentation or monitoring documentation?

Release note

Please refer to [Release Notes Language Style Guide](https://pingcap.github.io/tidb-dev-guide/contribute-to-tidb/release-notes-style-guide.html) to write a quality release note.

If you don't think this PR needs a release note then fill it with `None`.

Signed-off-by: wk989898 <nhsmwk@gmail.com>
@ti-chi-bot
Copy link

ti-chi-bot bot commented Feb 25, 2026

Skipping CI for Draft Pull Request.
If you want CI signal for your change, please convert it to an actual PR.
You can still manually trigger a test run with /test all

@ti-chi-bot ti-chi-bot bot added do-not-merge/needs-linked-issue do-not-merge/work-in-progress Indicates that a PR should not merge because it is a work in progress. release-note Denotes a PR that will be considered when it comes time to generate release notes. labels Feb 25, 2026
@ti-chi-bot
Copy link

ti-chi-bot bot commented Feb 25, 2026

[APPROVALNOTIFIER] This PR is NOT APPROVED

This pull-request has been approved by:
Once this PR has been reviewed and has the lgtm label, please assign sdojjy for approval. For more information see the Code Review Process.
Please ensure that each of them provides their approval before proceeding.

The full list of commands accepted by this bot can be found here.

Details Needs approval from an approver in each of these files:

Approvers can indicate their approval by writing /approve in a comment
Approvers can cancel approval by writing /approve cancel in a comment

@ti-chi-bot ti-chi-bot bot added the size/XL Denotes a PR that changes 500-999 lines, ignoring generated files. label Feb 25, 2026
@gemini-code-assist
Copy link

Summary of Changes

Hello @wk989898, I'm Gemini Code Assist1! I'm currently reviewing this pull request and will post my feedback shortly. In the meantime, here's a summary to help you and other reviewers quickly get up to speed!

This pull request introduces a mechanism to correctly handle DDL statements that add anonymous indexes. Previously, such statements could lead to issues, especially during change data capture (CDC) retries, due to the lack of explicit index names. The changes parse ALTER TABLE ADD INDEX statements, identify anonymous indexes, and restore their proper names based on existing table metadata, thereby improving the robustness of DDL replication.

Highlights

  • Anonymous Index Naming: Introduced a new module ddl_index_rewrite.go to handle the restoration of named indexes from anonymous ALTER TABLE ADD INDEX DDL statements.
  • DDL Event Processing: Modified mysql_writer_ddl.go to apply this index rewriting logic when processing ActionAddIndex DDL events, ensuring anonymous indexes are correctly identified and named.
  • Unit Testing: Added comprehensive unit tests in mysql_writer_ddl_index_rewrite_test.go to validate the anonymous index restoration functionality.
  • Integration Testing: Activated previously commented-out integration tests in run.sh to verify the correct handling of indexes during CDC retries, addressing a known issue with duplicate indexes.

🧠 New Feature in Public Preview: You can now enable Memory to help Gemini Code Assist learn from your team's feedback. This makes future code reviews more consistent and personalized to your project's style. Click here to enable Memory in your admin console.

Changelog
  • pkg/sink/mysql/ddl_index_rewrite.go
    • Added a new file containing functions to parse ALTER TABLE ADD INDEX DDLs, identify anonymous index definitions, and retrieve their corresponding names from the table's metadata.
  • pkg/sink/mysql/mysql_writer_ddl.go
    • Updated the execDDL function to intercept ActionAddIndex DDL events and apply the restoreAnonymousIndexToNamedIndex logic, logging the original and restored queries.
  • pkg/sink/mysql/mysql_writer_ddl_index_rewrite_test.go
    • Added a new test file with TestExecDDL_RestoreAnonymousIndexToNamedIndex to verify that anonymous index DDLs are correctly rewritten with their inferred names before execution.
  • tests/integration_tests/ddl_wait/run.sh
    • Uncommented a block of SQL commands and CDC server operations to enable an integration test scenario that specifically checks for correct index handling after CDC retries, which was previously disabled due to an index naming issue.
Activity
  • The pull request is currently marked as Work In Progress (WIP), indicating it is still under active development.
  • The description body uses a standard template, suggesting that detailed information about the problem and changes is yet to be filled out by the author.
  • No specific review comments or approvals have been recorded yet.
Using Gemini Code Assist

The full guide for Gemini Code Assist can be found on our documentation page, here are some quick tips.

Invoking Gemini

You can request assistance from Gemini at any point by creating a comment using either /gemini <command> or @gemini-code-assist <command>. Below is a summary of the supported commands on the current page.

Feature Command Description
Code Review /gemini review Performs a code review for the current pull request in its current state.
Pull Request Summary /gemini summary Provides a summary of the current pull request in its current state.
Comment @gemini-code-assist Responds in comments when explicitly tagged, both in pull request comments and review comments.
Help /gemini help Displays a list of available commands.

Customization

To customize Gemini Code Assist for GitHub experience, repository maintainers can create a configuration file and/or provide a custom code review style guide (such as PEP-8 for Python) by creating and adding files to a .gemini/ folder in the base of the repository. Detailed instructions can be found here.

Limitations & Feedback

Gemini Code Assist may make mistakes. Please leave feedback on any instances where its feedback is incorrect or counter productive. You can react with 👍 and 👎 on @gemini-code-assist comments. If you're interested in giving your feedback about your experience with Gemini Code Assist for Github and other Google products, sign up here.

You can also get AI-powered code generation, chat, as well as code reviews directly in the IDE at no cost with the Gemini Code Assist IDE Extension.

Footnotes

  1. Review the Privacy Notices, Generative AI Prohibited Use Policy, Terms of Service, and learn how to configure Gemini Code Assist in GitHub here. Gemini can make mistakes, so double check it and use code with caution.

Signed-off-by: wk989898 <nhsmwk@gmail.com>
Copy link

@gemini-code-assist gemini-code-assist bot left a comment

Choose a reason for hiding this comment

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

Code Review

This pull request introduces a mechanism to restore anonymous index names in DDL queries, specifically for ADD INDEX operations. It adds a new file ddl_index_rewrite.go with functions to parse and modify the DDL statement, and modifies mysql_writer_ddl.go to incorporate this functionality. Additionally, it includes a test file mysql_writer_ddl_index_rewrite_test.go to verify the index name restoration. The integration test script run.sh is also updated to include index-related operations.

Comment on lines +65 to +69
run_sql "update test.t set col = 55 where id = 5;"
run_sql "alter table test.t add index (col);"
run_sql "update test.t set col = 66 where id = 6;"
run_sql "alter table test.t add index (col);"
run_sql "update test.t set col = 77 where id = 7;"

Choose a reason for hiding this comment

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

high

The script adds multiple indexes with the same name col. While the code in this PR addresses the anonymous index issue, it might be beneficial to ensure that the test script itself uses distinct index names to avoid potential confusion or unexpected behavior during testing. This could be achieved by appending a unique identifier to each index name.

length int
}

func restoreAnonymousIndexToNamedIndex(query string, tableInfo *common.TableInfo) (string, bool, error) {

Choose a reason for hiding this comment

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

medium

Consider adding a brief comment explaining the purpose of this function, which is to restore anonymous index names to named indexes in DDL queries.

Comment on lines +60 to +65
newQuery, changed, err := restoreAnonymousIndexToNamedIndex(event.Query, event.TableInfo)
if err != nil {
log.Warn("failed to restore anonymous index name",
zap.String("changefeed", w.ChangefeedID.String()),
zap.String("query", event.Query),
zap.Error(err))

Choose a reason for hiding this comment

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

medium

The log message indicates a failure to restore the anonymous index name. It would be helpful to include the ChangefeedID in the log message to facilitate debugging in environments with multiple changefeeds. This will help correlate the log with the specific changefeed experiencing the issue.

log.Warn("failed to restore anonymous index name",
				zap.String("changefeed", w.ChangefeedID.String()),
				zap.String("query", event.Query),
				zap.Error(err))

Comment on lines +69 to +70
zap.String("query", event.Query),
zap.String("newQuery", newQuery))

Choose a reason for hiding this comment

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

medium

The log message indicates a successful restoration of the anonymous index name. It would be helpful to include the ChangefeedID in the log message to facilitate debugging in environments with multiple changefeeds. This will help correlate the log with the specific changefeed where the restoration occurred.

log.Info("restore anonymous index to named index",
				zap.String("changefeed", w.ChangefeedID.String()),
				zap.String("query", event.Query),
				zap.String("newQuery", newQuery))

@coderabbitai
Copy link
Contributor

coderabbitai bot commented Feb 25, 2026

Important

Review skipped

Draft detected.

Please check the settings in the CodeRabbit UI or the .coderabbit.yaml file in this repository. To trigger a single review, invoke the @coderabbitai review command.

You can disable this status message by setting the reviews.review_status to false in the CodeRabbit configuration file.

Use the checkbox below for a quick retry:

  • 🔍 Trigger review
✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Post copyable unit tests in a comment

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 and usage tips.

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

Labels

do-not-merge/work-in-progress Indicates that a PR should not merge because it is a work in progress. release-note Denotes a PR that will be considered when it comes time to generate release notes. size/XL Denotes a PR that changes 500-999 lines, ignoring generated files.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

unstable test ddl_wait

1 participant