@@ -122,26 +122,21 @@ func (s *StoreInfo) RegionScore(highSpaceRatio, lowSpaceRatio float64, delta int
122
122
123
123
var score float64
124
124
125
- // lowSpaceRatio shouldn't greater than highSpaceRatio
126
- if lowSpaceRatio > highSpaceRatio {
127
- lowSpaceRatio = highSpaceRatio
128
- }
129
-
130
125
// because of rocksdb compression, region size is larger than actual used size
131
126
amplification := float64 (s .RegionSize ) / (float64 (s .Stats .GetUsedSize ()) / (1 << 20 ))
132
127
133
- if available - float64 (delta )/ amplification >= highSpaceRatio * capacity || lowSpaceRatio < 0 || lowSpaceRatio > 1 {
128
+ if available - float64 (delta )/ amplification >= ( 1 - highSpaceRatio ) * capacity {
134
129
score = float64 (s .RegionSize + delta )
135
- } else if available - float64 (delta )/ amplification <= lowSpaceRatio * capacity || highSpaceRatio < 0 || highSpaceRatio > 1 {
130
+ } else if available - float64 (delta )/ amplification <= ( 1 - lowSpaceRatio ) * capacity {
136
131
score = maxScore - (available - float64 (delta )/ amplification )
137
132
} else {
138
133
// to make the score function continuous, we use linear function y = k * x + b as transition period
139
134
// from above we know that there are two points must on the function image
140
135
// p1((1-highSpaceRatio)*capacity*amplification, (1-highSpaceRatio)*capacity*amplification) and
141
136
// p2((1-lowSpaceRatio)*capacity*amplification, maxScore-lowSpaceRatio*capacity)
142
137
// so k = (y2 - y1) / (x2 - x1)
143
- x1 , y1 := ( 1 - highSpaceRatio ) * capacity * amplification , ( 1 - highSpaceRatio ) * capacity * amplification
144
- x2 , y2 := ( 1 - lowSpaceRatio ) * capacity * amplification , maxScore - lowSpaceRatio * capacity
138
+ x1 , y1 := highSpaceRatio * capacity * amplification , highSpaceRatio * capacity * amplification
139
+ x2 , y2 := lowSpaceRatio * capacity * amplification , maxScore - ( 1 - lowSpaceRatio ) * capacity
145
140
146
141
k := (y2 - y1 ) / (x2 - x1 )
147
142
b := y1 - k * x1
@@ -166,7 +161,7 @@ func (s *StoreInfo) AvailableRatio() float64 {
166
161
167
162
// IsLowSpace checks if the store is lack of space.
168
163
func (s * StoreInfo ) IsLowSpace (lowSpaceRatio float64 ) bool {
169
- return s .Stats != nil && s .AvailableRatio () < lowSpaceRatio
164
+ return s .Stats != nil && s .AvailableRatio () < 1 - lowSpaceRatio
170
165
}
171
166
172
167
// ResourceCount reutrns count of leader/region in the store.
0 commit comments