From b2fa243b970e4fb93004def6648e557ec8d7911f Mon Sep 17 00:00:00 2001 From: Manuel Alejandro de Brito Fontes Date: Wed, 19 Dec 2018 10:58:42 -0300 Subject: [PATCH] Sort ingresses by creation timestamp --- internal/ingress/controller/controller.go | 6 ----- internal/ingress/controller/store/store.go | 8 +++++++ .../ingress/controller/store/store_test.go | 24 ++++++++++++++++--- 3 files changed, 29 insertions(+), 9 deletions(-) diff --git a/internal/ingress/controller/controller.go b/internal/ingress/controller/controller.go index ff8a3b7d7..e89e1fead 100644 --- a/internal/ingress/controller/controller.go +++ b/internal/ingress/controller/controller.go @@ -120,13 +120,7 @@ func (n *NGINXController) syncIngress(interface{}) error { return nil } - // sort Ingresses using the ResourceVersion field ings := n.store.ListIngresses() - sort.SliceStable(ings, func(i, j int) bool { - ir := ings[i].ResourceVersion - jr := ings[j].ResourceVersion - return ir < jr - }) upstreams, servers := n.getBackendServers(ings) var passUpstreams []*ingress.SSLPassthroughBackend diff --git a/internal/ingress/controller/store/store.go b/internal/ingress/controller/store/store.go index c6ace805e..a1eca4780 100644 --- a/internal/ingress/controller/store/store.go +++ b/internal/ingress/controller/store/store.go @@ -21,6 +21,7 @@ import ( "fmt" "io/ioutil" "reflect" + "sort" "sync" "time" @@ -736,6 +737,13 @@ func (s *k8sStore) ListIngresses() []*ingress.Ingress { ingresses = append(ingresses, ing) } + // sort Ingresses using the CreationTimestamp field + sort.SliceStable(ingresses, func(i, j int) bool { + ir := ingresses[i].CreationTimestamp + jr := ingresses[j].CreationTimestamp + return ir.Before(&jr) + }) + return ingresses } diff --git a/internal/ingress/controller/store/store_test.go b/internal/ingress/controller/store/store_test.go index e3cf08696..e72357425 100644 --- a/internal/ingress/controller/store/store_test.go +++ b/internal/ingress/controller/store/store_test.go @@ -34,7 +34,7 @@ import ( "encoding/base64" "io/ioutil" - "k8s.io/api/core/v1" + v1 "k8s.io/api/core/v1" "k8s.io/client-go/kubernetes" "k8s.io/client-go/kubernetes/fake" "k8s.io/ingress-nginx/internal/file" @@ -939,6 +939,8 @@ func TestUpdateSecretIngressMap(t *testing.T) { func TestListIngresses(t *testing.T) { s := newStore(t) + sameTime := metav1.NewTime(time.Now()) + ingressToIgnore := &ingress.Ingress{ Ingress: extensions.Ingress{ ObjectMeta: metav1.ObjectMeta{ @@ -947,6 +949,7 @@ func TestListIngresses(t *testing.T) { Annotations: map[string]string{ "kubernetes.io/ingress.class": "something", }, + CreationTimestamp: sameTime, }, Spec: extensions.IngressSpec{ Backend: &extensions.IngressBackend{ @@ -961,8 +964,9 @@ func TestListIngresses(t *testing.T) { ingressWithoutPath := &ingress.Ingress{ Ingress: extensions.Ingress{ ObjectMeta: metav1.ObjectMeta{ - Name: "test-3", - Namespace: "testns", + Name: "test-3", + Namespace: "testns", + CreationTimestamp: sameTime, }, Spec: extensions.IngressSpec{ Rules: []extensions.IngressRule{ @@ -995,6 +999,7 @@ func TestListIngresses(t *testing.T) { Annotations: map[string]string{ "kubernetes.io/ingress.class": "nginx", }, + CreationTimestamp: metav1.NewTime(time.Now()), }, Spec: extensions.IngressSpec{ Rules: []extensions.IngressRule{ @@ -1021,9 +1026,22 @@ func TestListIngresses(t *testing.T) { s.listers.IngressWithAnnotation.Add(ingressWithNginxClass) ingresses := s.ListIngresses() + if s := len(ingresses); s != 3 { t.Errorf("Expected 3 Ingresses but got %v", s) } + + if ingresses[0].Name != "test-2" { + t.Errorf("Expected Ingress test-2 but got %v", ingresses[0].Name) + } + + if ingresses[1].Name != "test-3" { + t.Errorf("Expected Ingress test-3 but got %v", ingresses[1].Name) + } + + if ingresses[2].Name != "test-4" { + t.Errorf("Expected Ingress test-4 but got %v", ingresses[2].Name) + } } func TestWriteSSLSessionTicketKey(t *testing.T) {