From 31661dd6bed7ca1b87954d980bd0f6adc6a5d4c2 Mon Sep 17 00:00:00 2001 From: Tyler Yahn Date: Mon, 6 Dec 2021 07:47:49 -0800 Subject: [PATCH] Centralize the retry package for the otlp exporters (#2427) * Centralize the retry package for the otlp exporters * Add dependabot config * Use unified internal/retry module in otlp exporters * Remove otlpmetric and otlptrace internal/retry module * Run go mod tidy in otlp{metric,trace} --- .github/dependabot.yml | 10 + bridge/opencensus/go.mod | 2 + bridge/opencensus/test/go.mod | 2 + bridge/opentracing/go.mod | 2 + example/fib/go.mod | 2 + example/jaeger/go.mod | 2 + example/namedtracer/go.mod | 2 + example/opencensus/go.mod | 2 + example/otel-collector/go.mod | 2 + example/passthrough/go.mod | 2 + example/prometheus/go.mod | 2 + example/zipkin/go.mod | 2 + exporters/jaeger/go.mod | 4 +- exporters/otlp/internal/retry/go.mod | 72 +++++++ exporters/otlp/internal/retry/go.sum | 13 ++ .../{otlpmetric => }/internal/retry/retry.go | 15 +- .../internal/retry/retry_test.go | 0 exporters/otlp/otlpmetric/go.mod | 6 +- .../otlpmetric/internal/otlpconfig/options.go | 2 +- .../otlp/otlpmetric/otlpmetricgrpc/client.go | 2 +- .../otlp/otlpmetric/otlpmetricgrpc/go.mod | 5 +- .../otlp/otlpmetric/otlpmetricgrpc/options.go | 2 +- .../otlp/otlpmetric/otlpmetrichttp/client.go | 2 +- .../otlp/otlpmetric/otlpmetrichttp/go.mod | 5 +- .../otlp/otlpmetric/otlpmetrichttp/options.go | 2 +- exporters/otlp/otlptrace/go.mod | 4 +- .../otlptrace/internal/otlpconfig/options.go | 2 +- .../otlp/otlptrace/internal/retry/retry.go | 137 ------------ .../otlptrace/internal/retry/retry_test.go | 197 ------------------ .../otlp/otlptrace/otlptracegrpc/client.go | 2 +- exporters/otlp/otlptrace/otlptracegrpc/go.mod | 3 + .../otlp/otlptrace/otlptracegrpc/options.go | 2 +- .../otlp/otlptrace/otlptracehttp/client.go | 2 +- exporters/otlp/otlptrace/otlptracehttp/go.mod | 3 + .../otlp/otlptrace/otlptracehttp/options.go | 2 +- exporters/prometheus/go.mod | 4 +- exporters/stdout/stdoutmetric/go.mod | 2 + exporters/stdout/stdouttrace/go.mod | 2 + exporters/zipkin/go.mod | 4 +- go.mod | 2 + internal/metric/go.mod | 2 + internal/tools/go.mod | 2 + metric/go.mod | 2 + schema/go.mod | 2 + sdk/export/metric/go.mod | 2 + sdk/go.mod | 2 + sdk/metric/go.mod | 2 + trace/go.mod | 2 + 48 files changed, 187 insertions(+), 359 deletions(-) create mode 100644 exporters/otlp/internal/retry/go.mod create mode 100644 exporters/otlp/internal/retry/go.sum rename exporters/otlp/{otlpmetric => }/internal/retry/retry.go (84%) rename exporters/otlp/{otlpmetric => }/internal/retry/retry_test.go (100%) delete mode 100644 exporters/otlp/otlptrace/internal/retry/retry.go delete mode 100644 exporters/otlp/otlptrace/internal/retry/retry_test.go diff --git a/.github/dependabot.yml b/.github/dependabot.yml index d17e5855df2..d326b38e49c 100644 --- a/.github/dependabot.yml +++ b/.github/dependabot.yml @@ -266,6 +266,16 @@ updates: schedule: day: sunday interval: weekly + - + package-ecosystem: gomod + directory: /exporters/otlp/internal/retry + labels: + - dependencies + - go + - "Skip Changelog" + schedule: + day: sunday + interval: weekly - package-ecosystem: gomod directory: /exporters/otlp/otlptrace diff --git a/bridge/opencensus/go.mod b/bridge/opencensus/go.mod index bda914818a7..0fc1be8170e 100644 --- a/bridge/opencensus/go.mod +++ b/bridge/opencensus/go.mod @@ -75,3 +75,5 @@ replace go.opentelemetry.io/otel/bridge/opencensus/test => ./test replace go.opentelemetry.io/otel/example/fib => ../../example/fib replace go.opentelemetry.io/otel/schema => ../../schema + +replace go.opentelemetry.io/otel/exporters/otlp/internal/retry => ../../exporters/otlp/internal/retry diff --git a/bridge/opencensus/test/go.mod b/bridge/opencensus/test/go.mod index 0cd9c971a3e..8899c89c84c 100644 --- a/bridge/opencensus/test/go.mod +++ b/bridge/opencensus/test/go.mod @@ -71,3 +71,5 @@ replace go.opentelemetry.io/otel/trace => ../../../trace replace go.opentelemetry.io/otel/example/fib => ../../../example/fib replace go.opentelemetry.io/otel/schema => ../../../schema + +replace go.opentelemetry.io/otel/exporters/otlp/internal/retry => ../../../exporters/otlp/internal/retry diff --git a/bridge/opentracing/go.mod b/bridge/opentracing/go.mod index 080c29bf5d1..5f883617cdb 100644 --- a/bridge/opentracing/go.mod +++ b/bridge/opentracing/go.mod @@ -71,3 +71,5 @@ replace go.opentelemetry.io/otel/bridge/opencensus/test => ../opencensus/test replace go.opentelemetry.io/otel/example/fib => ../../example/fib replace go.opentelemetry.io/otel/schema => ../../schema + +replace go.opentelemetry.io/otel/exporters/otlp/internal/retry => ../../exporters/otlp/internal/retry diff --git a/example/fib/go.mod b/example/fib/go.mod index a3b64a01e73..99374884d23 100644 --- a/example/fib/go.mod +++ b/example/fib/go.mod @@ -70,3 +70,5 @@ replace go.opentelemetry.io/otel/trace => ../../trace replace go.opentelemetry.io/otel/example/fib => ./ replace go.opentelemetry.io/otel/schema => ../../schema + +replace go.opentelemetry.io/otel/exporters/otlp/internal/retry => ../../exporters/otlp/internal/retry diff --git a/example/jaeger/go.mod b/example/jaeger/go.mod index ee93a970efe..19781c6bdc3 100644 --- a/example/jaeger/go.mod +++ b/example/jaeger/go.mod @@ -71,3 +71,5 @@ replace go.opentelemetry.io/otel/bridge/opencensus/test => ../../bridge/opencens replace go.opentelemetry.io/otel/example/fib => ../fib replace go.opentelemetry.io/otel/schema => ../../schema + +replace go.opentelemetry.io/otel/exporters/otlp/internal/retry => ../../exporters/otlp/internal/retry diff --git a/example/namedtracer/go.mod b/example/namedtracer/go.mod index 7f1fdd607ef..46b0940070c 100644 --- a/example/namedtracer/go.mod +++ b/example/namedtracer/go.mod @@ -74,3 +74,5 @@ replace go.opentelemetry.io/otel/bridge/opencensus/test => ../../bridge/opencens replace go.opentelemetry.io/otel/example/fib => ../fib replace go.opentelemetry.io/otel/schema => ../../schema + +replace go.opentelemetry.io/otel/exporters/otlp/internal/retry => ../../exporters/otlp/internal/retry diff --git a/example/opencensus/go.mod b/example/opencensus/go.mod index 16ece919fe5..732cf4926be 100644 --- a/example/opencensus/go.mod +++ b/example/opencensus/go.mod @@ -75,3 +75,5 @@ replace go.opentelemetry.io/otel/bridge/opencensus/test => ../../bridge/opencens replace go.opentelemetry.io/otel/example/fib => ../fib replace go.opentelemetry.io/otel/schema => ../../schema + +replace go.opentelemetry.io/otel/exporters/otlp/internal/retry => ../../exporters/otlp/internal/retry diff --git a/example/otel-collector/go.mod b/example/otel-collector/go.mod index 3979adf4028..8712f8cf906 100644 --- a/example/otel-collector/go.mod +++ b/example/otel-collector/go.mod @@ -74,3 +74,5 @@ replace go.opentelemetry.io/otel/bridge/opencensus/test => ../../bridge/opencens replace go.opentelemetry.io/otel/example/fib => ../fib replace go.opentelemetry.io/otel/schema => ../../schema + +replace go.opentelemetry.io/otel/exporters/otlp/internal/retry => ../../exporters/otlp/internal/retry diff --git a/example/passthrough/go.mod b/example/passthrough/go.mod index 2ef80d6db83..956a4c3b6c7 100644 --- a/example/passthrough/go.mod +++ b/example/passthrough/go.mod @@ -74,3 +74,5 @@ replace go.opentelemetry.io/otel/bridge/opencensus/test => ../../bridge/opencens replace go.opentelemetry.io/otel/example/fib => ../fib replace go.opentelemetry.io/otel/schema => ../../schema + +replace go.opentelemetry.io/otel/exporters/otlp/internal/retry => ../../exporters/otlp/internal/retry diff --git a/example/prometheus/go.mod b/example/prometheus/go.mod index e960ef7fab3..138292d7d23 100644 --- a/example/prometheus/go.mod +++ b/example/prometheus/go.mod @@ -73,3 +73,5 @@ replace go.opentelemetry.io/otel/bridge/opencensus/test => ../../bridge/opencens replace go.opentelemetry.io/otel/example/fib => ../fib replace go.opentelemetry.io/otel/schema => ../../schema + +replace go.opentelemetry.io/otel/exporters/otlp/internal/retry => ../../exporters/otlp/internal/retry diff --git a/example/zipkin/go.mod b/example/zipkin/go.mod index 4b5a0503030..b77dc4e647b 100644 --- a/example/zipkin/go.mod +++ b/example/zipkin/go.mod @@ -72,3 +72,5 @@ replace go.opentelemetry.io/otel/bridge/opencensus/test => ../../bridge/opencens replace go.opentelemetry.io/otel/example/fib => ../fib replace go.opentelemetry.io/otel/schema => ../../schema + +replace go.opentelemetry.io/otel/exporters/otlp/internal/retry => ../../exporters/otlp/internal/retry diff --git a/exporters/jaeger/go.mod b/exporters/jaeger/go.mod index 321f4570f98..45d76ccf0aa 100644 --- a/exporters/jaeger/go.mod +++ b/exporters/jaeger/go.mod @@ -30,8 +30,6 @@ replace go.opentelemetry.io/otel/example/zipkin => ../../example/zipkin replace go.opentelemetry.io/otel/exporters/prometheus => ../prometheus -replace go.opentelemetry.io/otel/exporters/otlp => ../otlp - replace go.opentelemetry.io/otel/exporters/jaeger => ./ replace go.opentelemetry.io/otel/internal/tools => ../../internal/tools @@ -75,3 +73,5 @@ replace go.opentelemetry.io/otel/bridge/opencensus/test => ../../bridge/opencens replace go.opentelemetry.io/otel/example/fib => ../../example/fib replace go.opentelemetry.io/otel/schema => ../../schema + +replace go.opentelemetry.io/otel/exporters/otlp/internal/retry => ../otlp/internal/retry diff --git a/exporters/otlp/internal/retry/go.mod b/exporters/otlp/internal/retry/go.mod new file mode 100644 index 00000000000..8e064415d31 --- /dev/null +++ b/exporters/otlp/internal/retry/go.mod @@ -0,0 +1,72 @@ +module go.opentelemetry.io/otel/exporters/otlp/internal/retry + +go 1.16 + +require ( + github.com/cenkalti/backoff/v4 v4.1.2 + github.com/stretchr/testify v1.7.0 +) + +replace go.opentelemetry.io/otel => ../../../.. + +replace go.opentelemetry.io/otel/bridge/opencensus => ../../../../bridge/opencensus + +replace go.opentelemetry.io/otel/bridge/opencensus/test => ../../../../bridge/opencensus/test + +replace go.opentelemetry.io/otel/bridge/opentracing => ../../../../bridge/opentracing + +replace go.opentelemetry.io/otel/example/fib => ../../../../example/fib + +replace go.opentelemetry.io/otel/example/jaeger => ../../../../example/jaeger + +replace go.opentelemetry.io/otel/example/namedtracer => ../../../../example/namedtracer + +replace go.opentelemetry.io/otel/example/opencensus => ../../../../example/opencensus + +replace go.opentelemetry.io/otel/example/otel-collector => ../../../../example/otel-collector + +replace go.opentelemetry.io/otel/example/passthrough => ../../../../example/passthrough + +replace go.opentelemetry.io/otel/example/prometheus => ../../../../example/prometheus + +replace go.opentelemetry.io/otel/example/zipkin => ../../../../example/zipkin + +replace go.opentelemetry.io/otel/exporters/jaeger => ../../../jaeger + +replace go.opentelemetry.io/otel/exporters/otlp/internal/retry => ./ + +replace go.opentelemetry.io/otel/exporters/otlp/otlpmetric => ../../otlpmetric + +replace go.opentelemetry.io/otel/exporters/otlp/otlpmetric/otlpmetricgrpc => ../../otlpmetric/otlpmetricgrpc + +replace go.opentelemetry.io/otel/exporters/otlp/otlpmetric/otlpmetrichttp => ../../otlpmetric/otlpmetrichttp + +replace go.opentelemetry.io/otel/exporters/otlp/otlptrace => ../../otlptrace + +replace go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc => ../../otlptrace/otlptracegrpc + +replace go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp => ../../otlptrace/otlptracehttp + +replace go.opentelemetry.io/otel/exporters/prometheus => ../../../prometheus + +replace go.opentelemetry.io/otel/exporters/stdout/stdoutmetric => ../../../stdout/stdoutmetric + +replace go.opentelemetry.io/otel/exporters/stdout/stdouttrace => ../../../stdout/stdouttrace + +replace go.opentelemetry.io/otel/exporters/zipkin => ../../../zipkin + +replace go.opentelemetry.io/otel/internal/metric => ../../../../internal/metric + +replace go.opentelemetry.io/otel/internal/tools => ../../../../internal/tools + +replace go.opentelemetry.io/otel/metric => ../../../../metric + +replace go.opentelemetry.io/otel/schema => ../../../../schema + +replace go.opentelemetry.io/otel/sdk => ../../../../sdk + +replace go.opentelemetry.io/otel/sdk/export/metric => ../../../../sdk/export/metric + +replace go.opentelemetry.io/otel/sdk/metric => ../../../../sdk/metric + +replace go.opentelemetry.io/otel/trace => ../../../../trace diff --git a/exporters/otlp/internal/retry/go.sum b/exporters/otlp/internal/retry/go.sum new file mode 100644 index 00000000000..de50e341131 --- /dev/null +++ b/exporters/otlp/internal/retry/go.sum @@ -0,0 +1,13 @@ +github.com/cenkalti/backoff/v4 v4.1.2 h1:6Yo7N8UP2K6LWZnW94DLVSSrbobcWdVzAYOisuDPIFo= +github.com/cenkalti/backoff/v4 v4.1.2/go.mod h1:scbssz8iZGpm3xbr14ovlUdkxfGXNInqkPWOWmG2CLw= +github.com/davecgh/go-spew v1.1.0 h1:ZDRjVQ15GmhC3fiQ8ni8+OwkZQO4DARzQgrnXU1Liz8= +github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= +github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM= +github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= +github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= +github.com/stretchr/testify v1.7.0 h1:nwc3DEeHmmLAfoZucVR881uASk0Mfjw8xYJ99tb5CcY= +github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= +gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405 h1:yhCVgyC4o1eVCa2tZl7eS0r+SDo693bJlVdllGtEeKM= +gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= +gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c h1:dUUwHk2QECo/6vqA44rthZ8ie2QXMNeKRTHCNY2nXvo= +gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= diff --git a/exporters/otlp/otlpmetric/internal/retry/retry.go b/exporters/otlp/internal/retry/retry.go similarity index 84% rename from exporters/otlp/otlpmetric/internal/retry/retry.go rename to exporters/otlp/internal/retry/retry.go index 830208f82f3..3d43f7aea97 100644 --- a/exporters/otlp/otlpmetric/internal/retry/retry.go +++ b/exporters/otlp/internal/retry/retry.go @@ -12,7 +12,10 @@ // See the License for the specific language governing permissions and // limitations under the License. -package retry // import "go.opentelemetry.io/otel/exporters/otlp/otlpmetric/internal/retry" +// Package retry provides request retry functionality that can perform +// configurable exponential backoff for transient errors and honor any +// explicit throttle responses received. +package retry // import "go.opentelemetry.io/otel/exporters/otlp/internal/retry" import ( "context" @@ -54,8 +57,18 @@ type RequestFunc func(context.Context, func(context.Context) error) error // EvaluateFunc returns if an error is retry-able and if an explicit throttle // duration should be honored that was included in the error. +// +// The function must return true if the error argument is retry-able, +// otherwise it must return false for the first return parameter. +// +// The function must return a non-zero time.Duration if the error contains +// explicit throttle duration that should be honored, otherwise it must return +// a zero valued time.Duration. type EvaluateFunc func(error) (bool, time.Duration) +// RequestFunc returns a RequestFunc using the evaluate function to determine +// if requests can be retried and based on the exponential backoff +// configuration of c. func (c Config) RequestFunc(evaluate EvaluateFunc) RequestFunc { if !c.Enabled { return func(ctx context.Context, fn func(context.Context) error) error { diff --git a/exporters/otlp/otlpmetric/internal/retry/retry_test.go b/exporters/otlp/internal/retry/retry_test.go similarity index 100% rename from exporters/otlp/otlpmetric/internal/retry/retry_test.go rename to exporters/otlp/internal/retry/retry_test.go diff --git a/exporters/otlp/otlpmetric/go.mod b/exporters/otlp/otlpmetric/go.mod index 287d571fac5..d0b2d386342 100644 --- a/exporters/otlp/otlpmetric/go.mod +++ b/exporters/otlp/otlpmetric/go.mod @@ -3,10 +3,10 @@ module go.opentelemetry.io/otel/exporters/otlp/otlpmetric go 1.16 require ( - github.com/cenkalti/backoff/v4 v4.1.2 github.com/google/go-cmp v0.5.6 github.com/stretchr/testify v1.7.0 go.opentelemetry.io/otel v1.2.0 + go.opentelemetry.io/otel/exporters/otlp/internal/retry v0.0.0-00010101000000-000000000000 go.opentelemetry.io/otel/metric v0.25.0 go.opentelemetry.io/otel/sdk v1.2.0 go.opentelemetry.io/otel/sdk/export/metric v0.25.0 @@ -20,8 +20,6 @@ replace go.opentelemetry.io/otel => ../../.. replace go.opentelemetry.io/otel/sdk => ../../../sdk -replace go.opentelemetry.io/otel/exporters/otlp => ../ - replace go.opentelemetry.io/otel/metric => ../../../metric replace go.opentelemetry.io/otel/trace => ../../../trace @@ -50,6 +48,8 @@ replace go.opentelemetry.io/otel/example/prometheus => ../../../example/promethe replace go.opentelemetry.io/otel/example/zipkin => ../../../example/zipkin +replace go.opentelemetry.io/otel/exporters/otlp/internal/retry => ../internal/retry + replace go.opentelemetry.io/otel/exporters/otlp/otlpmetric => ./ replace go.opentelemetry.io/otel/exporters/otlp/otlpmetric/otlpmetricgrpc => ./otlpmetricgrpc diff --git a/exporters/otlp/otlpmetric/internal/otlpconfig/options.go b/exporters/otlp/otlpmetric/internal/otlpconfig/options.go index 485555364b9..067c72fd4ab 100644 --- a/exporters/otlp/otlpmetric/internal/otlpconfig/options.go +++ b/exporters/otlp/otlpmetric/internal/otlpconfig/options.go @@ -24,7 +24,7 @@ import ( "google.golang.org/grpc/credentials" "google.golang.org/grpc/encoding/gzip" - "go.opentelemetry.io/otel/exporters/otlp/otlpmetric/internal/retry" + "go.opentelemetry.io/otel/exporters/otlp/internal/retry" ) const ( diff --git a/exporters/otlp/otlpmetric/otlpmetricgrpc/client.go b/exporters/otlp/otlpmetric/otlpmetricgrpc/client.go index 9192930e22a..ee08f8a00b2 100644 --- a/exporters/otlp/otlpmetric/otlpmetricgrpc/client.go +++ b/exporters/otlp/otlpmetric/otlpmetricgrpc/client.go @@ -26,9 +26,9 @@ import ( "google.golang.org/grpc/metadata" "google.golang.org/grpc/status" + "go.opentelemetry.io/otel/exporters/otlp/internal/retry" "go.opentelemetry.io/otel/exporters/otlp/otlpmetric" "go.opentelemetry.io/otel/exporters/otlp/otlpmetric/internal/otlpconfig" - "go.opentelemetry.io/otel/exporters/otlp/otlpmetric/internal/retry" colmetricpb "go.opentelemetry.io/proto/otlp/collector/metrics/v1" metricpb "go.opentelemetry.io/proto/otlp/metrics/v1" ) diff --git a/exporters/otlp/otlpmetric/otlpmetricgrpc/go.mod b/exporters/otlp/otlpmetric/otlpmetricgrpc/go.mod index 32250b2035e..e697ddfad76 100644 --- a/exporters/otlp/otlpmetric/otlpmetricgrpc/go.mod +++ b/exporters/otlp/otlpmetric/otlpmetricgrpc/go.mod @@ -5,6 +5,7 @@ go 1.16 require ( github.com/stretchr/testify v1.7.0 go.opentelemetry.io/otel v1.2.0 + go.opentelemetry.io/otel/exporters/otlp/internal/retry v0.0.0-00010101000000-000000000000 go.opentelemetry.io/otel/exporters/otlp/otlpmetric v0.25.0 go.opentelemetry.io/otel/metric v0.25.0 go.opentelemetry.io/otel/sdk v1.2.0 @@ -21,8 +22,6 @@ replace go.opentelemetry.io/otel/sdk => ../../../../sdk replace go.opentelemetry.io/otel/sdk/metric => ../../../../sdk/metric -replace go.opentelemetry.io/otel/exporters/otlp => ../.. - replace go.opentelemetry.io/otel/exporters/otlp/otlpmetric => ../ replace go.opentelemetry.io/otel/metric => ../../../../metric @@ -80,3 +79,5 @@ replace go.opentelemetry.io/otel/bridge/opencensus/test => ../../../../bridge/op replace go.opentelemetry.io/otel/example/fib => ../../../../example/fib replace go.opentelemetry.io/otel/schema => ../../../../schema + +replace go.opentelemetry.io/otel/exporters/otlp/internal/retry => ../../internal/retry diff --git a/exporters/otlp/otlpmetric/otlpmetricgrpc/options.go b/exporters/otlp/otlpmetric/otlpmetricgrpc/options.go index 685e08aeb67..e6d3919eab1 100644 --- a/exporters/otlp/otlpmetric/otlpmetricgrpc/options.go +++ b/exporters/otlp/otlpmetric/otlpmetricgrpc/options.go @@ -22,8 +22,8 @@ import ( "google.golang.org/grpc/credentials" "go.opentelemetry.io/otel" + "go.opentelemetry.io/otel/exporters/otlp/internal/retry" "go.opentelemetry.io/otel/exporters/otlp/otlpmetric/internal/otlpconfig" - "go.opentelemetry.io/otel/exporters/otlp/otlpmetric/internal/retry" ) // Option applies an option to the gRPC driver. diff --git a/exporters/otlp/otlpmetric/otlpmetrichttp/client.go b/exporters/otlp/otlpmetric/otlpmetrichttp/client.go index b6b135c142a..b78067dc075 100644 --- a/exporters/otlp/otlpmetric/otlpmetrichttp/client.go +++ b/exporters/otlp/otlpmetric/otlpmetrichttp/client.go @@ -31,9 +31,9 @@ import ( "google.golang.org/protobuf/proto" + "go.opentelemetry.io/otel/exporters/otlp/internal/retry" "go.opentelemetry.io/otel/exporters/otlp/otlpmetric" "go.opentelemetry.io/otel/exporters/otlp/otlpmetric/internal/otlpconfig" - "go.opentelemetry.io/otel/exporters/otlp/otlpmetric/internal/retry" colmetricpb "go.opentelemetry.io/proto/otlp/collector/metrics/v1" metricpb "go.opentelemetry.io/proto/otlp/metrics/v1" ) diff --git a/exporters/otlp/otlpmetric/otlpmetrichttp/go.mod b/exporters/otlp/otlpmetric/otlpmetrichttp/go.mod index 14a3a27fa18..f8cc9ddc809 100644 --- a/exporters/otlp/otlpmetric/otlpmetrichttp/go.mod +++ b/exporters/otlp/otlpmetric/otlpmetrichttp/go.mod @@ -4,6 +4,7 @@ go 1.16 require ( github.com/stretchr/testify v1.7.0 + go.opentelemetry.io/otel/exporters/otlp/internal/retry v0.0.0-00010101000000-000000000000 go.opentelemetry.io/otel/exporters/otlp/otlpmetric v0.25.0 go.opentelemetry.io/otel/sdk v1.2.0 go.opentelemetry.io/proto/otlp v0.11.0 @@ -16,8 +17,6 @@ replace go.opentelemetry.io/otel/sdk => ../../../../sdk replace go.opentelemetry.io/otel/sdk/metric => ../../../../sdk/metric -replace go.opentelemetry.io/otel/exporters/otlp => ../.. - replace go.opentelemetry.io/otel/exporters/otlp/otlpmetric => ../ replace go.opentelemetry.io/otel/metric => ../../../../metric @@ -81,3 +80,5 @@ replace go.opentelemetry.io/otel/bridge/opencensus/test => ../../../../bridge/op replace go.opentelemetry.io/otel/example/fib => ../../../../example/fib replace go.opentelemetry.io/otel/schema => ../../../../schema + +replace go.opentelemetry.io/otel/exporters/otlp/internal/retry => ../../internal/retry diff --git a/exporters/otlp/otlpmetric/otlpmetrichttp/options.go b/exporters/otlp/otlpmetric/otlpmetrichttp/options.go index 95ac42fd7f0..61dbccc3078 100644 --- a/exporters/otlp/otlpmetric/otlpmetrichttp/options.go +++ b/exporters/otlp/otlpmetric/otlpmetrichttp/options.go @@ -18,8 +18,8 @@ import ( "crypto/tls" "time" + "go.opentelemetry.io/otel/exporters/otlp/internal/retry" "go.opentelemetry.io/otel/exporters/otlp/otlpmetric/internal/otlpconfig" - "go.opentelemetry.io/otel/exporters/otlp/otlpmetric/internal/retry" ) // Compression describes the compression used for payloads sent to the diff --git a/exporters/otlp/otlptrace/go.mod b/exporters/otlp/otlptrace/go.mod index d24a4ecea4b..b70ce4c280c 100644 --- a/exporters/otlp/otlptrace/go.mod +++ b/exporters/otlp/otlptrace/go.mod @@ -3,10 +3,10 @@ module go.opentelemetry.io/otel/exporters/otlp/otlptrace go 1.16 require ( - github.com/cenkalti/backoff/v4 v4.1.2 github.com/google/go-cmp v0.5.6 github.com/stretchr/testify v1.7.0 go.opentelemetry.io/otel v1.2.0 + go.opentelemetry.io/otel/exporters/otlp/internal/retry v0.0.0-00010101000000-000000000000 go.opentelemetry.io/otel/sdk v1.2.0 go.opentelemetry.io/otel/trace v1.2.0 go.opentelemetry.io/proto/otlp v0.11.0 @@ -77,3 +77,5 @@ replace go.opentelemetry.io/otel/bridge/opencensus/test => ../../../bridge/openc replace go.opentelemetry.io/otel/example/fib => ../../../example/fib replace go.opentelemetry.io/otel/schema => ../../../schema + +replace go.opentelemetry.io/otel/exporters/otlp/internal/retry => ../internal/retry diff --git a/exporters/otlp/otlptrace/internal/otlpconfig/options.go b/exporters/otlp/otlptrace/internal/otlpconfig/options.go index 0e2c330a0a5..6cfb9fd2e67 100644 --- a/exporters/otlp/otlptrace/internal/otlpconfig/options.go +++ b/exporters/otlp/otlptrace/internal/otlpconfig/options.go @@ -24,7 +24,7 @@ import ( "google.golang.org/grpc/credentials" "google.golang.org/grpc/encoding/gzip" - "go.opentelemetry.io/otel/exporters/otlp/otlptrace/internal/retry" + "go.opentelemetry.io/otel/exporters/otlp/internal/retry" ) const ( diff --git a/exporters/otlp/otlptrace/internal/retry/retry.go b/exporters/otlp/otlptrace/internal/retry/retry.go deleted file mode 100644 index 37b9dabe5d8..00000000000 --- a/exporters/otlp/otlptrace/internal/retry/retry.go +++ /dev/null @@ -1,137 +0,0 @@ -// Copyright The OpenTelemetry Authors -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -package retry // import "go.opentelemetry.io/otel/exporters/otlp/otlptrace/internal/retry" - -import ( - "context" - "fmt" - "time" - - "github.com/cenkalti/backoff/v4" -) - -// DefaultConfig are the recommended defaults to use. -var DefaultConfig = Config{ - Enabled: true, - InitialInterval: 5 * time.Second, - MaxInterval: 30 * time.Second, - MaxElapsedTime: time.Minute, -} - -// Config defines configuration for retrying batches in case of export failure -// using an exponential backoff. -type Config struct { - // Enabled indicates whether to not retry sending batches in case of - // export failure. - Enabled bool - // InitialInterval the time to wait after the first failure before - // retrying. - InitialInterval time.Duration - // MaxInterval is the upper bound on backoff interval. Once this value is - // reached the delay between consecutive retries will always be - // `MaxInterval`. - MaxInterval time.Duration - // MaxElapsedTime is the maximum amount of time (including retries) spent - // trying to send a request/batch. Once this value is reached, the data - // is discarded. - MaxElapsedTime time.Duration -} - -// RequestFunc wraps a request with retry logic. -type RequestFunc func(context.Context, func(context.Context) error) error - -// EvaluateFunc returns if an error is retry-able and if an explicit throttle -// duration should be honored that was included in the error. -type EvaluateFunc func(error) (bool, time.Duration) - -func (c Config) RequestFunc(evaluate EvaluateFunc) RequestFunc { - if !c.Enabled { - return func(ctx context.Context, fn func(context.Context) error) error { - return fn(ctx) - } - } - - // Do not use NewExponentialBackOff since it calls Reset and the code here - // must call Reset after changing the InitialInterval (this saves an - // unnecessary call to Now). - b := &backoff.ExponentialBackOff{ - InitialInterval: c.InitialInterval, - RandomizationFactor: backoff.DefaultRandomizationFactor, - Multiplier: backoff.DefaultMultiplier, - MaxInterval: c.MaxInterval, - MaxElapsedTime: c.MaxElapsedTime, - Stop: backoff.Stop, - Clock: backoff.SystemClock, - } - b.Reset() - - return func(ctx context.Context, fn func(context.Context) error) error { - for { - err := fn(ctx) - if err == nil { - return nil - } - - retryable, throttle := evaluate(err) - if !retryable { - return err - } - - bOff := b.NextBackOff() - if bOff == backoff.Stop { - return fmt.Errorf("max retry time elapsed: %w", err) - } - - // Wait for the greater of the backoff or throttle delay. - var delay time.Duration - if bOff > throttle { - delay = bOff - } else { - elapsed := b.GetElapsedTime() - if b.MaxElapsedTime != 0 && elapsed+throttle > b.MaxElapsedTime { - return fmt.Errorf("max retry time would elapse: %w", err) - } - delay = throttle - } - - if err := waitFunc(ctx, delay); err != nil { - return err - } - } - } -} - -// Allow override for testing. -var waitFunc = wait - -func wait(ctx context.Context, delay time.Duration) error { - timer := time.NewTimer(delay) - defer timer.Stop() - - select { - case <-ctx.Done(): - // Handle the case where the timer and context deadline end - // simultaneously by prioritizing the timer expiration nil value - // response. - select { - case <-timer.C: - default: - return ctx.Err() - } - case <-timer.C: - } - - return nil -} diff --git a/exporters/otlp/otlptrace/internal/retry/retry_test.go b/exporters/otlp/otlptrace/internal/retry/retry_test.go deleted file mode 100644 index d2b5b6c4b59..00000000000 --- a/exporters/otlp/otlptrace/internal/retry/retry_test.go +++ /dev/null @@ -1,197 +0,0 @@ -// Copyright The OpenTelemetry Authors -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -package retry - -import ( - "context" - "errors" - "testing" - "time" - - "github.com/stretchr/testify/assert" -) - -func TestWait(t *testing.T) { - tests := []struct { - ctx context.Context - delay time.Duration - expected error - }{ - { - ctx: context.Background(), - delay: time.Duration(0), - expected: nil, - }, - { - ctx: context.Background(), - delay: time.Duration(1), - expected: nil, - }, - { - ctx: context.Background(), - delay: time.Duration(-1), - expected: nil, - }, - { - ctx: func() context.Context { - ctx, cancel := context.WithCancel(context.Background()) - cancel() - return ctx - }(), - // Ensure the timer and context do not end simultaneously. - delay: 1 * time.Hour, - expected: context.Canceled, - }, - } - - for _, test := range tests { - assert.Equal(t, test.expected, wait(test.ctx, test.delay)) - } -} - -func TestNonRetryableError(t *testing.T) { - ev := func(error) (bool, time.Duration) { return false, 0 } - - reqFunc := Config{ - Enabled: true, - InitialInterval: 1 * time.Nanosecond, - MaxInterval: 1 * time.Nanosecond, - // Never stop retrying. - MaxElapsedTime: 0, - }.RequestFunc(ev) - ctx := context.Background() - assert.NoError(t, reqFunc(ctx, func(context.Context) error { - return nil - })) - assert.ErrorIs(t, reqFunc(ctx, func(context.Context) error { - return assert.AnError - }), assert.AnError) -} - -func TestThrottledRetry(t *testing.T) { - // Ensure the throttle delay is used by making longer than backoff delay. - throttleDelay, backoffDelay := time.Second, time.Nanosecond - - ev := func(error) (bool, time.Duration) { - // Retry everything with a throttle delay. - return true, throttleDelay - } - - reqFunc := Config{ - Enabled: true, - InitialInterval: backoffDelay, - MaxInterval: backoffDelay, - // Never stop retrying. - MaxElapsedTime: 0, - }.RequestFunc(ev) - - origWait := waitFunc - var done bool - waitFunc = func(_ context.Context, delay time.Duration) error { - assert.Equal(t, throttleDelay, delay, "retry not throttled") - // Try twice to ensure call is attempted again after delay. - if done { - return assert.AnError - } - done = true - return nil - } - defer func() { waitFunc = origWait }() - - ctx := context.Background() - assert.ErrorIs(t, reqFunc(ctx, func(context.Context) error { - return errors.New("not this error") - }), assert.AnError) -} - -func TestBackoffRetry(t *testing.T) { - ev := func(error) (bool, time.Duration) { return true, 0 } - - delay := time.Nanosecond - reqFunc := Config{ - Enabled: true, - InitialInterval: delay, - MaxInterval: delay, - // Never stop retrying. - MaxElapsedTime: 0, - }.RequestFunc(ev) - - origWait := waitFunc - var done bool - waitFunc = func(_ context.Context, d time.Duration) error { - assert.Equal(t, delay, d, "retry not backoffed") - // Try twice to ensure call is attempted again after delay. - if done { - return assert.AnError - } - done = true - return nil - } - defer func() { waitFunc = origWait }() - - ctx := context.Background() - assert.ErrorIs(t, reqFunc(ctx, func(context.Context) error { - return errors.New("not this error") - }), assert.AnError) -} - -func TestThrottledRetryGreaterThanMaxElapsedTime(t *testing.T) { - // Ensure the throttle delay is used by making longer than backoff delay. - tDelay, bDelay := time.Hour, time.Nanosecond - ev := func(error) (bool, time.Duration) { return true, tDelay } - reqFunc := Config{ - Enabled: true, - InitialInterval: bDelay, - MaxInterval: bDelay, - MaxElapsedTime: tDelay - (time.Nanosecond), - }.RequestFunc(ev) - - ctx := context.Background() - assert.Contains(t, reqFunc(ctx, func(context.Context) error { - return assert.AnError - }).Error(), "max retry time would elapse: ") -} - -func TestMaxElapsedTime(t *testing.T) { - ev := func(error) (bool, time.Duration) { return true, 0 } - delay := time.Nanosecond - reqFunc := Config{ - Enabled: true, - // InitialInterval > MaxElapsedTime means immediate return. - InitialInterval: 2 * delay, - MaxElapsedTime: delay, - }.RequestFunc(ev) - - ctx := context.Background() - assert.Contains(t, reqFunc(ctx, func(context.Context) error { - return assert.AnError - }).Error(), "max retry time elapsed: ") -} - -func TestRetryNotEnabled(t *testing.T) { - ev := func(error) (bool, time.Duration) { - t.Error("evaluated retry when not enabled") - return false, 0 - } - - reqFunc := Config{}.RequestFunc(ev) - ctx := context.Background() - assert.NoError(t, reqFunc(ctx, func(context.Context) error { - return nil - })) - assert.ErrorIs(t, reqFunc(ctx, func(context.Context) error { - return assert.AnError - }), assert.AnError) -} diff --git a/exporters/otlp/otlptrace/otlptracegrpc/client.go b/exporters/otlp/otlptrace/otlptracegrpc/client.go index 03bb359f122..d709ffa96e1 100644 --- a/exporters/otlp/otlptrace/otlptracegrpc/client.go +++ b/exporters/otlp/otlptrace/otlptracegrpc/client.go @@ -26,9 +26,9 @@ import ( "google.golang.org/grpc/metadata" "google.golang.org/grpc/status" + "go.opentelemetry.io/otel/exporters/otlp/internal/retry" "go.opentelemetry.io/otel/exporters/otlp/otlptrace" "go.opentelemetry.io/otel/exporters/otlp/otlptrace/internal/otlpconfig" - "go.opentelemetry.io/otel/exporters/otlp/otlptrace/internal/retry" coltracepb "go.opentelemetry.io/proto/otlp/collector/trace/v1" tracepb "go.opentelemetry.io/proto/otlp/trace/v1" ) diff --git a/exporters/otlp/otlptrace/otlptracegrpc/go.mod b/exporters/otlp/otlptrace/otlptracegrpc/go.mod index 2959daf4b56..63e48fe5d1b 100644 --- a/exporters/otlp/otlptrace/otlptracegrpc/go.mod +++ b/exporters/otlp/otlptrace/otlptracegrpc/go.mod @@ -5,6 +5,7 @@ go 1.16 require ( github.com/stretchr/testify v1.7.0 go.opentelemetry.io/otel v1.2.0 + go.opentelemetry.io/otel/exporters/otlp/internal/retry v0.0.0-00010101000000-000000000000 go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.2.0 go.opentelemetry.io/otel/sdk v1.2.0 go.opentelemetry.io/proto/otlp v0.11.0 @@ -77,3 +78,5 @@ replace go.opentelemetry.io/otel/bridge/opencensus/test => ../../../../bridge/op replace go.opentelemetry.io/otel/example/fib => ../../../../example/fib replace go.opentelemetry.io/otel/schema => ../../../../schema + +replace go.opentelemetry.io/otel/exporters/otlp/internal/retry => ../../internal/retry diff --git a/exporters/otlp/otlptrace/otlptracegrpc/options.go b/exporters/otlp/otlptrace/otlptracegrpc/options.go index 8948c0e9c0b..0b27a35a8e1 100644 --- a/exporters/otlp/otlptrace/otlptracegrpc/options.go +++ b/exporters/otlp/otlptrace/otlptracegrpc/options.go @@ -22,8 +22,8 @@ import ( "google.golang.org/grpc/credentials" "go.opentelemetry.io/otel" + "go.opentelemetry.io/otel/exporters/otlp/internal/retry" "go.opentelemetry.io/otel/exporters/otlp/otlptrace/internal/otlpconfig" - "go.opentelemetry.io/otel/exporters/otlp/otlptrace/internal/retry" ) // Option applies an option to the gRPC driver. diff --git a/exporters/otlp/otlptrace/otlptracehttp/client.go b/exporters/otlp/otlptrace/otlptracehttp/client.go index f51e4bc789b..93a7e4a7e86 100644 --- a/exporters/otlp/otlptrace/otlptracehttp/client.go +++ b/exporters/otlp/otlptrace/otlptracehttp/client.go @@ -31,9 +31,9 @@ import ( "google.golang.org/protobuf/proto" + "go.opentelemetry.io/otel/exporters/otlp/internal/retry" "go.opentelemetry.io/otel/exporters/otlp/otlptrace" "go.opentelemetry.io/otel/exporters/otlp/otlptrace/internal/otlpconfig" - "go.opentelemetry.io/otel/exporters/otlp/otlptrace/internal/retry" coltracepb "go.opentelemetry.io/proto/otlp/collector/trace/v1" tracepb "go.opentelemetry.io/proto/otlp/trace/v1" ) diff --git a/exporters/otlp/otlptrace/otlptracehttp/go.mod b/exporters/otlp/otlptrace/otlptracehttp/go.mod index c12452faf75..317cc6b9501 100644 --- a/exporters/otlp/otlptrace/otlptracehttp/go.mod +++ b/exporters/otlp/otlptrace/otlptracehttp/go.mod @@ -5,6 +5,7 @@ go 1.16 require ( github.com/stretchr/testify v1.7.0 go.opentelemetry.io/otel v1.2.0 + go.opentelemetry.io/otel/exporters/otlp/internal/retry v0.0.0-00010101000000-000000000000 go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.2.0 go.opentelemetry.io/otel/sdk v1.2.0 go.opentelemetry.io/otel/trace v1.2.0 @@ -75,3 +76,5 @@ replace go.opentelemetry.io/otel/bridge/opencensus/test => ../../../../bridge/op replace go.opentelemetry.io/otel/example/fib => ../../../../example/fib replace go.opentelemetry.io/otel/schema => ../../../../schema + +replace go.opentelemetry.io/otel/exporters/otlp/internal/retry => ../../internal/retry diff --git a/exporters/otlp/otlptrace/otlptracehttp/options.go b/exporters/otlp/otlptrace/otlptracehttp/options.go index 7cb45010e1a..5b52f8fc65c 100644 --- a/exporters/otlp/otlptrace/otlptracehttp/options.go +++ b/exporters/otlp/otlptrace/otlptracehttp/options.go @@ -18,8 +18,8 @@ import ( "crypto/tls" "time" + "go.opentelemetry.io/otel/exporters/otlp/internal/retry" "go.opentelemetry.io/otel/exporters/otlp/otlptrace/internal/otlpconfig" - "go.opentelemetry.io/otel/exporters/otlp/otlptrace/internal/retry" ) // Compression describes the compression used for payloads sent to the diff --git a/exporters/prometheus/go.mod b/exporters/prometheus/go.mod index 1459bc71309..60126cac960 100644 --- a/exporters/prometheus/go.mod +++ b/exporters/prometheus/go.mod @@ -34,8 +34,6 @@ replace go.opentelemetry.io/otel/example/prometheus => ../../example/prometheus replace go.opentelemetry.io/otel/example/zipkin => ../../example/zipkin -replace go.opentelemetry.io/otel/exporters/otlp => ../otlp - replace go.opentelemetry.io/otel/exporters/otlp/otlptrace => ../otlp/otlptrace replace go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc => ../otlp/otlptrace/otlptracegrpc @@ -77,3 +75,5 @@ replace go.opentelemetry.io/otel/bridge/opencensus/test => ../../bridge/opencens replace go.opentelemetry.io/otel/example/fib => ../../example/fib replace go.opentelemetry.io/otel/schema => ../../schema + +replace go.opentelemetry.io/otel/exporters/otlp/internal/retry => ../otlp/internal/retry diff --git a/exporters/stdout/stdoutmetric/go.mod b/exporters/stdout/stdoutmetric/go.mod index 757ea6f9fc8..3e9195b8c1c 100644 --- a/exporters/stdout/stdoutmetric/go.mod +++ b/exporters/stdout/stdoutmetric/go.mod @@ -75,3 +75,5 @@ replace go.opentelemetry.io/otel/bridge/opencensus/test => ../../../bridge/openc replace go.opentelemetry.io/otel/example/fib => ../../../example/fib replace go.opentelemetry.io/otel/schema => ../../../schema + +replace go.opentelemetry.io/otel/exporters/otlp/internal/retry => ../../otlp/internal/retry diff --git a/exporters/stdout/stdouttrace/go.mod b/exporters/stdout/stdouttrace/go.mod index 7a8945e43ef..43394748634 100644 --- a/exporters/stdout/stdouttrace/go.mod +++ b/exporters/stdout/stdouttrace/go.mod @@ -73,3 +73,5 @@ replace go.opentelemetry.io/otel/bridge/opencensus/test => ../../../bridge/openc replace go.opentelemetry.io/otel/example/fib => ../../../example/fib replace go.opentelemetry.io/otel/schema => ../../../schema + +replace go.opentelemetry.io/otel/exporters/otlp/internal/retry => ../../otlp/internal/retry diff --git a/exporters/zipkin/go.mod b/exporters/zipkin/go.mod index d39fa877fc2..b78cfb08522 100644 --- a/exporters/zipkin/go.mod +++ b/exporters/zipkin/go.mod @@ -31,8 +31,6 @@ replace go.opentelemetry.io/otel/example/zipkin => ../../example/zipkin replace go.opentelemetry.io/otel/exporters/prometheus => ../prometheus -replace go.opentelemetry.io/otel/exporters/otlp => ../otlp - replace go.opentelemetry.io/otel/exporters/jaeger => ../jaeger replace go.opentelemetry.io/otel/exporters/zipkin => ./ @@ -76,3 +74,5 @@ replace go.opentelemetry.io/otel/bridge/opencensus/test => ../../bridge/opencens replace go.opentelemetry.io/otel/example/fib => ../../example/fib replace go.opentelemetry.io/otel/schema => ../../schema + +replace go.opentelemetry.io/otel/exporters/otlp/internal/retry => ../otlp/internal/retry diff --git a/go.mod b/go.mod index 9f6113c3cb2..bb98446431e 100644 --- a/go.mod +++ b/go.mod @@ -73,3 +73,5 @@ replace go.opentelemetry.io/otel/bridge/opencensus/test => ./bridge/opencensus/t replace go.opentelemetry.io/otel/example/fib => ./example/fib replace go.opentelemetry.io/otel/schema => ./schema + +replace go.opentelemetry.io/otel/exporters/otlp/internal/retry => ./exporters/otlp/internal/retry diff --git a/internal/metric/go.mod b/internal/metric/go.mod index 3889013463f..18be98c6894 100644 --- a/internal/metric/go.mod +++ b/internal/metric/go.mod @@ -71,3 +71,5 @@ replace go.opentelemetry.io/otel/bridge/opencensus/test => ../../bridge/opencens replace go.opentelemetry.io/otel/example/fib => ../../example/fib replace go.opentelemetry.io/otel/schema => ../../schema + +replace go.opentelemetry.io/otel/exporters/otlp/internal/retry => ../../exporters/otlp/internal/retry diff --git a/internal/tools/go.mod b/internal/tools/go.mod index d173e9cc892..3f963806616 100644 --- a/internal/tools/go.mod +++ b/internal/tools/go.mod @@ -78,3 +78,5 @@ replace go.opentelemetry.io/otel/bridge/opencensus/test => ../../bridge/opencens replace go.opentelemetry.io/otel/example/fib => ../../example/fib replace go.opentelemetry.io/otel/schema => ../../schema + +replace go.opentelemetry.io/otel/exporters/otlp/internal/retry => ../../exporters/otlp/internal/retry diff --git a/metric/go.mod b/metric/go.mod index b67c511ddb4..0f0d9175a4a 100644 --- a/metric/go.mod +++ b/metric/go.mod @@ -72,3 +72,5 @@ replace go.opentelemetry.io/otel/bridge/opencensus/test => ../bridge/opencensus/ replace go.opentelemetry.io/otel/example/fib => ../example/fib replace go.opentelemetry.io/otel/schema => ../schema + +replace go.opentelemetry.io/otel/exporters/otlp/internal/retry => ../exporters/otlp/internal/retry diff --git a/schema/go.mod b/schema/go.mod index 7e601a6331a..f98187eeaee 100644 --- a/schema/go.mod +++ b/schema/go.mod @@ -69,3 +69,5 @@ replace go.opentelemetry.io/otel/sdk/export/metric => ../sdk/export/metric replace go.opentelemetry.io/otel/sdk/metric => ../sdk/metric replace go.opentelemetry.io/otel/trace => ../trace + +replace go.opentelemetry.io/otel/exporters/otlp/internal/retry => ../exporters/otlp/internal/retry diff --git a/sdk/export/metric/go.mod b/sdk/export/metric/go.mod index 75aca8ee83c..bce145bd76e 100644 --- a/sdk/export/metric/go.mod +++ b/sdk/export/metric/go.mod @@ -72,3 +72,5 @@ replace go.opentelemetry.io/otel/bridge/opencensus/test => ../../../bridge/openc replace go.opentelemetry.io/otel/example/fib => ../../../example/fib replace go.opentelemetry.io/otel/schema => ../../../schema + +replace go.opentelemetry.io/otel/exporters/otlp/internal/retry => ../../../exporters/otlp/internal/retry diff --git a/sdk/go.mod b/sdk/go.mod index 1bf14c82678..e1c9f43f436 100644 --- a/sdk/go.mod +++ b/sdk/go.mod @@ -73,3 +73,5 @@ replace go.opentelemetry.io/otel/bridge/opencensus/test => ../bridge/opencensus/ replace go.opentelemetry.io/otel/example/fib => ../example/fib replace go.opentelemetry.io/otel/schema => ../schema + +replace go.opentelemetry.io/otel/exporters/otlp/internal/retry => ../exporters/otlp/internal/retry diff --git a/sdk/metric/go.mod b/sdk/metric/go.mod index 6c3fc885a8e..27f1e53c6bf 100644 --- a/sdk/metric/go.mod +++ b/sdk/metric/go.mod @@ -75,3 +75,5 @@ replace go.opentelemetry.io/otel/bridge/opencensus/test => ../../bridge/opencens replace go.opentelemetry.io/otel/example/fib => ../../example/fib replace go.opentelemetry.io/otel/schema => ../../schema + +replace go.opentelemetry.io/otel/exporters/otlp/internal/retry => ../../exporters/otlp/internal/retry diff --git a/trace/go.mod b/trace/go.mod index 38d8478e0e9..0f42605c08c 100644 --- a/trace/go.mod +++ b/trace/go.mod @@ -71,3 +71,5 @@ replace go.opentelemetry.io/otel/bridge/opencensus/test => ../bridge/opencensus/ replace go.opentelemetry.io/otel/example/fib => ../example/fib replace go.opentelemetry.io/otel/schema => ../schema + +replace go.opentelemetry.io/otel/exporters/otlp/internal/retry => ../exporters/otlp/internal/retry