@@ -13,19 +13,29 @@ const (
1313 RoutingPolicyPreferIdle = "prefer-idle"
1414 RoutingPolicyRandom = "random"
1515 RoutingPolicyIdlest = "idlest"
16+
17+ // MatchClientCIDRStr is used for MatchClientCIDR.
18+ MatchClientCIDRStr = "client_cidr"
19+ // MatchProxyCIDRStr is used for MatchProxyCIDR.
20+ MatchProxyCIDRStr = "proxy_cidr"
1621)
1722
1823type Balance struct {
19- LabelName string `yaml:"label-name,omitempty" toml:"label-name,omitempty" json:"label-name,omitempty" reloadable:"true"`
20- RoutingRule string `yaml:"routing-rule,omitempty" toml:"routing-rule,omitempty" json:"routing-rule,omitempty" reloadable:"false"`
21- Policy string `yaml:"policy,omitempty" toml:"policy,omitempty" json:"policy,omitempty" reloadable:"true"`
22- RoutingPolicy string `yaml:"routing-policy,omitempty" toml:"routing-policy,omitempty" json:"routing-policy,omitempty" reloadable:"true"`
23- Status Factor `yaml:"status,omitempty" toml:"status,omitempty" json:"status,omitempty" reloadable:"true"`
24- Health Factor `yaml:"health,omitempty" toml:"health,omitempty" json:"health,omitempty" reloadable:"true"`
25- Memory Factor `yaml:"memory,omitempty" toml:"memory,omitempty" json:"memory,omitempty" reloadable:"true"`
26- CPU Factor `yaml:"cpu,omitempty" toml:"cpu,omitempty" json:"cpu,omitempty" reloadable:"true"`
27- Location Factor `yaml:"location,omitempty" toml:"location,omitempty" json:"location,omitempty" reloadable:"true"`
28- ConnCount Factor `yaml:"conn-count,omitempty" toml:"conn-count,omitempty" json:"conn-count,omitempty" reloadable:"true"`
24+ LabelName string `yaml:"label-name,omitempty" toml:"label-name,omitempty" json:"label-name,omitempty" reloadable:"true"`
25+ RoutingRule string `yaml:"routing-rule,omitempty" toml:"routing-rule,omitempty" json:"routing-rule,omitempty" reloadable:"false"`
26+ Policy string `yaml:"policy,omitempty" toml:"policy,omitempty" json:"policy,omitempty" reloadable:"true"`
27+ RoutingPolicy string `yaml:"routing-policy,omitempty" toml:"routing-policy,omitempty" json:"routing-policy,omitempty" reloadable:"true"`
28+ Status Factor `yaml:"status,omitempty" toml:"status,omitempty" json:"status,omitempty" reloadable:"true"`
29+ Health Factor `yaml:"health,omitempty" toml:"health,omitempty" json:"health,omitempty" reloadable:"true"`
30+ Memory Factor `yaml:"memory,omitempty" toml:"memory,omitempty" json:"memory,omitempty" reloadable:"true"`
31+ CPU Factor `yaml:"cpu,omitempty" toml:"cpu,omitempty" json:"cpu,omitempty" reloadable:"true"`
32+ Location Factor `yaml:"location,omitempty" toml:"location,omitempty" json:"location,omitempty" reloadable:"true"`
33+ ConnCount ConnCountFactor `yaml:"conn-count,omitempty" toml:"conn-count,omitempty" json:"conn-count,omitempty" reloadable:"true"`
34+ }
35+
36+ type ConnCountFactor struct {
37+ Factor `yaml:",inline" toml:",inline" json:",inline"`
38+ CountRatioThreshold float64 `yaml:"count-ratio-threshold,omitempty" toml:"count-ratio-threshold,omitempty" json:"count-ratio-threshold,omitempty" reloadable:"true"`
2939}
3040
3141type Factor struct {
@@ -35,20 +45,26 @@ type Factor struct {
3545func (b * Balance ) Check () error {
3646 switch b .Policy {
3747 case BalancePolicyResource , BalancePolicyLocation , BalancePolicyConnection :
38- return nil
3948 case "" :
4049 b .Policy = BalancePolicyResource
4150 default :
4251 return errors .Wrapf (ErrInvalidConfigValue , "invalid balance.policy" )
4352 }
53+
54+ switch b .RoutingRule {
55+ case MatchClientCIDRStr , MatchProxyCIDRStr , "" :
56+ default :
57+ return errors .Wrapf (ErrInvalidConfigValue , "invalid balance.routing-rule" )
58+ }
59+
4460 switch b .RoutingPolicy {
4561 case RoutingPolicyPreferIdle , RoutingPolicyRandom :
46- return nil
4762 case "" :
4863 b .RoutingPolicy = RoutingPolicyPreferIdle
4964 default :
5065 return errors .Wrapf (ErrInvalidConfigValue , "invalid balance.route-policy" )
5166 }
67+
5268 if b .Status .MigrationsPerSecond < 0 {
5369 return errors .Wrapf (ErrInvalidConfigValue , "invalid balance.status.migrations-per-second" )
5470 }
@@ -67,6 +83,9 @@ func (b *Balance) Check() error {
6783 if b .ConnCount .MigrationsPerSecond < 0 {
6884 return errors .Wrapf (ErrInvalidConfigValue , "invalid balance.conn-count.migrations-per-second" )
6985 }
86+ if b .ConnCount .CountRatioThreshold != 0 && b .ConnCount .CountRatioThreshold <= 1 {
87+ return errors .Wrapf (ErrInvalidConfigValue , "invalid balance.conn-count.count-ratio-threshold" )
88+ }
7089 return nil
7190}
7291
0 commit comments