This is an automated email from the ASF dual-hosted git repository.

zhangjintao pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/apisix-ingress-controller.git


The following commit(s) were added to refs/heads/master by this push:
     new a01888b  feat: Change field retries to value from pointer. (#647)
a01888b is described below

commit a01888bd195f59ae08a5e1399dd26f2ac438880a
Author: chen zhuo <[email protected]>
AuthorDate: Sat Oct 9 15:20:50 2021 +0800

    feat: Change field retries to value from pointer. (#647)
    
    Co-authored-by: zhuo.chen <[email protected]>
    Co-authored-by: Jintao Zhang <[email protected]>
---
 pkg/ingress/manifest_test.go                       | 15 ++--
 pkg/kube/apisix/apis/config/v1/types.go            |  2 +-
 .../apisix/apis/config/v1/zz_generated.deepcopy.go |  5 ++
 pkg/kube/translation/apisix_upstream.go            |  4 +-
 pkg/kube/translation/apisix_upstream_test.go       | 14 ++--
 pkg/types/apisix/v1/types.go                       |  2 +-
 pkg/types/apisix/v1/zz_generated.deepcopy.go       |  5 ++
 .../features/{retries_timeout.go => retries.go}    | 88 +++++++++++++++++-----
 8 files changed, 101 insertions(+), 34 deletions(-)

diff --git a/pkg/ingress/manifest_test.go b/pkg/ingress/manifest_test.go
index 3ad5e3a..8f8b285 100644
--- a/pkg/ingress/manifest_test.go
+++ b/pkg/ingress/manifest_test.go
@@ -121,6 +121,7 @@ func TestDiffStreamRoutes(t *testing.T) {
 }
 
 func TestDiffUpstreams(t *testing.T) {
+       retries := 3
        news := []*apisixv1.Upstream{
                {
                        Metadata: apisixv1.Metadata{
@@ -131,7 +132,7 @@ func TestDiffUpstreams(t *testing.T) {
                        Metadata: apisixv1.Metadata{
                                ID: "3",
                        },
-                       Retries: 3,
+                       Retries: &retries,
                },
        }
        added, updated, deleted := diffUpstreams(nil, news)
@@ -140,8 +141,9 @@ func TestDiffUpstreams(t *testing.T) {
        assert.Len(t, added, 2)
        assert.Equal(t, added[0].ID, "1")
        assert.Equal(t, added[1].ID, "3")
-       assert.Equal(t, added[1].Retries, 3)
+       assert.Equal(t, *added[1].Retries, 3)
 
+       retries1 := 5
        olds := []*apisixv1.Upstream{
                {
                        Metadata: apisixv1.Metadata{
@@ -152,7 +154,7 @@ func TestDiffUpstreams(t *testing.T) {
                        Metadata: apisixv1.Metadata{
                                ID: "3",
                        },
-                       Retries: 5,
+                       Retries: &retries1,
                        Timeout: &apisixv1.UpstreamTimeout{
                                Connect: 10,
                        },
@@ -164,7 +166,7 @@ func TestDiffUpstreams(t *testing.T) {
        assert.Len(t, deleted, 2)
        assert.Equal(t, deleted[0].ID, "2")
        assert.Equal(t, deleted[1].ID, "3")
-       assert.Equal(t, deleted[1].Retries, 5)
+       assert.Equal(t, *deleted[1].Retries, 5)
        assert.Equal(t, deleted[1].Timeout.Connect, 10)
 
        added, updated, deleted = diffUpstreams(olds, news)
@@ -173,12 +175,13 @@ func TestDiffUpstreams(t *testing.T) {
        assert.Len(t, updated, 1)
        assert.Equal(t, updated[0].ID, "3")
        assert.Nil(t, updated[0].Timeout)
-       assert.Equal(t, updated[0].Retries, 3)
+       assert.Equal(t, *updated[0].Retries, 3)
        assert.Len(t, deleted, 1)
        assert.Equal(t, deleted[0].ID, "2")
 }
 
 func TestManifestDiff(t *testing.T) {
+       retries := 2
        m := &manifest{
                routes: []*apisixv1.Route{
                        {
@@ -198,7 +201,7 @@ func TestManifestDiff(t *testing.T) {
                                Metadata: apisixv1.Metadata{
                                        ID: "4",
                                },
-                               Retries: 2,
+                               Retries: &retries,
                        },
                },
        }
diff --git a/pkg/kube/apisix/apis/config/v1/types.go 
b/pkg/kube/apisix/apis/config/v1/types.go
index 61d9f3f..5c212a5 100644
--- a/pkg/kube/apisix/apis/config/v1/types.go
+++ b/pkg/kube/apisix/apis/config/v1/types.go
@@ -113,7 +113,7 @@ type ApisixUpstreamConfig struct {
        // How many times that the proxy (Apache APISIX) should do when
        // errors occur (error, timeout or bad http status codes like 500, 502).
        // +optional
-       Retries int `json:"retries,omitempty" yaml:"retries,omitempty"`
+       Retries *int `json:"retries,omitempty" yaml:"retries,omitempty"`
 
        // Timeout settings for the read, send and connect to the upstream.
        // +optional
diff --git a/pkg/kube/apisix/apis/config/v1/zz_generated.deepcopy.go 
b/pkg/kube/apisix/apis/config/v1/zz_generated.deepcopy.go
index 2dfed52..5775017 100644
--- a/pkg/kube/apisix/apis/config/v1/zz_generated.deepcopy.go
+++ b/pkg/kube/apisix/apis/config/v1/zz_generated.deepcopy.go
@@ -347,6 +347,11 @@ func (in *ApisixUpstreamConfig) DeepCopyInto(out 
*ApisixUpstreamConfig) {
                *out = new(LoadBalancer)
                **out = **in
        }
+       if in.Retries != nil {
+               in, out := &in.Retries, &out.Retries
+               *out = new(int)
+               **out = **in
+       }
        if in.Timeout != nil {
                in, out := &in.Timeout, &out.Timeout
                *out = new(UpstreamTimeout)
diff --git a/pkg/kube/translation/apisix_upstream.go 
b/pkg/kube/translation/apisix_upstream.go
index 40fd598..d0e5b87 100644
--- a/pkg/kube/translation/apisix_upstream.go
+++ b/pkg/kube/translation/apisix_upstream.go
@@ -19,8 +19,8 @@ import (
        apisixv1 
"github.com/apache/apisix-ingress-controller/pkg/types/apisix/v1"
 )
 
-func (t *translator) translateUpstreamRetriesAndTimeout(retries int, timeout 
*configv1.UpstreamTimeout, ups *apisixv1.Upstream) error {
-       if retries < 0 {
+func (t *translator) translateUpstreamRetriesAndTimeout(retries *int, timeout 
*configv1.UpstreamTimeout, ups *apisixv1.Upstream) error {
+       if retries != nil && *retries < 0 {
                return &translateError{
                        field:  "retries",
                        reason: "invalid value",
diff --git a/pkg/kube/translation/apisix_upstream_test.go 
b/pkg/kube/translation/apisix_upstream_test.go
index 0dc2703..2293838 100644
--- a/pkg/kube/translation/apisix_upstream_test.go
+++ b/pkg/kube/translation/apisix_upstream_test.go
@@ -372,22 +372,25 @@ func TestTranslateUpstreamActiveHealthCheckUnusually(t 
*testing.T) {
 
 func TestUpstreamRetriesAndTimeout(t *testing.T) {
        tr := &translator{}
-       err := tr.translateUpstreamRetriesAndTimeout(-1, nil, nil)
+       retries := -1
+       err := tr.translateUpstreamRetriesAndTimeout(&retries, nil, nil)
        assert.Equal(t, err, &translateError{
                field:  "retries",
                reason: "invalid value",
        })
 
        var ups apisixv1.Upstream
-       err = tr.translateUpstreamRetriesAndTimeout(3, nil, &ups)
+       retries = 3
+       err = tr.translateUpstreamRetriesAndTimeout(&retries, nil, &ups)
        assert.Nil(t, err)
-       assert.Equal(t, ups.Retries, 3)
+       assert.Equal(t, *ups.Retries, 3)
 
        timeout := &configv1.UpstreamTimeout{
                Connect: metav1.Duration{Duration: time.Second},
                Read:    metav1.Duration{Duration: -1},
        }
-       err = tr.translateUpstreamRetriesAndTimeout(3, timeout, &ups)
+       retries = 3
+       err = tr.translateUpstreamRetriesAndTimeout(&retries, timeout, &ups)
        assert.Equal(t, err, &translateError{
                field:  "timeout.read",
                reason: "invalid value",
@@ -397,7 +400,8 @@ func TestUpstreamRetriesAndTimeout(t *testing.T) {
                Connect: metav1.Duration{Duration: time.Second},
                Read:    metav1.Duration{Duration: 15 * time.Second},
        }
-       err = tr.translateUpstreamRetriesAndTimeout(3, timeout, &ups)
+       retries = 3
+       err = tr.translateUpstreamRetriesAndTimeout(&retries, timeout, &ups)
        assert.Nil(t, err)
        assert.Equal(t, ups.Timeout, &apisixv1.UpstreamTimeout{
                Connect: 1,
diff --git a/pkg/types/apisix/v1/types.go b/pkg/types/apisix/v1/types.go
index 5838028..a9b127f 100644
--- a/pkg/types/apisix/v1/types.go
+++ b/pkg/types/apisix/v1/types.go
@@ -182,7 +182,7 @@ type Upstream struct {
        Checks  *UpstreamHealthCheck `json:"checks,omitempty" 
yaml:"checks,omitempty"`
        Nodes   UpstreamNodes        `json:"nodes" yaml:"nodes"`
        Scheme  string               `json:"scheme,omitempty" 
yaml:"scheme,omitempty"`
-       Retries int                  `json:"retries,omitempty" 
yaml:"retries,omitempty"`
+       Retries *int                 `json:"retries,omitempty" 
yaml:"retries,omitempty"`
        Timeout *UpstreamTimeout     `json:"timeout,omitempty" 
yaml:"timeout,omitempty"`
 }
 
diff --git a/pkg/types/apisix/v1/zz_generated.deepcopy.go 
b/pkg/types/apisix/v1/zz_generated.deepcopy.go
index 0ca8e2c..7115b74 100644
--- a/pkg/types/apisix/v1/zz_generated.deepcopy.go
+++ b/pkg/types/apisix/v1/zz_generated.deepcopy.go
@@ -438,6 +438,11 @@ func (in *Upstream) DeepCopyInto(out *Upstream) {
                *out = make(UpstreamNodes, len(*in))
                copy(*out, *in)
        }
+       if in.Retries != nil {
+               in, out := &in.Retries, &out.Retries
+               *out = new(int)
+               **out = **in
+       }
        if in.Timeout != nil {
                in, out := &in.Timeout, &out.Timeout
                *out = new(UpstreamTimeout)
diff --git a/test/e2e/features/retries_timeout.go b/test/e2e/features/retries.go
similarity index 67%
rename from test/e2e/features/retries_timeout.go
rename to test/e2e/features/retries.go
index 6366ffa..f81d08e 100644
--- a/test/e2e/features/retries_timeout.go
+++ b/test/e2e/features/retries.go
@@ -33,22 +33,8 @@ var _ = ginkgo.Describe("retries", func() {
                APISIXRouteVersion:    "apisix.apache.org/v2beta2",
        }
        s := scaffold.NewScaffold(opts)
-       ginkgo.It("active check", func() {
-               backendSvc, backendPorts := s.DefaultHTTPBackend()
 
-               au := fmt.Sprintf(`
-apiVersion: apisix.apache.org/v1
-kind: ApisixUpstream
-metadata:
-  name: %s
-spec:
-  retries: 3
-`, backendSvc)
-               err := s.CreateResourceFromString(au)
-               assert.Nil(ginkgo.GinkgoT(), err, "create ApisixUpstream")
-               time.Sleep(2 * time.Second)
-
-               ar := fmt.Sprintf(`
+       routeTpl := `
 apiVersion: apisix.apache.org/v2beta2
 kind: ApisixRoute
 metadata:
@@ -64,19 +50,83 @@ spec:
     backends:
     - serviceName: %s
       servicePort: %d
-`, backendSvc, backendPorts[0])
-               err = s.CreateResourceFromString(ar)
+`
+       ginkgo.It("is missing", func() {
+               backendSvc, backendPorts := s.DefaultHTTPBackend()
+               ar := fmt.Sprintf(routeTpl, backendSvc, backendPorts[0])
+               err := s.CreateResourceFromString(ar)
                assert.Nil(ginkgo.GinkgoT(), err)
                time.Sleep(5 * time.Second)
 
+               au := fmt.Sprintf(`
+apiVersion: apisix.apache.org/v1
+kind: ApisixUpstream
+metadata:
+  name: %s
+spec:
+`, backendSvc)
+               err = s.CreateResourceFromString(au)
+               assert.Nil(ginkgo.GinkgoT(), err, "create ApisixUpstream")
+               time.Sleep(2 * time.Second)
+
+               ups, err := s.ListApisixUpstreams()
+               assert.Nil(ginkgo.GinkgoT(), err)
+               assert.Len(ginkgo.GinkgoT(), ups, 1)
+               assert.Nil(ginkgo.GinkgoT(), ups[0].Retries)
+       })
+
+       ginkgo.It("is zero", func() {
+               backendSvc, backendPorts := s.DefaultHTTPBackend()
+               ar := fmt.Sprintf(routeTpl, backendSvc, backendPorts[0])
+               err := s.CreateResourceFromString(ar)
+               assert.Nil(ginkgo.GinkgoT(), err)
+               time.Sleep(5 * time.Second)
+
+               au := fmt.Sprintf(`
+apiVersion: apisix.apache.org/v1
+kind: ApisixUpstream
+metadata:
+  name: %s
+spec:
+  retries: 0
+`, backendSvc)
+               err = s.CreateResourceFromString(au)
+               assert.Nil(ginkgo.GinkgoT(), err, "create ApisixUpstream")
+               time.Sleep(2 * time.Second)
+
+               ups, err := s.ListApisixUpstreams()
+               assert.Nil(ginkgo.GinkgoT(), err)
+               assert.Len(ginkgo.GinkgoT(), ups, 1)
+               assert.Equal(ginkgo.GinkgoT(), *ups[0].Retries, 0)
+       })
+
+       ginkgo.It("is a positive number", func() {
+               backendSvc, backendPorts := s.DefaultHTTPBackend()
+               ar := fmt.Sprintf(routeTpl, backendSvc, backendPorts[0])
+               err := s.CreateResourceFromString(ar)
+               assert.Nil(ginkgo.GinkgoT(), err)
+               time.Sleep(5 * time.Second)
+
+               au := fmt.Sprintf(`
+apiVersion: apisix.apache.org/v1
+kind: ApisixUpstream
+metadata:
+  name: %s
+spec:
+  retries: 3
+`, backendSvc)
+               err = s.CreateResourceFromString(au)
+               assert.Nil(ginkgo.GinkgoT(), err, "create ApisixUpstream")
+               time.Sleep(2 * time.Second)
+
                ups, err := s.ListApisixUpstreams()
                assert.Nil(ginkgo.GinkgoT(), err)
                assert.Len(ginkgo.GinkgoT(), ups, 1)
-               assert.Equal(ginkgo.GinkgoT(), ups[0].Retries, 3)
+               assert.Equal(ginkgo.GinkgoT(), *ups[0].Retries, 3)
        })
 })
 
-var _ = ginkgo.Describe("timeout", func() {
+var _ = ginkgo.Describe("retries timeout", func() {
        opts := &scaffold.Options{
                Name:                  "default",
                Kubeconfig:            scaffold.GetKubeconfig(),

Reply via email to