diff --git a/go.mod b/go.mod index 5270254b..55b4ca44 100644 --- a/go.mod +++ b/go.mod @@ -19,6 +19,7 @@ require ( github.com/gorilla/mux v1.8.0 github.com/graymeta/stow v0.2.7 github.com/hashicorp/go-multierror v1.1.1 + github.com/hashicorp/go-retryablehttp v0.7.1 github.com/imdario/mergo v0.3.12 github.com/influxdata/influxdb v1.9.6 github.com/mholt/archiver/v3 v3.5.1 @@ -111,6 +112,7 @@ require ( github.com/gotestyourself/gotestyourself v2.2.0+incompatible // indirect github.com/grpc-ecosystem/grpc-gateway v1.16.0 // indirect github.com/hashicorp/errwrap v1.0.0 // indirect + github.com/hashicorp/go-cleanhttp v0.5.1 // indirect github.com/hashicorp/go-uuid v1.0.2 // indirect github.com/inconshreveable/mousetrap v1.0.0 // indirect github.com/jbenet/go-context v0.0.0-20150711004518-d14ea06fba99 // indirect diff --git a/go.sum b/go.sum index 2547a49e..2182c055 100644 --- a/go.sum +++ b/go.sum @@ -431,12 +431,17 @@ github.com/hashicorp/consul/api v1.1.0/go.mod h1:VmuI/Lkw1nC05EYQWNKwWGbkg+FbDBt github.com/hashicorp/consul/sdk v0.1.1/go.mod h1:VKf9jXwCTEY1QZP2MOLRhb5i/I/ssyNV1vwHyQBF0x8= github.com/hashicorp/errwrap v1.0.0 h1:hLrqtEDnRye3+sgx6z4qVLNuviH3MR5aQ0ykNJa/UYA= github.com/hashicorp/errwrap v1.0.0/go.mod h1:YH+1FKiLXxHSkmPseP+kNlulaMuP3n2brvKWEqk/Jc4= +github.com/hashicorp/go-cleanhttp v0.5.1 h1:dH3aiDG9Jvb5r5+bYHsikaOUIpcM0xvgMXVoDkXMzJM= github.com/hashicorp/go-cleanhttp v0.5.1/go.mod h1:JpRdi6/HCYpAwUzNwuwqhbovhLtngrth3wmdIIUrZ80= +github.com/hashicorp/go-hclog v0.9.2 h1:CG6TE5H9/JXsFWJCfoIVpKFIkFe6ysEuHirp4DxCsHI= +github.com/hashicorp/go-hclog v0.9.2/go.mod h1:5CU+agLiy3J7N7QjHK5d05KxGsuXiQLrjA0H7acj2lQ= github.com/hashicorp/go-immutable-radix v1.0.0/go.mod h1:0y9vanUI8NX6FsYoO3zeMjhV/C5i9g4Q3DwcSNZ4P60= github.com/hashicorp/go-msgpack v0.5.3/go.mod h1:ahLV/dePpqEmjfWmKiqvPkv/twdG7iPBM1vqhUKIvfM= github.com/hashicorp/go-multierror v1.0.0/go.mod h1:dHtQlpGsu+cZNNAkkCN/P3hoUDHhCYQXV3UM06sGGrk= github.com/hashicorp/go-multierror v1.1.1 h1:H5DkEtf6CXdFp0N0Em5UCwQpXMWke8IA0+lD48awMYo= github.com/hashicorp/go-multierror v1.1.1/go.mod h1:iw975J/qwKPdAO1clOe2L8331t/9/fmwbPZ6JB6eMoM= +github.com/hashicorp/go-retryablehttp v0.7.1 h1:sUiuQAnLlbvmExtFQs72iFW/HXeUn8Z1aJLQ4LJJbTQ= +github.com/hashicorp/go-retryablehttp v0.7.1/go.mod h1:vAew36LZh98gCBJNLH42IQ1ER/9wtLZZ8meHqQvEYWY= github.com/hashicorp/go-rootcerts v1.0.0/go.mod h1:K6zTfqpRlCUIjkwsN4Z+hiSfzSTQa6eBIzfwKfwNnHU= github.com/hashicorp/go-sockaddr v1.0.0/go.mod h1:7Xibr9yA9JjQq1JpNB2Vw7kxv8xerXegt+ozgdvDeDU= github.com/hashicorp/go-syslog v1.0.0/go.mod h1:qPfqrKkXGihmCqbJM2mZgkZGvKG1dFdvsLplgctolz4= diff --git a/pkg/executor/client/client.go b/pkg/executor/client/client.go index 4d32b261..cf64d12f 100644 --- a/pkg/executor/client/client.go +++ b/pkg/executor/client/client.go @@ -21,16 +21,14 @@ import ( "context" "encoding/json" "io" - "net/http" "net/url" "strings" "time" + "github.com/hashicorp/go-retryablehttp" "github.com/pkg/errors" "go.opencensus.io/plugin/ochttp" - "go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp" "go.uber.org/zap" - "golang.org/x/net/context/ctxhttp" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" fv1 "github.com/fission/fission/pkg/apis/core/v1" @@ -45,7 +43,7 @@ type ( executorURL string tappedByURL map[string]TapServiceRequest requestChan chan TapServiceRequest - httpClient *http.Client + httpClient *retryablehttp.Client } // TapServiceRequest represents @@ -58,11 +56,9 @@ type ( // MakeClient initializes and returns a Client instance. func MakeClient(logger *zap.Logger, executorURL string) *Client { - var hc *http.Client + hc := retryablehttp.NewClient() if tracing.TracingEnabled(logger) { - hc = &http.Client{Transport: &ochttp.Transport{}} - } else { - hc = &http.Client{Transport: otelhttp.NewTransport(http.DefaultTransport)} + hc.HTTPClient.Transport = &ochttp.Transport{Base: hc.HTTPClient.Transport} } c := &Client{ @@ -85,7 +81,13 @@ func (c *Client) GetServiceForFunction(ctx context.Context, fn *fv1.Function) (s return "", errors.Wrap(err, "could not marshal request body for getting service for function") } - resp, err := ctxhttp.Post(ctx, c.httpClient, executorURL, "application/json", bytes.NewReader(body)) + req, err := retryablehttp.NewRequestWithContext(ctx, "POST", executorURL, bytes.NewReader(body)) + if err != nil { + return "", errors.Wrap(err, "could not create request for getting service for function") + } + req.Header.Set("Content-Type", "application/json") + + resp, err := c.httpClient.Do(req) if err != nil { return "", errors.Wrap(err, "error posting to getting service for function") } @@ -116,8 +118,13 @@ func (c *Client) UnTapService(ctx context.Context, fnMeta metav1.ObjectMeta, exe if err != nil { return errors.Wrap(err, "could not marshal request body for getting service for function") } + req, err := retryablehttp.NewRequestWithContext(ctx, "POST", url, bytes.NewReader(body)) + if err != nil { + return errors.Wrap(err, "could not create request for untap service for function") + } + req.Header.Set("Content-Type", "application/json") - resp, err := ctxhttp.Post(ctx, c.httpClient, url, "application/json", bytes.NewReader(body)) + resp, err := c.httpClient.Do(req) if err != nil { return errors.Wrap(err, "error posting to getting service for function") } @@ -183,7 +190,13 @@ func (c *Client) _tapService(ctx context.Context, tapSvcReqs []TapServiceRequest return err } - resp, err := ctxhttp.Post(ctx, c.httpClient, executorURL, "application/json", bytes.NewReader(body)) + req, err := retryablehttp.NewRequestWithContext(ctx, "POST", executorURL, bytes.NewReader(body)) + if err != nil { + return errors.Wrap(err, "could not create request for tap service request") + } + req.Header.Set("Content-Type", "application/json") + + resp, err := c.httpClient.Do(req) if err != nil { return err } diff --git a/pkg/router/functionHandler.go b/pkg/router/functionHandler.go index 28c4aab9..641f96cd 100644 --- a/pkg/router/functionHandler.go +++ b/pkg/router/functionHandler.go @@ -733,7 +733,7 @@ func (fh functionHandler) getServiceEntry(ctx context.Context) (svcURL *url.URL, record, ok := recordObj.(svcEntryRecord) if !ok { - return nil, false, fmt.Errorf("received unknown service record type") + return nil, false, fmt.Errorf("unexpected type of recordObj %T: %w", recordObj, err) } return record.svcURL, record.cacheHit, err }