Deduplicate Check and Poll functions on the spoof client (#2264)

This commit is contained in:
Markus Thömmes 2021-09-02 19:59:07 +02:00 committed by GitHub
parent b721b0b90c
commit c69aba0aae
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
1 changed files with 1 additions and 38 deletions

View File

@ -296,49 +296,12 @@ func (sc *SpoofingClient) endpointState(
}
func (sc *SpoofingClient) Check(req *http.Request, inState ResponseChecker, errorRetryCheckers ...ErrorRetryChecker) (*Response, error) {
if len(errorRetryCheckers) == 0 {
errorRetryCheckers = []ErrorRetryChecker{DefaultErrorRetryChecker}
}
traceContext, span := trace.StartSpan(req.Context(), "SpoofingClient-Trace")
defer span.End()
var rawResp *http.Response
err := wait.PollImmediate(sc.RequestInterval, sc.RequestTimeout, func() (bool, error) {
var err error
rawResp, err = sc.Client.Do(req.WithContext(traceContext))
if err != nil {
for _, checker := range errorRetryCheckers {
retry, newErr := checker(err)
if retry {
sc.Logf("Retrying %s: %v", req.URL.String(), newErr)
return false, nil
}
}
sc.Logf("NOT Retrying %s: %v", req.URL.String(), err)
}
return true, err
})
resp, err := sc.Do(req, errorRetryCheckers...)
if err != nil {
return nil, err
}
defer rawResp.Body.Close()
body, err := ioutil.ReadAll(rawResp.Body)
if err != nil {
return nil, err
}
rawResp.Header.Add(zipkin.ZipkinTraceIDHeader, span.SpanContext().TraceID.String())
resp := &Response{
Status: rawResp.Status,
StatusCode: rawResp.StatusCode,
Header: rawResp.Header,
Body: body,
}
ok, err := inState(resp)
sc.logZipkinTrace(resp)
if err != nil {
return resp, fmt.Errorf("response: %s did not pass checks: %w", resp, err)
}