Cap min and max ring size to 4K (#5801)

This commit is contained in:
apolcyn
2022-11-18 10:22:08 -08:00
committed by GitHub
parent 0238b6e1ce
commit ff146806d2
2 changed files with 10 additions and 2 deletions

View File

@ -249,7 +249,7 @@ func TestParseConfig(t *testing.T) {
}, },
XDSLBPolicy: &internalserviceconfig.BalancerConfig{ XDSLBPolicy: &internalserviceconfig.BalancerConfig{
Name: ringhash.Name, Name: ringhash.Name,
Config: &ringhash.LBConfig{MinRingSize: 1024, MaxRingSize: 8388608}, // Ringhash LB config with default min and max. Config: &ringhash.LBConfig{MinRingSize: 1024, MaxRingSize: 4096}, // Ringhash LB config with default min and max.
}, },
}, },
wantErr: false, wantErr: false,

View File

@ -35,7 +35,9 @@ type LBConfig struct {
const ( const (
defaultMinSize = 1024 defaultMinSize = 1024
defaultMaxSize = 8 * 1024 * 1024 // 8M defaultMaxSize = 4096
// TODO(apolcyn): make makeRingSizeCap configurable, with either a dial option or global setting
maxRingSizeCap = 4096
) )
func parseConfig(c json.RawMessage) (*LBConfig, error) { func parseConfig(c json.RawMessage) (*LBConfig, error) {
@ -49,6 +51,12 @@ func parseConfig(c json.RawMessage) (*LBConfig, error) {
if cfg.MaxRingSize == 0 { if cfg.MaxRingSize == 0 {
cfg.MaxRingSize = defaultMaxSize cfg.MaxRingSize = defaultMaxSize
} }
if cfg.MinRingSize > maxRingSizeCap {
cfg.MinRingSize = maxRingSizeCap
}
if cfg.MaxRingSize > maxRingSizeCap {
cfg.MaxRingSize = maxRingSizeCap
}
if cfg.MinRingSize > cfg.MaxRingSize { if cfg.MinRingSize > cfg.MaxRingSize {
return nil, fmt.Errorf("min %v is greater than max %v", cfg.MinRingSize, cfg.MaxRingSize) return nil, fmt.Errorf("min %v is greater than max %v", cfg.MinRingSize, cfg.MaxRingSize)
} }