Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

syncer(dm): fix different output format for operate-schema get (#5824) #5884

Conversation

ti-chi-bot
Copy link
Member

This is an automated cherry-pick of #5824

What problem does this PR solve?

Issue Number: close #5688

What is changed and how it works?

  • If the checkpoint doesn't exist and the schema is retrieved from the downstream, replace the downstream table name with the requested upstream table name

  • Delete all \n in the SQL results for the operate-schema result

Check List

Tests

  • Unit test

Questions

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

Release note

None

Signed-off-by: ti-chi-bot <ti-community-prow-bot@tidb.io>
@ti-chi-bot
Copy link
Member Author

[REVIEW NOTIFICATION]

This pull request has not been approved.

To complete the pull request process, please ask the reviewers in the list to review by filling /cc @reviewer in the comment.
After your PR has acquired the required number of LGTMs, you can assign this pull request to the committer in the list by filling /assign @committer in the comment to help you merge this pull request.

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

Reviewer can indicate their review by submitting an approval review.
Reviewer can cancel approval by submitting a request changes review.

@ti-chi-bot ti-chi-bot added do-not-merge/cherry-pick-not-approved release-note-none Denotes a PR that doesn't merit a release note. area/dm Issues or PRs related to DM. first-time-contributor Indicates that the PR was contributed by an external member and is a first-time contributor. require-LGT1 Indicates that the PR requires an LGTM. size/M Denotes a PR that changes 30-99 lines, ignoring generated files. status/LGT1 Indicates that a PR has LGTM 1. type/cherry-pick-for-release-5.4 This PR is cherry-picked to release-5.4 from a source PR. labels Jun 15, 2022
@ti-chi-bot ti-chi-bot added the needs-rebase Indicates a PR cannot be merged because it has merge conflicts with HEAD. label Jun 17, 2022
@VelocityLight VelocityLight added cherry-pick-approved Cherry pick PR approved by release team. and removed do-not-merge/cherry-pick-not-approved labels Jun 22, 2022
@ti-chi-bot ti-chi-bot added size/L Denotes a PR that changes 100-499 lines, ignoring generated files. and removed size/M Denotes a PR that changes 30-99 lines, ignoring generated files. labels Jun 24, 2022
@ti-chi-bot ti-chi-bot added size/M Denotes a PR that changes 30-99 lines, ignoring generated files. and removed needs-rebase Indicates a PR cannot be merged because it has merge conflicts with HEAD. size/L Denotes a PR that changes 100-499 lines, ignoring generated files. labels Jun 24, 2022
@ForwardStar
Copy link
Contributor

/run-verify

@ti-chi-bot ti-chi-bot added size/L Denotes a PR that changes 100-499 lines, ignoring generated files. and removed size/M Denotes a PR that changes 30-99 lines, ignoring generated files. labels Jun 24, 2022
case pb.SchemaOp_GetSchema:
// when task is paused, schemaTracker is closed. We get the table structure from checkpoint.
ti := s.checkpoint.GetTableInfo(req.Database, req.Table)
if ti == nil {
s.tctx.L().Info("table schema is not in checkpoint, fetch from downstream",
zap.String("table", sourceTable.String()))
targetTable := s.route(sourceTable)
return dbconn.GetTableCreateSQL(s.tctx.WithContext(ctx), s.downstreamTrackConn, targetTable.String())
Copy link
Contributor

Choose a reason for hiding this comment

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

I think we don't need to remove the dbconn.GetTableCreateSQL() calling and replace it with SHOW CREATE TABLE calling. But rather:

			result, err2 := dbconn.GetTableCreateSQL(s.tctx.WithContext(ctx), s.downstreamTrackConn, targetTable.String())
			result = strings.Replace(result, fmt.Sprintf("CREATE TABLE %s", quotes.QuoteName(targetTable.Name)), fmt.Sprintf("CREATE TABLE %s", quotes.QuoteName(sourceTable.Name)), 1)
			return utils.CreateTableSQLToOneRow(result), err2

Copy link
Contributor

Choose a reason for hiding this comment

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

dbconn.GetTableCreateSQL() is not included in the old-version branch. Moreover, the committed logic is not equal to dbconn.GetTableCreateSQL() since conn.QuerySQL() between the versions are of different APIs.

Copy link
Contributor

Choose a reason for hiding this comment

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

OK. Can we reuse (*schema.Tracker).GetCreateTable() ? In my opinion, this PR mainly changes the table name from target table name to source table name, and changes the sql into a single line ( not in this version ). Maybe :

targetTable := s.route(sourceTable)
result, err2 := s.schemaTracker.GetCreateTable(ctx, targetTable)
result = strings.Replace(result, fmt.Sprintf("CREATE TABLE %s", quotes.QuoteName(targetTable.Name)), fmt.Sprintf("CREATE TABLE %s", quotes.QuoteName(sourceTable.Name)), 1)
return result, err2

Copy link
Contributor

Choose a reason for hiding this comment

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

Actually I am not sure about this. In my opinion, getting the table from schema tracker is an incorrect version. Getting schema can only be operated when task is paused. However, when the task is paused, the schema tracker is down and nothing would return. I have tried to build the original version and observed this phenomenon.

Copy link
Contributor

Choose a reason for hiding this comment

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

OK. Seems PR #5350 fixed this problem. Does that PR also need to be cherry-picked into 5.4 ? @lance6716

Copy link
Contributor

Choose a reason for hiding this comment

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

done by #5415

@ForwardStar
Copy link
Contributor

/close

@ti-chi-bot
Copy link
Member Author

@ForwardStar: Closed this PR.

In response to this:

/close

Instructions for interacting with me using PR comments are available here. If you have questions or suggestions related to my behavior, please file an issue against the kubernetes/test-infra repository.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
area/dm Issues or PRs related to DM. cherry-pick-approved Cherry pick PR approved by release team. first-time-contributor Indicates that the PR was contributed by an external member and is a first-time contributor. release-note-none Denotes a PR that doesn't merit a release note. require-LGT1 Indicates that the PR requires an LGTM. size/L Denotes a PR that changes 100-499 lines, ignoring generated files. status/LGT1 Indicates that a PR has LGTM 1. type/cherry-pick-for-release-5.4 This PR is cherry-picked to release-5.4 from a source PR.
Projects
None yet
Development

Successfully merging this pull request may close these issues.

5 participants