Skip to content

Commit

Permalink
introduce new case convention for leader election config map (#2302)
Browse files Browse the repository at this point in the history
Part of knative/serving#7300

Majority of serving uses lowercase-hyphens - ie. some-property over
someProperty

This changes the leader election config map parsing to support formats
and to prioritize the lowercase-hyphen case
  • Loading branch information
dprotaso authored Oct 6, 2021
1 parent a00ba48 commit 9179f78
Show file tree
Hide file tree
Showing 2 changed files with 48 additions and 12 deletions.
5 changes: 5 additions & 0 deletions leaderelection/config.go
Original file line number Diff line number Diff line change
Expand Up @@ -46,10 +46,15 @@ func NewConfigFromMap(data map[string]string) (*Config, error) {
config := defaultConfig()

if err := cm.Parse(data,
// Parse legacy keys first
cm.AsDuration("leaseDuration", &config.LeaseDuration),
cm.AsDuration("renewDeadline", &config.RenewDeadline),
cm.AsDuration("retryPeriod", &config.RetryPeriod),

cm.AsDuration("lease-duration", &config.LeaseDuration),
cm.AsDuration("renew-deadline", &config.RenewDeadline),
cm.AsDuration("retry-period", &config.RetryPeriod),

cm.AsUint32("buckets", &config.Buckets),
); err != nil {
return nil, err
Expand Down
55 changes: 43 additions & 12 deletions leaderelection/config_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -51,9 +51,9 @@ func okData() map[string]string {
// values in this data come from the defaults suggested in the
// code:
// https://github.com/kubernetes/client-go/blob/kubernetes-1.16.0/tools/leaderelection/leaderelection.go
"leaseDuration": "15s",
"renewDeadline": "10s",
"retryPeriod": "2s",
"lease-duration": "15s",
"renew-deadline": "10s",
"retry-period": "2s",
}
}

Expand All @@ -78,23 +78,23 @@ func TestNewConfigMapFromData(t *testing.T) {
return config
}(),
}, {
name: "invalid leaseDuration",
name: "invalid lease-duration",
data: kmeta.UnionMaps(okData(), map[string]string{
"leaseDuration": "flops",
"lease-duration": "flops",
}),
err: `failed to parse "leaseDuration": time: invalid duration`,
err: `failed to parse "lease-duration": time: invalid duration`,
}, {
name: "invalid renewDeadline",
name: "invalid renew-deadline",
data: kmeta.UnionMaps(okData(), map[string]string{
"renewDeadline": "flops",
"renew-deadline": "flops",
}),
err: `failed to parse "renewDeadline": time: invalid duration`,
err: `failed to parse "renew-deadline": time: invalid duration`,
}, {
name: "invalid retryPeriod",
name: "invalid retry-period",
data: kmeta.UnionMaps(okData(), map[string]string{
"retryPeriod": "flops",
"retry-period": "flops",
}),
err: `failed to parse "retryPeriod": time: invalid duration`,
err: `failed to parse "retry-period": time: invalid duration`,
}, {
name: "invalid buckets - not an int",
data: kmeta.UnionMaps(okData(), map[string]string{
Expand All @@ -113,6 +113,37 @@ func TestNewConfigMapFromData(t *testing.T) {
"buckets": strconv.Itoa(int(MaxBuckets + 1)),
}),
err: fmt.Sprintf("buckets: value must be between 1 <= %d <= %d", MaxBuckets+1, MaxBuckets),
}, {
name: "legacy keys",
data: map[string]string{
"leaseDuration": "2s",
"renewDeadline": "3s",
"retryPeriod": "4s",
"buckets": "5",
},
expected: &Config{
Buckets: 5,
LeaseDuration: 2 * time.Second,
RenewDeadline: 3 * time.Second,
RetryPeriod: 4 * time.Second,
},
}, {
name: "prioritize new keys",
data: map[string]string{
"lease-duration": "1s",
"renew-deadline": "2s",
"retry-period": "3s",
"leaseDuration": "4s",
"renewDeadline": "5s",
"retryPeriod": "6s",
"buckets": "7",
},
expected: &Config{
Buckets: 7,
LeaseDuration: 1 * time.Second,
RenewDeadline: 2 * time.Second,
RetryPeriod: 3 * time.Second,
},
}}

for _, tc := range cases {
Expand Down

0 comments on commit 9179f78

Please sign in to comment.