From 9a69a035a299f121d50061188f8191b7301a9d3b Mon Sep 17 00:00:00 2001 From: Xunzhuo Date: Mon, 7 Nov 2022 12:30:53 +0800 Subject: [PATCH] fix: breaking orders of retry statuscodes (#32) Signed-off-by: bitliu --- ingress/kube/annotations/retry.go | 14 +++++++------- ingress/kube/annotations/retry_test.go | 10 ++++++++++ 2 files changed, 17 insertions(+), 7 deletions(-) diff --git a/ingress/kube/annotations/retry.go b/ingress/kube/annotations/retry.go index be4f64a1b..341e61b8b 100644 --- a/ingress/kube/annotations/retry.go +++ b/ingress/kube/annotations/retry.go @@ -20,7 +20,6 @@ import ( "github.com/gogo/protobuf/types" networking "istio.io/api/networking/v1alpha3" - "istio.io/istio/pilot/pkg/util/sets" ) const ( @@ -71,7 +70,8 @@ func (r retry) Parse(annotations Annotations, config *Ingress, _ *GlobalContext) } if retryOn, err := annotations.ParseStringASAP(retryOn); err == nil { - conditions := toSet(splitBySeparator(retryOn, ",")) + extraConfigs := splitBySeparator(retryOn, ",") + conditions := toSet(extraConfigs) if len(conditions) > 0 { if conditions.Contains("off") { retryConfig.retryCount = 0 @@ -88,7 +88,7 @@ func (r retry) Parse(annotations Annotations, config *Ingress, _ *GlobalContext) stringBuilder.WriteString("non_idempotent,") } // Append the status codes. - statusCodes := convertStatusCodes(conditions) + statusCodes := convertStatusCodes(extraConfigs) if len(statusCodes) > 0 { stringBuilder.WriteString(retryStatusCode + ",") for _, code := range statusCodes { @@ -123,11 +123,11 @@ func needRetryConfig(annotations Annotations) bool { annotations.HasASAP(retryOn) } -func convertStatusCodes(set sets.Set) []string { +func convertStatusCodes(statusCodes []string) []string { var result []string - for condition := range set { - if strings.HasPrefix(condition, "http_") { - result = append(result, strings.TrimPrefix(condition, "http_")) + for _, statusCode := range statusCodes { + if strings.HasPrefix(statusCode, "http_") { + result = append(result, strings.TrimPrefix(statusCode, "http_")) } } return result diff --git a/ingress/kube/annotations/retry_test.go b/ingress/kube/annotations/retry_test.go index d33c99c1f..376489bec 100644 --- a/ingress/kube/annotations/retry_test.go +++ b/ingress/kube/annotations/retry_test.go @@ -95,6 +95,16 @@ func TestRetryParse(t *testing.T) { retryOn: "5xx,retriable-status-codes,503,502,404", }, }, + { + input: map[string]string{ + buildNginxAnnotationKey(retryOn): "timeout,http_505,http_503,http_502,http_404,http_403", + }, + expect: &RetryConfig{ + retryCount: 3, + perRetryTimeout: &types.Duration{}, + retryOn: "5xx,retriable-status-codes,505,503,502,404,403", + }, + }, } for _, inputCase := range inputCases {