fix: use exponential backoff mechanism to listen on nginx.StatusPort
This commit is contained in:
parent
714783c052
commit
a08887040b
3 changed files with 54 additions and 7 deletions
|
@ -18,7 +18,6 @@ package controller
|
|||
|
||||
import (
|
||||
"fmt"
|
||||
"net"
|
||||
"net/http"
|
||||
"net/http/httptest"
|
||||
"os"
|
||||
|
@ -46,7 +45,7 @@ func TestNginxCheck(t *testing.T) {
|
|||
|
||||
mux := http.NewServeMux()
|
||||
|
||||
listener, err := net.Listen("tcp", fmt.Sprintf(":%v", nginx.StatusPort))
|
||||
listener, err := tryListen("tcp", fmt.Sprintf(":%v", nginx.StatusPort))
|
||||
if err != nil {
|
||||
t.Fatalf("creating tcp listener: %s", err)
|
||||
}
|
||||
|
|
|
@ -31,6 +31,7 @@ import (
|
|||
|
||||
jsoniter "github.com/json-iterator/go"
|
||||
apiv1 "k8s.io/api/core/v1"
|
||||
"k8s.io/apimachinery/pkg/util/wait"
|
||||
|
||||
"k8s.io/ingress-nginx/internal/ingress"
|
||||
"k8s.io/ingress-nginx/internal/nginx"
|
||||
|
@ -149,13 +150,13 @@ func TestIsDynamicConfigurationEnough(t *testing.T) {
|
|||
}
|
||||
|
||||
func TestConfigureDynamically(t *testing.T) {
|
||||
listener, err := net.Listen("tcp", fmt.Sprintf(":%v", nginx.StatusPort))
|
||||
listener, err := tryListen("tcp", fmt.Sprintf(":%v", nginx.StatusPort))
|
||||
if err != nil {
|
||||
t.Fatalf("creating tcp listener: %s", err)
|
||||
}
|
||||
defer listener.Close()
|
||||
|
||||
streamListener, err := net.Listen("tcp", fmt.Sprintf(":%v", nginx.StreamPort))
|
||||
streamListener, err := tryListen("tcp", fmt.Sprintf(":%v", nginx.StreamPort))
|
||||
if err != nil {
|
||||
t.Fatalf("creating tcp listener: %s", err)
|
||||
}
|
||||
|
@ -303,13 +304,13 @@ func TestConfigureDynamically(t *testing.T) {
|
|||
}
|
||||
|
||||
func TestConfigureCertificates(t *testing.T) {
|
||||
listener, err := net.Listen("tcp", fmt.Sprintf(":%v", nginx.StatusPort))
|
||||
listener, err := tryListen("tcp", fmt.Sprintf(":%v", nginx.StatusPort))
|
||||
if err != nil {
|
||||
t.Fatalf("creating tcp listener: %s", err)
|
||||
}
|
||||
defer listener.Close()
|
||||
|
||||
streamListener, err := net.Listen("tcp", fmt.Sprintf(":%v", nginx.StreamPort))
|
||||
streamListener, err := tryListen("tcp", fmt.Sprintf(":%v", nginx.StreamPort))
|
||||
if err != nil {
|
||||
t.Fatalf("creating tcp listener: %s", err)
|
||||
}
|
||||
|
@ -525,3 +526,25 @@ func TestCleanTempNginxCfg(t *testing.T) {
|
|||
t.Errorf("expected one file but %d were found", len(files))
|
||||
}
|
||||
}
|
||||
|
||||
func tryListen(network, address string) (l net.Listener, err error) {
|
||||
condFunc := func() (bool, error) {
|
||||
l, err = net.Listen(network, address)
|
||||
if err == nil {
|
||||
return true, nil
|
||||
}
|
||||
if strings.Contains(err.Error(), "bind: address already in use") {
|
||||
return false, nil
|
||||
}
|
||||
return false, err
|
||||
}
|
||||
|
||||
backoff := wait.Backoff{
|
||||
Duration: 500 * time.Millisecond,
|
||||
Factor: 2,
|
||||
Steps: 6,
|
||||
Cap: 128 * time.Second,
|
||||
}
|
||||
err = wait.ExponentialBackoff(backoff, condFunc)
|
||||
return
|
||||
}
|
||||
|
|
|
@ -21,10 +21,13 @@ import (
|
|||
"net"
|
||||
"net/http"
|
||||
"net/http/httptest"
|
||||
"strings"
|
||||
"testing"
|
||||
"time"
|
||||
|
||||
"github.com/prometheus/client_golang/prometheus"
|
||||
"k8s.io/apimachinery/pkg/util/wait"
|
||||
|
||||
"k8s.io/ingress-nginx/internal/nginx"
|
||||
)
|
||||
|
||||
|
@ -96,7 +99,7 @@ func TestStatusCollector(t *testing.T) {
|
|||
|
||||
for _, c := range cases {
|
||||
t.Run(c.name, func(t *testing.T) {
|
||||
listener, err := net.Listen("tcp", fmt.Sprintf(":%v", nginx.StatusPort))
|
||||
listener, err := tryListen("tcp", fmt.Sprintf(":%v", nginx.StatusPort))
|
||||
if err != nil {
|
||||
t.Fatalf("crating unix listener: %s", err)
|
||||
}
|
||||
|
@ -147,3 +150,25 @@ func TestStatusCollector(t *testing.T) {
|
|||
})
|
||||
}
|
||||
}
|
||||
|
||||
func tryListen(network, address string) (l net.Listener, err error) {
|
||||
condFunc := func() (bool, error) {
|
||||
l, err = net.Listen(network, address)
|
||||
if err == nil {
|
||||
return true, nil
|
||||
}
|
||||
if strings.Contains(err.Error(), "bind: address already in use") {
|
||||
return false, nil
|
||||
}
|
||||
return false, err
|
||||
}
|
||||
|
||||
backoff := wait.Backoff{
|
||||
Duration: 500 * time.Millisecond,
|
||||
Factor: 2,
|
||||
Steps: 6,
|
||||
Cap: 128 * time.Second,
|
||||
}
|
||||
err = wait.ExponentialBackoff(backoff, condFunc)
|
||||
return
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue