Skip to content

Commit 1d6f18f

Browse files
fixup! Set Azure Rate Limit Defaults from Env
Signed-off-by: Marc Sensenich <[email protected]>
1 parent 0dd4891 commit 1d6f18f

File tree

2 files changed

+108
-13
lines changed

2 files changed

+108
-13
lines changed

cluster-autoscaler/cloudprovider/azure/azure_manager.go

Lines changed: 13 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -66,8 +66,12 @@ const (
6666
backoffJitterDefault = 1.0
6767

6868
// rate limit
69-
rateLimitQPSDefault = 1.0
69+
rateLimitQPSDefault float32 = 1.0
7070
rateLimitBucketDefault = 5
71+
rateLimitReadQPSEnvVar = "RATE_LIMIT_READ_QPS"
72+
rateLimitReadBucketsEnvVar = "RATE_LIMIT_READ_BUCKETS"
73+
rateLimitWriteQPSEnvVar = "RATE_LIMIT_WRITE_QPS"
74+
rateLimitWriteBucketsEnvVar = "RATE_LIMIT_WRITE_BUCKETS"
7175
)
7276

7377
var validLabelAutoDiscovererKeys = strings.Join([]string{
@@ -155,52 +159,48 @@ func InitializeCloudProviderRateLimitConfig(config *CloudProviderRateLimitConfig
155159

156160
// Assign read rate limit defaults if no configuration was passed in.
157161
if config.CloudProviderRateLimitQPS == 0 {
158-
if rateLimitQPSFromEnv := os.Getenv("RATE_LIMIT_READ_QPS"); rateLimitQPSFromEnv != "" {
162+
if rateLimitQPSFromEnv := os.Getenv(rateLimitReadQPSEnvVar); rateLimitQPSFromEnv != "" {
159163
rateLimitQPS, err := strconv.ParseFloat(rateLimitQPSFromEnv, 0)
160164
if err != nil {
161-
return fmt.Errorf("failed to parse RATE_LIMIT_READ_QPS: %q, %v", rateLimitQPSFromEnv, err)
165+
return fmt.Errorf("failed to parse %s: %q, %v", rateLimitReadQPSEnvVar, rateLimitQPSFromEnv, err)
162166
}
163-
klog.V(4).Infof("Set read rate limit QPS to %f", rateLimitQPS)
164167
config.CloudProviderRateLimitQPS = float32(rateLimitQPS)
165168
} else {
166169
config.CloudProviderRateLimitQPS = rateLimitQPSDefault
167170
}
168171
}
169172

170173
if config.CloudProviderRateLimitBucket == 0 {
171-
if rateLimitBucketFromEnv := os.Getenv("RATE_LIMIT_READ_BUCKETS"); rateLimitBucketFromEnv != "" {
174+
if rateLimitBucketFromEnv := os.Getenv(rateLimitReadBucketsEnvVar); rateLimitBucketFromEnv != "" {
172175
rateLimitBucket, err := strconv.ParseInt(rateLimitBucketFromEnv, 10, 0)
173176
if err != nil {
174-
return fmt.Errorf("failed to parse RATE_LIMIT_READ_BUCKETS: %q, %v", rateLimitBucketFromEnv, err)
177+
return fmt.Errorf("failed to parse %s: %q, %v", rateLimitReadBucketsEnvVar, rateLimitBucketFromEnv, err)
175178
}
176179
config.CloudProviderRateLimitBucket = int(rateLimitBucket)
177-
klog.V(4).Infof("Set read rate limit buckets to %d", rateLimitBucket)
178180
} else {
179181
config.CloudProviderRateLimitBucket = rateLimitBucketDefault
180182
}
181183
}
182184

183185
// Assign write rate limit defaults if no configuration was passed in.
184186
if config.CloudProviderRateLimitQPSWrite == 0 {
185-
if rateLimitQPSWriteFromEnv := os.Getenv("RATE_LIMIT_WRITE_QPS"); rateLimitQPSWriteFromEnv != "" {
187+
if rateLimitQPSWriteFromEnv := os.Getenv(rateLimitWriteQPSEnvVar); rateLimitQPSWriteFromEnv != "" {
186188
rateLimitQPSWrite, err := strconv.ParseFloat(rateLimitQPSWriteFromEnv, 0)
187189
if err != nil {
188-
return fmt.Errorf("failed to parse RATE_LIMIT_WRITE_QPS: %q, %v", rateLimitQPSWriteFromEnv, err)
190+
return fmt.Errorf("failed to parse %s: %q, %v", rateLimitWriteQPSEnvVar, rateLimitQPSWriteFromEnv, err)
189191
}
190192
config.CloudProviderRateLimitQPSWrite = float32(rateLimitQPSWrite)
191-
klog.V(4).Infof("Set write rate limit QPS to %f", rateLimitQPSWrite)
192193
} else {
193194
config.CloudProviderRateLimitQPSWrite = config.CloudProviderRateLimitQPS
194195
}
195196
}
196197

197198
if config.CloudProviderRateLimitBucketWrite == 0 {
198-
if rateLimitBucketWriteFromEnv := os.Getenv("RATE_LIMIT_WRITE_BUCKETS"); rateLimitBucketWriteFromEnv != "" {
199+
if rateLimitBucketWriteFromEnv := os.Getenv(rateLimitWriteBucketsEnvVar); rateLimitBucketWriteFromEnv != "" {
199200
rateLimitBucketWrite, err := strconv.ParseInt(rateLimitBucketWriteFromEnv, 10, 0)
200201
if err != nil {
201-
return fmt.Errorf("failed to parse RATE_LIMIT_WRITE_BUCKET: %q, %v", rateLimitBucketWriteFromEnv, err)
202+
return fmt.Errorf("failed to parse %s: %q, %v", rateLimitWriteBucketsEnvVar, rateLimitBucketWriteFromEnv, err)
202203
}
203-
klog.V(4).Infof("Set write rate limit buckets to %d", rateLimitBucketWrite)
204204
config.CloudProviderRateLimitBucketWrite = int(rateLimitBucketWrite)
205205
} else {
206206
config.CloudProviderRateLimitBucketWrite = config.CloudProviderRateLimitBucket

cluster-autoscaler/cloudprovider/azure/azure_manager_test.go

Lines changed: 95 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@ package azure
1818

1919
import (
2020
"fmt"
21+
"os"
2122
"reflect"
2223
"strings"
2324
"testing"
@@ -366,3 +367,97 @@ func TestFetchAutoAsgsVmss(t *testing.T) {
366367
assert.Equal(t, minVal, asgs[0].MinSize())
367368
assert.Equal(t, maxVal, asgs[0].MaxSize())
368369
}
370+
371+
func TestInitializeCloudProviderRateLimitConfigWithNoConfigReturnsNoError(t *testing.T) {
372+
err := InitializeCloudProviderRateLimitConfig(nil)
373+
assert.Nil(t, err, "err should be nil")
374+
}
375+
376+
func TestInitializeCloudProviderRateLimitConfigWithNoRateLimitSettingsReturnsDefaults(t *testing.T) {
377+
emptyConfig := &CloudProviderRateLimitConfig{}
378+
err := InitializeCloudProviderRateLimitConfig(emptyConfig)
379+
380+
assert.NoError(t, err)
381+
assert.Equal(t, emptyConfig.CloudProviderRateLimitQPS, rateLimitQPSDefault)
382+
assert.Equal(t, emptyConfig.CloudProviderRateLimitBucket, rateLimitBucketDefault)
383+
assert.Equal(t, emptyConfig.CloudProviderRateLimitQPSWrite, rateLimitQPSDefault)
384+
assert.Equal(t, emptyConfig.CloudProviderRateLimitBucketWrite, rateLimitBucketDefault)
385+
}
386+
387+
func TestInitializeCloudProviderRateLimitConfigWithReadRateLimitSettingsFromEnv(t *testing.T) {
388+
emptyConfig := &CloudProviderRateLimitConfig{}
389+
var rateLimitReadQPS float32 = 3.0
390+
rateLimitReadBuckets := 10
391+
os.Setenv(rateLimitReadQPSEnvVar, fmt.Sprintf("%.1f", rateLimitReadQPS))
392+
os.Setenv(rateLimitReadBucketsEnvVar, fmt.Sprintf("%d", rateLimitReadBuckets))
393+
394+
err := InitializeCloudProviderRateLimitConfig(emptyConfig)
395+
assert.NoError(t, err)
396+
assert.Equal(t, emptyConfig.CloudProviderRateLimitQPS, rateLimitReadQPS)
397+
assert.Equal(t, emptyConfig.CloudProviderRateLimitBucket, rateLimitReadBuckets)
398+
assert.Equal(t, emptyConfig.CloudProviderRateLimitQPSWrite, rateLimitReadQPS)
399+
assert.Equal(t, emptyConfig.CloudProviderRateLimitBucketWrite, rateLimitReadBuckets)
400+
401+
os.Unsetenv(rateLimitReadBucketsEnvVar)
402+
os.Unsetenv(rateLimitReadQPSEnvVar)
403+
}
404+
405+
func TestInitializeCloudProviderRateLimitConfigWithReadAndWriteRateLimitSettingsFromEnv(t *testing.T) {
406+
emptyConfig := &CloudProviderRateLimitConfig{}
407+
var rateLimitReadQPS float32 = 3.0
408+
rateLimitReadBuckets := 10
409+
var rateLimitWriteQPS float32 = 6.0
410+
rateLimitWriteBuckets := 20
411+
412+
os.Setenv(rateLimitReadQPSEnvVar, fmt.Sprintf("%.1f", rateLimitReadQPS))
413+
os.Setenv(rateLimitReadBucketsEnvVar, fmt.Sprintf("%d", rateLimitReadBuckets))
414+
os.Setenv(rateLimitWriteQPSEnvVar, fmt.Sprintf("%.1f", rateLimitWriteQPS))
415+
os.Setenv(rateLimitWriteBucketsEnvVar, fmt.Sprintf("%d", rateLimitWriteBuckets))
416+
417+
err := InitializeCloudProviderRateLimitConfig(emptyConfig)
418+
419+
assert.NoError(t, err)
420+
assert.Equal(t, emptyConfig.CloudProviderRateLimitQPS, rateLimitReadQPS)
421+
assert.Equal(t, emptyConfig.CloudProviderRateLimitBucket, rateLimitReadBuckets)
422+
assert.Equal(t, emptyConfig.CloudProviderRateLimitQPSWrite, rateLimitWriteQPS)
423+
assert.Equal(t, emptyConfig.CloudProviderRateLimitBucketWrite, rateLimitWriteBuckets)
424+
425+
os.Unsetenv(rateLimitReadQPSEnvVar)
426+
os.Unsetenv(rateLimitReadBucketsEnvVar)
427+
os.Unsetenv(rateLimitWriteQPSEnvVar)
428+
os.Unsetenv(rateLimitWriteBucketsEnvVar)
429+
}
430+
431+
func TestInitializeCloudProviderRateLimitConfigWithReadAndWriteRateLimitAlreadySetInConfig(t *testing.T) {
432+
var rateLimitReadQPS float32 = 3.0
433+
rateLimitReadBuckets := 10
434+
var rateLimitWriteQPS float32 = 6.0
435+
rateLimitWriteBuckets := 20
436+
437+
configWithRateLimits := &CloudProviderRateLimitConfig{
438+
RateLimitConfig: azclients.RateLimitConfig{
439+
CloudProviderRateLimitBucket: rateLimitReadBuckets,
440+
CloudProviderRateLimitBucketWrite: rateLimitWriteBuckets,
441+
CloudProviderRateLimitQPS: rateLimitReadQPS,
442+
CloudProviderRateLimitQPSWrite: rateLimitWriteQPS,
443+
},
444+
}
445+
446+
os.Setenv(rateLimitReadQPSEnvVar, "99")
447+
os.Setenv(rateLimitReadBucketsEnvVar, "99")
448+
os.Setenv(rateLimitWriteQPSEnvVar, "99")
449+
os.Setenv(rateLimitWriteBucketsEnvVar, "99")
450+
451+
err := InitializeCloudProviderRateLimitConfig(configWithRateLimits)
452+
453+
assert.NoError(t, err)
454+
assert.Equal(t, configWithRateLimits.CloudProviderRateLimitQPS, rateLimitReadQPS)
455+
assert.Equal(t, configWithRateLimits.CloudProviderRateLimitBucket, rateLimitReadBuckets)
456+
assert.Equal(t, configWithRateLimits.CloudProviderRateLimitQPSWrite, rateLimitWriteQPS)
457+
assert.Equal(t, configWithRateLimits.CloudProviderRateLimitBucketWrite, rateLimitWriteBuckets)
458+
459+
os.Unsetenv(rateLimitReadQPSEnvVar)
460+
os.Unsetenv(rateLimitReadBucketsEnvVar)
461+
os.Unsetenv(rateLimitWriteQPSEnvVar)
462+
os.Unsetenv(rateLimitWriteBucketsEnvVar)
463+
}

0 commit comments

Comments
 (0)