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

lightning: add precheck that PD and TiDB must belongs to same cluster #57709

Merged
merged 10 commits into from
Nov 27, 2024

Conversation

lance6716
Copy link
Contributor

@lance6716 lance6716 commented Nov 26, 2024

What problem does this PR solve?

Issue Number: close #57704

Problem Summary:

What changed and how does it work?

lance6716
summarize the file changed of this PR. No need to mention the details like filename or number of lines changed, just from logical and abstract view to write a summary.

Copilot
The changes in PR #57709 for the pingcap/tidb repository include adding a precheck function to ensure that PD and TiDB belong to the same cluster. This new validation logic is integrated into the existing precheck mechanisms within the lightning package.

Check List

Tests

  • Unit test
  • Integration test: CI failed when I forgot to strip the URL scheme
  • Manual test (add detailed scripts or steps below)
  • No need to test
    • I checked and no code files have been changed.

Side effects

  • Performance regression: Consumes more CPU
  • Performance regression: Consumes more Memory
  • Breaking backward compatibility

Documentation

  • Affects user behaviors
  • Contains syntax changes
  • Contains variable changes
  • Contains experimental features
  • Changes MySQL compatibility

Release note

Please refer to Release Notes Language Style Guide to write a quality release note.

None

Signed-off-by: lance6716 <lance6716@gmail.com>
@ti-chi-bot ti-chi-bot bot added do-not-merge/work-in-progress Indicates that a PR should not merge because it is a work in progress. release-note-none Denotes a PR that doesn't merit a release note. size/L Denotes a PR that changes 100-499 lines, ignoring generated files. labels Nov 26, 2024
Copy link

tiprow bot commented Nov 26, 2024

Hi @lance6716. Thanks for your PR.

PRs from untrusted users cannot be marked as trusted with /ok-to-test in this repo meaning untrusted PR authors can never trigger tests themselves. Collaborators can still trigger tests on the PR using /test all.

I understand the commands that are listed here.

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-sigs/prow repository.

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

codecov bot commented Nov 26, 2024

Codecov Report

Attention: Patch coverage is 61.11111% with 35 lines in your changes missing coverage. Please review.

Project coverage is 73.7008%. Comparing base (d02d48a) to head (d7a8dfb).
Report is 16 commits behind head on master.

Additional details and impacted files
@@               Coverage Diff                @@
##             master     #57709        +/-   ##
================================================
+ Coverage   72.8318%   73.7008%   +0.8690%     
================================================
  Files          1677       1707        +30     
  Lines        463944     476191     +12247     
================================================
+ Hits         337899     350957     +13058     
+ Misses       105169     103631      -1538     
- Partials      20876      21603       +727     
Flag Coverage Δ
integration 46.1800% <36.6666%> (?)
unit 72.2268% <59.4594%> (+0.0029%) ⬆️

Flags with carried forward coverage won't be shown. Click here to find out more.

Components Coverage Δ
dumpling 52.7673% <ø> (ø)
parser ∅ <ø> (∅)
br 45.1334% <ø> (-0.3779%) ⬇️

@lance6716
Copy link
Contributor Author

/retest

Copy link

tiprow bot commented Nov 26, 2024

@lance6716: Cannot trigger testing until a trusted user reviews the PR and leaves an /ok-to-test message.

In response to this:

/retest

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-sigs/prow repository.

@lance6716
Copy link
Contributor Author

/retest

Copy link

tiprow bot commented Nov 26, 2024

@lance6716: Cannot trigger testing until a trusted user reviews the PR and leaves an /ok-to-test message.

In response to this:

/retest

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-sigs/prow repository.

@wuhuizuo
Copy link
Contributor

/retest

Copy link

tiprow bot commented Nov 26, 2024

@wuhuizuo: Cannot trigger testing until a trusted user reviews the PR and leaves an /ok-to-test message.

In response to this:

/retest

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-sigs/prow repository.

Signed-off-by: lance6716 <lance6716@gmail.com>
@lance6716 lance6716 changed the title [WIP]lightning: add precheck that PD and TiDB must belongs to same cluster lightning: add precheck that PD and TiDB must belongs to same cluster Nov 27, 2024
@ti-chi-bot ti-chi-bot bot removed the do-not-merge/work-in-progress Indicates that a PR should not merge because it is a work in progress. label Nov 27, 2024
Signed-off-by: lance6716 <lance6716@gmail.com>
return nil, errors.Trace(err)
}

// if intersection is not empty, we can say URLs from TiDB and PD are from the same cluster
Copy link
Contributor

Choose a reason for hiding this comment

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

please comment that there will be false positive if user configs a LB address

Copy link
Contributor Author

Choose a reason for hiding this comment

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

PD addresses read from PD or TiDB are from the same source, which is the etcd member's ClientURL. If PD has multiple reachable endpoints on network, it will not cause false positive. I will add comment to explain the source of addresses in next commit

Copy link
Contributor

Choose a reason for hiding this comment

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

if it fails to get, will return user configured address

		pdAddrsGetter = func(ctx context.Context) []string {
			leaderInfo, err := pdHTTPCli.GetLeader(ctx)
			if err != nil {
				return []string{cfg.TiDB.PdAddr}
			}
			addrs := leaderInfo.GetClientUrls()
			if len(addrs) == 0 {
				return []string{cfg.TiDB.PdAddr}
			}

Copy link
Contributor Author

Choose a reason for hiding this comment

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

@ti-chi-bot ti-chi-bot bot added approved needs-1-more-lgtm Indicates a PR needs 1 more LGTM. labels Nov 27, 2024
Signed-off-by: lance6716 <lance6716@gmail.com>
Copy link

ti-chi-bot bot commented Nov 27, 2024

[APPROVALNOTIFIER] This PR is APPROVED

This pull-request has been approved by: D3Hunter, tangenta

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

The pull request process is described here

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 lgtm and removed needs-1-more-lgtm Indicates a PR needs 1 more LGTM. labels Nov 27, 2024
Copy link

ti-chi-bot bot commented Nov 27, 2024

[LGTM Timeline notifier]

Timeline:

  • 2024-11-27 06:44:31.439505657 +0000 UTC m=+618859.059160172: ☑️ agreed by D3Hunter.
  • 2024-11-27 07:25:38.562844839 +0000 UTC m=+621326.182499353: ☑️ agreed by tangenta.

@lance6716
Copy link
Contributor Author

/hold

wait for CDC reuse our logic

@ti-chi-bot ti-chi-bot bot added the do-not-merge/hold Indicates that a PR should not merge because someone has issued a /hold command. label Nov 27, 2024
@lance6716
Copy link
Contributor Author

/unhold

@ti-chi-bot ti-chi-bot bot removed the do-not-merge/hold Indicates that a PR should not merge because someone has issued a /hold command. label Nov 27, 2024
@wlwilliamx
Copy link

/hold
wait for CDC to reuse

@ti-chi-bot ti-chi-bot bot added the do-not-merge/hold Indicates that a PR should not merge because someone has issued a /hold command. label Nov 27, 2024
Comment on lines +1440 to +1441
db *sql.DB
pdAddrsGetter func(context.Context) []string
Copy link

@wlwilliamx wlwilliamx Nov 27, 2024

Choose a reason for hiding this comment

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

I recommend replacing these fields in the struct like:

getPDAddrsFromSQL func(context.Context) []string
getPDAddrsFromPD func(context.Context) []string

This change improves flexibility and provides a clearer abstraction by distinguishing between two different PD address getters(and it's better for CDC to use in upstream and downstream). Additionally, it simplifies unit testing, as you can now mock and test the two getters independently.

Copy link
Contributor Author

@lance6716 lance6716 Nov 27, 2024

Choose a reason for hiding this comment

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

distinguishing between upstream and downstream PD address

There's no upstream PD addresses. However I understand your meaning is check the two ways to get PD addresses.

  1. I don't know how CDC can reuse this struct pdTiDBFromSameClusterCheckItem, because the intersection assertion can not be configurated, and CDC wants to assert non-intersection.

Signed-off-by: lance6716 <lance6716@gmail.com>
return true, addrs, addrs2, nil
}
}
return false, addrs, addrs2, nil

Choose a reason for hiding this comment

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

We can add a log to print addrs and addrs2. And it's no need to return these addrs.

@wlwilliamx
Copy link

LGTM

Signed-off-by: lance6716 <lance6716@gmail.com>
@lance6716
Copy link
Contributor Author

/unhold

@ti-chi-bot ti-chi-bot bot removed the do-not-merge/hold Indicates that a PR should not merge because someone has issued a /hold command. label Nov 27, 2024
@ti-chi-bot ti-chi-bot bot merged commit ca395fa into pingcap:master Nov 27, 2024
23 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
approved lgtm release-note-none Denotes a PR that doesn't merit a release note. size/L Denotes a PR that changes 100-499 lines, ignoring generated files.
Projects
None yet
Development

Successfully merging this pull request may close these issues.

lightning physical should check the TiDB and PD address in config are in the same cluster
5 participants