Skip to content

Commit

Permalink
Merge branch 'master' into refine_client_code
Browse files Browse the repository at this point in the history
  • Loading branch information
ti-chi-bot authored Mar 22, 2023
2 parents 6c9b730 + 2d1848b commit f0a006f
Show file tree
Hide file tree
Showing 5 changed files with 27 additions and 5 deletions.
2 changes: 2 additions & 0 deletions .github/workflows/pd-tests.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -6,12 +6,14 @@ on:
- release-4.0
- release-5.*
- release-6.*
- release-7.*
pull_request:
branches:
- master
- release-4.0
- release-5.*
- release-6.*
- release-7.*
concurrency:
group: ${{ github.ref }}-${{ github.workflow }}
cancel-in-progress: true
Expand Down
2 changes: 2 additions & 0 deletions .github/workflows/tso-function-test.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -5,11 +5,13 @@ on:
- master
- release-5.*
- release-6.*
- release-7.*
pull_request:
branches:
- master
- release-5.*
- release-6.*
- release-7.*
concurrency:
group: ${{ github.ref }}-${{ github.workflow }}
cancel-in-progress: true
Expand Down
2 changes: 1 addition & 1 deletion pkg/schedule/filter/filters.go
Original file line number Diff line number Diff line change
Expand Up @@ -639,7 +639,7 @@ func (f *ruleFitFilter) Source(_ config.Config, _ *core.StoreInfo) *plan.Status
// the replaced store can match the source rule.
// RegionA:[1,2,3], move peer1 --> peer2 will not allow, because it's count not match the rule.
// but transfer role peer1 --> peer2, it will support.
func (f *ruleFitFilter) Target(options config.Config, store *core.StoreInfo) *plan.Status {
func (f *ruleFitFilter) Target(_ config.Config, store *core.StoreInfo) *plan.Status {
if f.oldFit.Replace(f.srcStore, store) {
return statusOK
}
Expand Down
16 changes: 14 additions & 2 deletions pkg/schedule/placement/fit.go
Original file line number Diff line number Diff line change
Expand Up @@ -39,15 +39,27 @@ type RegionFit struct {
func (f *RegionFit) Replace(srcStoreID uint64, dstStore *core.StoreInfo) bool {
fit := f.getRuleFitByStoreID(srcStoreID)
// check the target store is fit all constraints.
if fit == nil || !MatchLabelConstraints(dstStore, fit.Rule.LabelConstraints) {
if fit == nil {
return false
}

// the members of the rule are same, it shouldn't check the score.
// it is used to transfer role like transfer leader.
if fit.contain(dstStore.GetID()) {
return true
}

// it should be allowed to exchange role if both the source and target's rule role is same.
// e.g. transfer leader from store 1 to store 2, and store-1 and store-2 are both voter.
targetFit := f.getRuleFitByStoreID(dstStore.GetID())
if targetFit != nil && targetFit.Rule.Role == fit.Rule.Role {
return true
}

// the target store should be fit all constraints.
if !MatchLabelConstraints(dstStore, fit.Rule.LabelConstraints) {
return false
}

score := isolationStoreScore(srcStoreID, dstStore, fit.stores, fit.Rule.LocationLabels)
// restore the source store.
return fit.IsolationScore <= score
Expand Down
10 changes: 8 additions & 2 deletions pkg/schedule/placement/fit_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -133,13 +133,18 @@ func TestReplace(t *testing.T) {
{"1111,2111,3111,1115_learner", []string{"3/voter//zone", "1/learner/engine=tiflash/host"}, 1115, 2115, true},
// replace failed when the target store is not tiflash
{"1111,2111,3111,1115_learner", []string{"3/voter//zone", "1/learner/engine=tiflash/host"}, 1115, 1112, false},
{"1111_lead,2111,3111", []string{"1/leader/zone=zone1/zone", "2/voter//zone"}, 1111, 1112, true},
{"1111_leader,2111,3111", []string{"1/leader/zone=zone1/zone", "2/voter//zone"}, 1111, 1112, true},
// replace failed when the leader is not match the leader constraint.
{"1111_leader,2111,3111", []string{"1/leader/zone=zone1/zone", "2/voter//zone"}, 1111, 2112, false},
// transfer leader
{"1111_leader,1121,1131", []string{"1/leader/host=host1+host2/host", "3/voter//host"}, 1111, 1121, true},
{"1111_leader,1121,1131", []string{"1/leader/host=host1+host2/host", "2/voter//host"}, 1111, 1121, true},
// replace failed when the leader is not match the leader constraint.
{"1111_leader,1121,1131", []string{"1/leader/host=host1+host2/host", "2/voter//host"}, 1111, 1131, false},

// transfer leader success with different rule when the role is the same.
{"1111_leader,1121,1131", []string{"1/voter/host=host1/host", "1/voter/host=host2/host", "1/voter/host=host3/host"}, 1111, 1121, true},
//// transfer leader failed with different rule, but the role isn't same.
{"1111_leader,1121,1131", []string{"1/leader/host=host1/host", "1/voter/host=host2/host", "1/voter/host=host3/host"}, 1111, 1121, false},
}
for _, tc := range testCases {
region := makeRegion(tc.region)
Expand All @@ -148,6 +153,7 @@ func TestReplace(t *testing.T) {
rules = append(rules, makeRule(r))
}
rf := fitRegion(stores.GetStores(), region, rules, false)
re.True(rf.IsSatisfied())
rf.regionStores = stores.GetStores()
re.Equal(rf.Replace(tc.srcStoreID, stores.GetStore(tc.dstStoreID)), tc.ok)
}
Expand Down

0 comments on commit f0a006f

Please sign in to comment.