}
if aok {
- for i := 0; i < backP.(*Back).Weight; i++ {
+ for i := uint(0); i < backP.(*Back).Weight; i++ {
backIs = append(backIs, backP.(*Back))
}
}
logger.Info(`I:`, fmt.Sprintf("%v > %v > %v", t.config.Addr, t.Path, t.Backs[i].Name))
t.backMap.Store(t.Backs[i].Id(), &t.Backs[i])
}
+ t.Backs[i].index = i
t.Backs[i].SwapSign(logger)
}
}
for i := 0; i < len(t.Backs); i++ {
if ok, e := t.Backs[i].getFiliterReqHeader().Match(r.Header); ok && e == nil {
t.Backs[i].route = t
- for k := 0; k < t.Backs[i].Weight; k++ {
+ for k := uint(0); k < t.Backs[i].Weight; k++ {
backLink = append(backLink, &t.Backs[i])
}
}
}
type Back struct {
- route *Route `json:"-"`
- lock sync.RWMutex `json:"-"`
- upT time.Time `json:"-"`
- disableC int `json:"-"`
- dealingC int `json:"-"`
- chosenC int `json:"-"`
+ route *Route `json:"-"`
+ lock sync.RWMutex `json:"-"`
+ upT time.Time `json:"-"`
+ index int `json:"-"`
+ disableC uint `json:"-"`
+ dealingC uint `json:"-"`
+ chosenC uint `json:"-"`
+
lastResDru time.Duration `json:"-"`
Name string `json:"name"`
To string `json:"to"`
- Weight int `json:"weight"`
+ Weight uint `json:"weight"`
AlwaysUp bool `json:"alwaysUp"`
Setting
rollRuleMap[`disable_MinFirst`] = func(backLink []*Back) {
slices.SortStableFunc(backLink, func(a, b *Back) int {
- return a.disableC/(a.Weight+1) - b.disableC/(b.Weight+1)
+ return int(a.disableC/(a.Weight+1) - b.disableC/(b.Weight+1))
})
}
rollRuleMap[`dealingC_MinFirst`] = func(backLink []*Back) {
slices.SortStableFunc(backLink, func(a, b *Back) int {
- return a.dealingC/(a.Weight+1) - b.dealingC/(b.Weight+1)
+ return int(a.dealingC/(a.Weight+1) - b.dealingC/(b.Weight+1))
})
}
rollRuleMap[`chosenC_MinFirst`] = func(backLink []*Back) {
slices.SortStableFunc(backLink, func(a, b *Back) int {
- return a.chosenC/(a.Weight+1) - b.chosenC/(b.Weight+1)
+ return int(a.chosenC/(a.Weight+1) - b.chosenC/(b.Weight+1))
+ })
+ }
+
+ rollRuleMap[`loop`] = func(backLink []*Back) {
+ slices.SortStableFunc(backLink, func(a, b *Back) int {
+ return a.index - b.index
})
}
}