mirror of https://github.com/knative/caching.git
Auto-update dependencies (#167)
Produced via: `dep ensure -update knative.dev/test-infra knative.dev/pkg` /assign n3wscott /cc n3wscott
This commit is contained in:
parent
0731b295e8
commit
587434f9e2
|
@ -931,7 +931,7 @@
|
|||
|
||||
[[projects]]
|
||||
branch = "master"
|
||||
digest = "1:72ffa7ccc391446c34d98ce804c523c164c4979f8bd774e5c826348fb8b59970"
|
||||
digest = "1:86a6a4c7d3720415afcf3067cc52b0bbf6b810e58544c7336e514e32cba4a540"
|
||||
name = "knative.dev/pkg"
|
||||
packages = [
|
||||
"apis",
|
||||
|
@ -950,7 +950,7 @@
|
|||
"metrics/metricskey",
|
||||
]
|
||||
pruneopts = "T"
|
||||
revision = "e73c8084c2670725d3d9aefb2e1479870d5c36d3"
|
||||
revision = "587055b113b227ec89894f3907c960e3a9e1f85a"
|
||||
|
||||
[[projects]]
|
||||
branch = "master"
|
||||
|
|
|
@ -40,7 +40,7 @@ func (w *ManualWatcher) Watch(name string, o ...Observer) {
|
|||
defer w.m.Unlock()
|
||||
|
||||
if w.observers == nil {
|
||||
w.observers = make(map[string][]Observer, 1)
|
||||
w.observers = make(map[string][]Observer, len(o))
|
||||
}
|
||||
w.observers[name] = append(w.observers[name], o...)
|
||||
}
|
||||
|
|
|
@ -0,0 +1,6 @@
|
|||
{
|
||||
"client_id": "123456",
|
||||
"client_secret": "123456",
|
||||
"refresh_token": "123456",
|
||||
"type": "authorized_user"
|
||||
}
|
|
@ -64,7 +64,7 @@ func (r *Response) String() string {
|
|||
// Interface defines the actions that can be performed by the spoofing client.
|
||||
type Interface interface {
|
||||
Do(*http.Request) (*Response, error)
|
||||
Poll(*http.Request, ResponseChecker) (*Response, error)
|
||||
Poll(*http.Request, ResponseChecker, ...ErrorRetryChecker) (*Response, error)
|
||||
}
|
||||
|
||||
// https://medium.com/stupid-gopher-tricks/ensuring-go-interface-satisfaction-at-compile-time-1ed158e8fa17
|
||||
|
@ -80,6 +80,10 @@ var (
|
|||
// https://github.com/kubernetes/apimachinery/blob/cf7ae2f57dabc02a3d215f15ca61ae1446f3be8f/pkg/util/wait/wait.go#L172
|
||||
type ResponseChecker func(resp *Response) (done bool, err error)
|
||||
|
||||
// ErrorRetryChecker is used to determine if an error should be retried or not.
|
||||
// If an error should be retried, it should return true and the wrapped error to explain why to retry.
|
||||
type ErrorRetryChecker func(e error) (retry bool, err error)
|
||||
|
||||
// SpoofingClient is a minimal HTTP client wrapper that spoofs the domain of requests
|
||||
// for non-resolvable domains.
|
||||
type SpoofingClient struct {
|
||||
|
@ -199,7 +203,7 @@ func (sc *SpoofingClient) Do(req *http.Request) (*Response, error) {
|
|||
}
|
||||
|
||||
// Poll executes an http request until it satisfies the inState condition or encounters an error.
|
||||
func (sc *SpoofingClient) Poll(req *http.Request, inState ResponseChecker) (*Response, error) {
|
||||
func (sc *SpoofingClient) Poll(req *http.Request, inState ResponseChecker, errorRetryCheckers ...ErrorRetryChecker) (*Response, error) {
|
||||
var (
|
||||
resp *Response
|
||||
err error
|
||||
|
@ -212,22 +216,15 @@ func (sc *SpoofingClient) Poll(req *http.Request, inState ResponseChecker) (*Res
|
|||
req.Header.Add(pollReqHeader, "True")
|
||||
resp, err = sc.Do(req)
|
||||
if err != nil {
|
||||
if isTCPTimeout(err) {
|
||||
sc.Logf("Retrying %s for TCP timeout: %v", req.URL, err)
|
||||
return false, nil
|
||||
if len(errorRetryCheckers) == 0 {
|
||||
errorRetryCheckers = []ErrorRetryChecker{DefaultErrorRetryChecker}
|
||||
}
|
||||
// Retrying on DNS error, since we may be using xip.io or nip.io in tests.
|
||||
if isDNSError(err) {
|
||||
sc.Logf("Retrying %s for DNS error: %v", req.URL, err)
|
||||
return false, nil
|
||||
}
|
||||
// Repeat the poll on `connection refused` errors, which are usually transient Istio errors.
|
||||
if isConnectionRefused(err) {
|
||||
sc.Logf("Retrying %s for connection refused: %v", req.URL, err)
|
||||
return false, nil
|
||||
}
|
||||
if isConnectionReset(err) {
|
||||
sc.Logf("Retrying %s for connection reset: %v", req.URL, err)
|
||||
for _, checker := range errorRetryCheckers {
|
||||
retry, newErr := checker(err)
|
||||
if retry {
|
||||
sc.Logf("Retrying %s: %v", req.URL, newErr)
|
||||
return false, nil
|
||||
}
|
||||
}
|
||||
return true, err
|
||||
}
|
||||
|
@ -245,6 +242,25 @@ func (sc *SpoofingClient) Poll(req *http.Request, inState ResponseChecker) (*Res
|
|||
return resp, nil
|
||||
}
|
||||
|
||||
// DefaultErrorRetryChecker implements the defaults for retrying on error.
|
||||
func DefaultErrorRetryChecker(err error) (bool, error) {
|
||||
if isTCPTimeout(err) {
|
||||
return true, fmt.Errorf("Retrying for TCP timeout: %v", err)
|
||||
}
|
||||
// Retrying on DNS error, since we may be using xip.io or nip.io in tests.
|
||||
if isDNSError(err) {
|
||||
return true, fmt.Errorf("Retrying for DNS error: %v", err)
|
||||
}
|
||||
// Repeat the poll on `connection refused` errors, which are usually transient Istio errors.
|
||||
if isConnectionRefused(err) {
|
||||
return true, fmt.Errorf("Retrying for connection refused: %v", err)
|
||||
}
|
||||
if isConnectionReset(err) {
|
||||
return true, fmt.Errorf("Retrying for connection reset: %v", err)
|
||||
}
|
||||
return false, err
|
||||
}
|
||||
|
||||
// logZipkinTrace provides support to log Zipkin Trace for param: spoofResponse
|
||||
// We only log Zipkin trace for HTTP server errors i.e for HTTP status codes between 500 to 600
|
||||
func (sc *SpoofingClient) logZipkinTrace(spoofResp *Response) {
|
||||
|
|
Loading…
Reference in New Issue