diff --git a/cmd/jaeger/internal/extension/jaegerquery/internal/adjuster/maxsize.go b/cmd/jaeger/internal/extension/jaegerquery/internal/adjuster/maxsize.go new file mode 100644 index 00000000000..6d1818219dc --- /dev/null +++ b/cmd/jaeger/internal/extension/jaegerquery/internal/adjuster/maxsize.go @@ -0,0 +1,20 @@ +package adjuster + +import ( + "go.opentelemetry.io/collector/pdata/ptrace" +) + +const ( + warningMaxTraceSize = "trace reached the maxium allowed size" +) + +// CorrectMaxSize returns an Adjuster that validates if a trace is in the allowed max size +// +// foo +// +// Parameters: +// - maxSize: The maximum allowable trace size. +func CorrectMaxSize(maxTraceSize int) Adjuster { + return Func(func(traces ptrace.Traces) { + }) +} diff --git a/cmd/jaeger/internal/extension/jaegerquery/internal/adjuster/standard.go b/cmd/jaeger/internal/extension/jaegerquery/internal/adjuster/standard.go index cfbb8915192..16ef1a5f01c 100644 --- a/cmd/jaeger/internal/extension/jaegerquery/internal/adjuster/standard.go +++ b/cmd/jaeger/internal/extension/jaegerquery/internal/adjuster/standard.go @@ -9,13 +9,17 @@ import ( // StandardAdjusters returns a list of adjusters applied by the query service // before returning the data to the API clients. -func StandardAdjusters(maxClockSkewAdjust time.Duration) []Adjuster { +func StandardAdjusters( + maxClockSkewAdjust time.Duration, + maxTraceSize int, +) []Adjuster { return []Adjuster{ DeduplicateClientServerSpanIDs(), SortCollections(), // DeduplicateSpans depends on SortCollections running first DeduplicateSpans(), CorrectClockSkew(maxClockSkewAdjust), + CorrectMaxSize(maxTraceSize), NormalizeIPAttributes(), MoveLibraryAttributes(), RemoveEmptySpanLinks(), diff --git a/cmd/jaeger/internal/extension/jaegerquery/internal/adjuster/standard_test.go b/cmd/jaeger/internal/extension/jaegerquery/internal/adjuster/standard_test.go index d2fadfe2ec0..b8541013505 100644 --- a/cmd/jaeger/internal/extension/jaegerquery/internal/adjuster/standard_test.go +++ b/cmd/jaeger/internal/extension/jaegerquery/internal/adjuster/standard_test.go @@ -12,7 +12,8 @@ import ( func TestStandardAdjusters(t *testing.T) { maxClockSkewAdjust := 10 * time.Second - adjusters := StandardAdjusters(maxClockSkewAdjust) + maxTraceSize := 10 + adjusters := StandardAdjusters(maxClockSkewAdjust, maxTraceSize) assert.Len(t, adjusters, 7, "Expected 7 adjusters") assert.IsType(t, DeduplicateClientServerSpanIDs(), adjusters[0]) diff --git a/cmd/jaeger/internal/extension/jaegerquery/internal/flags.go b/cmd/jaeger/internal/extension/jaegerquery/internal/flags.go index 502738bc7fd..6455c44a55f 100644 --- a/cmd/jaeger/internal/extension/jaegerquery/internal/flags.go +++ b/cmd/jaeger/internal/extension/jaegerquery/internal/flags.go @@ -36,6 +36,8 @@ type QueryOptions struct { Tenancy tenancy.Options `mapstructure:"multi_tenancy"` // MaxClockSkewAdjust is the maximum duration by which jaeger-query will adjust a span. MaxClockSkewAdjust time.Duration `mapstructure:"max_clock_skew_adjust" valid:"optional"` + // MaxTraceSize is the maximum trace size that jaeger-query could load. + MaxTraceSize int `mapstructure:"max_trace_size" valid:"optional"` // EnableTracing determines whether traces will be emitted by jaeger-query. EnableTracing bool `mapstructure:"enable_tracing"` // HTTP holds the HTTP configuration that the query service uses to serve requests. @@ -47,6 +49,7 @@ type QueryOptions struct { func DefaultQueryOptions() QueryOptions { return QueryOptions{ MaxClockSkewAdjust: 0, // disabled by default + MaxTraceSize: 0, // disabled by default HTTP: confighttp.ServerConfig{ Endpoint: ports.PortToHostPort(ports.QueryHTTP), }, diff --git a/cmd/jaeger/internal/extension/jaegerquery/internal/server.go b/cmd/jaeger/internal/extension/jaegerquery/internal/server.go index 118c2d2fd61..5b6d3b21dc6 100644 --- a/cmd/jaeger/internal/extension/jaegerquery/internal/server.go +++ b/cmd/jaeger/internal/extension/jaegerquery/internal/server.go @@ -1,4 +1,4 @@ -// Copyright (c) 2019,2020 The Jaeger Authors. +// Copyright (cQueryOptions ) 2019,2020 The Jaeger Authors. // SPDX-License-Identifier: Apache-2.0 package app diff --git a/cmd/jaeger/internal/extension/jaegerquery/querysvc/service.go b/cmd/jaeger/internal/extension/jaegerquery/querysvc/service.go index bcdb3e05ebe..89187d45adf 100644 --- a/cmd/jaeger/internal/extension/jaegerquery/querysvc/service.go +++ b/cmd/jaeger/internal/extension/jaegerquery/querysvc/service.go @@ -30,6 +30,8 @@ type QueryServiceOptions struct { ArchiveTraceWriter tracestore.Writer // MaxClockSkewAdjust is the maximum duration by which to adjust a span. MaxClockSkewAdjust time.Duration + // MaxTraceSize is the maximum trace size that jaeger-query could load. + MaxTraceSize int } // StorageCapabilities is a feature flag for query service @@ -74,7 +76,10 @@ func NewQueryService( traceReader: traceReader, dependencyReader: dependencyReader, adjuster: adjuster.Sequence( - adjuster.StandardAdjusters(options.MaxClockSkewAdjust)..., + adjuster.StandardAdjusters( + options.MaxClockSkewAdjust, + options.MaxTraceSize, + )..., ), options: options, } diff --git a/cmd/jaeger/internal/extension/jaegerquery/server.go b/cmd/jaeger/internal/extension/jaegerquery/server.go index 693c8a41a58..c9c5637bc33 100644 --- a/cmd/jaeger/internal/extension/jaegerquery/server.go +++ b/cmd/jaeger/internal/extension/jaegerquery/server.go @@ -103,6 +103,7 @@ func (s *server) Start(ctx context.Context, host component.Host) error { opts := querysvc.QueryServiceOptions{ MaxClockSkewAdjust: s.config.MaxClockSkewAdjust, + MaxTraceSize: s.config.MaxTraceSize, } if err := s.addArchiveStorage(&opts, host); err != nil { return err