You are viewing a plain text version of this content. The canonical link for it is here.
Posted to notifications@apisix.apache.org by zh...@apache.org on 2021/10/09 07:20:58 UTC
[apisix-ingress-controller] branch master updated: feat: Change
field retries to value from pointer. (#647)
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 <ch...@126.com>
AuthorDate: Sat Oct 9 15:20:50 2021 +0800
feat: Change field retries to value from pointer. (#647)
Co-authored-by: zhuo.chen <zh...@upai.com>
Co-authored-by: Jintao Zhang <zh...@gmail.com>
---
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(),