You've already forked opentelemetry-go
							
							
				mirror of
				https://github.com/open-telemetry/opentelemetry-go.git
				synced 2025-10-31 00:07:40 +02:00 
			
		
		
		
	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}
			
			
This commit is contained in:
		
							
								
								
									
										10
									
								
								.github/dependabot.yml
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										10
									
								
								.github/dependabot.yml
									
									
									
									
										vendored
									
									
								
							| @@ -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 | ||||
|   | ||||
| @@ -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 | ||||
|   | ||||
| @@ -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 | ||||
|   | ||||
| @@ -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 | ||||
|   | ||||
| @@ -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 | ||||
|   | ||||
| @@ -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 | ||||
|   | ||||
| @@ -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 | ||||
|   | ||||
| @@ -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 | ||||
|   | ||||
| @@ -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 | ||||
|   | ||||
| @@ -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 | ||||
|   | ||||
| @@ -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 | ||||
|   | ||||
| @@ -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 | ||||
|   | ||||
| @@ -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 | ||||
|   | ||||
							
								
								
									
										72
									
								
								exporters/otlp/internal/retry/go.mod
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										72
									
								
								exporters/otlp/internal/retry/go.mod
									
									
									
									
									
										Normal file
									
								
							| @@ -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 | ||||
							
								
								
									
										13
									
								
								exporters/otlp/internal/retry/go.sum
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										13
									
								
								exporters/otlp/internal/retry/go.sum
									
									
									
									
									
										Normal file
									
								
							| @@ -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= | ||||
| @@ -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 { | ||||
| @@ -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 | ||||
|   | ||||
| @@ -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 ( | ||||
|   | ||||
| @@ -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" | ||||
| ) | ||||
|   | ||||
| @@ -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 | ||||
|   | ||||
| @@ -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. | ||||
|   | ||||
| @@ -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" | ||||
| ) | ||||
|   | ||||
| @@ -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 | ||||
|   | ||||
| @@ -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 | ||||
|   | ||||
| @@ -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 | ||||
|   | ||||
| @@ -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 ( | ||||
|   | ||||
| @@ -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 | ||||
| } | ||||
| @@ -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) | ||||
| } | ||||
| @@ -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" | ||||
| ) | ||||
|   | ||||
| @@ -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 | ||||
|   | ||||
| @@ -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. | ||||
|   | ||||
| @@ -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" | ||||
| ) | ||||
|   | ||||
| @@ -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 | ||||
|   | ||||
| @@ -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 | ||||
|   | ||||
| @@ -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 | ||||
|   | ||||
| @@ -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 | ||||
|   | ||||
| @@ -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 | ||||
|   | ||||
| @@ -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 | ||||
|   | ||||
							
								
								
									
										2
									
								
								go.mod
									
									
									
									
									
								
							
							
						
						
									
										2
									
								
								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 | ||||
|   | ||||
| @@ -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 | ||||
|   | ||||
| @@ -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 | ||||
|   | ||||
| @@ -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 | ||||
|   | ||||
| @@ -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 | ||||
|   | ||||
| @@ -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 | ||||
|   | ||||
| @@ -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 | ||||
|   | ||||
| @@ -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 | ||||
|   | ||||
| @@ -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 | ||||
|   | ||||
		Reference in New Issue
	
	Block a user