Sort ingresses by creation timestamp

This commit is contained in:
Manuel Alejandro de Brito Fontes 2018-12-19 10:58:42 -03:00
parent cac694ecce
commit b2fa243b97
No known key found for this signature in database
GPG key ID: 786136016A8BA02A
3 changed files with 29 additions and 9 deletions

View file

@ -120,13 +120,7 @@ func (n *NGINXController) syncIngress(interface{}) error {
return nil return nil
} }
// sort Ingresses using the ResourceVersion field
ings := n.store.ListIngresses() 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) upstreams, servers := n.getBackendServers(ings)
var passUpstreams []*ingress.SSLPassthroughBackend var passUpstreams []*ingress.SSLPassthroughBackend

View file

@ -21,6 +21,7 @@ import (
"fmt" "fmt"
"io/ioutil" "io/ioutil"
"reflect" "reflect"
"sort"
"sync" "sync"
"time" "time"
@ -736,6 +737,13 @@ func (s *k8sStore) ListIngresses() []*ingress.Ingress {
ingresses = append(ingresses, ing) 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 return ingresses
} }

View file

@ -34,7 +34,7 @@ import (
"encoding/base64" "encoding/base64"
"io/ioutil" "io/ioutil"
"k8s.io/api/core/v1" v1 "k8s.io/api/core/v1"
"k8s.io/client-go/kubernetes" "k8s.io/client-go/kubernetes"
"k8s.io/client-go/kubernetes/fake" "k8s.io/client-go/kubernetes/fake"
"k8s.io/ingress-nginx/internal/file" "k8s.io/ingress-nginx/internal/file"
@ -939,6 +939,8 @@ func TestUpdateSecretIngressMap(t *testing.T) {
func TestListIngresses(t *testing.T) { func TestListIngresses(t *testing.T) {
s := newStore(t) s := newStore(t)
sameTime := metav1.NewTime(time.Now())
ingressToIgnore := &ingress.Ingress{ ingressToIgnore := &ingress.Ingress{
Ingress: extensions.Ingress{ Ingress: extensions.Ingress{
ObjectMeta: metav1.ObjectMeta{ ObjectMeta: metav1.ObjectMeta{
@ -947,6 +949,7 @@ func TestListIngresses(t *testing.T) {
Annotations: map[string]string{ Annotations: map[string]string{
"kubernetes.io/ingress.class": "something", "kubernetes.io/ingress.class": "something",
}, },
CreationTimestamp: sameTime,
}, },
Spec: extensions.IngressSpec{ Spec: extensions.IngressSpec{
Backend: &extensions.IngressBackend{ Backend: &extensions.IngressBackend{
@ -963,6 +966,7 @@ func TestListIngresses(t *testing.T) {
ObjectMeta: metav1.ObjectMeta{ ObjectMeta: metav1.ObjectMeta{
Name: "test-3", Name: "test-3",
Namespace: "testns", Namespace: "testns",
CreationTimestamp: sameTime,
}, },
Spec: extensions.IngressSpec{ Spec: extensions.IngressSpec{
Rules: []extensions.IngressRule{ Rules: []extensions.IngressRule{
@ -995,6 +999,7 @@ func TestListIngresses(t *testing.T) {
Annotations: map[string]string{ Annotations: map[string]string{
"kubernetes.io/ingress.class": "nginx", "kubernetes.io/ingress.class": "nginx",
}, },
CreationTimestamp: metav1.NewTime(time.Now()),
}, },
Spec: extensions.IngressSpec{ Spec: extensions.IngressSpec{
Rules: []extensions.IngressRule{ Rules: []extensions.IngressRule{
@ -1021,9 +1026,22 @@ func TestListIngresses(t *testing.T) {
s.listers.IngressWithAnnotation.Add(ingressWithNginxClass) s.listers.IngressWithAnnotation.Add(ingressWithNginxClass)
ingresses := s.ListIngresses() ingresses := s.ListIngresses()
if s := len(ingresses); s != 3 { if s := len(ingresses); s != 3 {
t.Errorf("Expected 3 Ingresses but got %v", s) 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) { func TestWriteSSLSessionTicketKey(t *testing.T) {