Skip to content

Commit c794409

Browse files
committed
[v2][query] Apply "Max Clock Skew Adjust" setting
Apply the `max_clock_skew_adjust` setting to the query service during initialization. The maximum clock skew adjustment setting for the query component is properly read during initialization, but not applied in the v2 server in the end. This causes it to always default to 1 second, regardless of the configuration value. Signed-off-by: Dominik Nakamura <[email protected]>
1 parent 10bacb7 commit c794409

File tree

7 files changed

+40
-45
lines changed

7 files changed

+40
-45
lines changed

cmd/jaeger/config.yaml

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,9 @@ extensions:
3232
traces_archive: another_store
3333
ui:
3434
config_file: ./cmd/jaeger/config-ui.json
35+
# The maximum duration that is considered for clock skew adjustments.
36+
# Defaults to 0 seconds, which means it's disabled.
37+
#max_clock_skew_adjust: 0s
3538

3639
jaeger_storage:
3740
backends:

cmd/jaeger/internal/extension/jaegerquery/server.go

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -95,8 +95,12 @@ func (s *server) Start(ctx context.Context, host component.Host) error {
9595
return fmt.Errorf("cannot create dependencies reader: %w", err)
9696
}
9797

98-
var opts querysvc.QueryServiceOptions
99-
var v2opts v2querysvc.QueryServiceOptions
98+
opts := querysvc.QueryServiceOptions{
99+
MaxClockSkewAdjust: s.config.MaxClockSkewAdjust,
100+
}
101+
v2opts := v2querysvc.QueryServiceOptions{
102+
MaxClockSkewAdjust: s.config.MaxClockSkewAdjust,
103+
}
100104
if err := s.addArchiveStorage(&opts, &v2opts, host); err != nil {
101105
return err
102106
}

cmd/query/app/flags.go

Lines changed: 12 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -23,9 +23,7 @@ import (
2323
"go.uber.org/zap"
2424

2525
"github.com/jaegertracing/jaeger/cmd/query/app/querysvc"
26-
v2adjuster "github.com/jaegertracing/jaeger/cmd/query/app/querysvc/v2/adjuster"
2726
v2querysvc "github.com/jaegertracing/jaeger/cmd/query/app/querysvc/v2/querysvc"
28-
"github.com/jaegertracing/jaeger/model/adjuster"
2927
"github.com/jaegertracing/jaeger/pkg/config"
3028
"github.com/jaegertracing/jaeger/pkg/config/tlscfg"
3129
"github.com/jaegertracing/jaeger/pkg/tenancy"
@@ -47,6 +45,10 @@ const (
4745
queryEnableTracing = "query.enable-tracing"
4846
)
4947

48+
const (
49+
defaultMaxClockSkewAdjust = 0 * time.Second
50+
)
51+
5052
var tlsGRPCFlagsConfig = tlscfg.ServerFlagsConfig{
5153
Prefix: "query.grpc",
5254
}
@@ -94,7 +96,7 @@ func AddFlags(flagSet *flag.FlagSet) {
9496
flagSet.Bool(queryLogStaticAssetsAccess, false, "Log when static assets are accessed (for debugging)")
9597
flagSet.String(queryUIConfig, "", "The path to the UI configuration file in JSON format")
9698
flagSet.Bool(queryTokenPropagation, false, "Allow propagation of bearer token to be used by storage plugins")
97-
flagSet.Duration(queryMaxClockSkewAdjust, 0, "The maximum delta by which span timestamps may be adjusted in the UI due to clock skew; set to 0s to disable clock skew adjustments")
99+
flagSet.Duration(queryMaxClockSkewAdjust, defaultMaxClockSkewAdjust, "The maximum delta by which span timestamps may be adjusted in the UI due to clock skew; set to 0s to disable clock skew adjustments")
98100
flagSet.Bool(queryEnableTracing, false, "Enables emitting jaeger-query traces")
99101
tlsGRPCFlagsConfig.AddFlags(flagSet)
100102
tlsHTTPFlagsConfig.AddFlags(flagSet)
@@ -145,7 +147,9 @@ func (qOpts *QueryOptions) BuildQueryServiceOptions(
145147
initArchiveStorageFn InitArchiveStorageFn,
146148
logger *zap.Logger,
147149
) *querysvc.QueryServiceOptions {
148-
opts := &querysvc.QueryServiceOptions{}
150+
opts := &querysvc.QueryServiceOptions{
151+
MaxClockSkewAdjust: qOpts.MaxClockSkewAdjust,
152+
}
149153
ar, aw := initArchiveStorageFn(logger)
150154
if ar != nil && aw != nil {
151155
opts.ArchiveSpanReader = ar
@@ -154,13 +158,13 @@ func (qOpts *QueryOptions) BuildQueryServiceOptions(
154158
logger.Info("Archive storage not initialized")
155159
}
156160

157-
opts.Adjuster = adjuster.Sequence(querysvc.StandardAdjusters(qOpts.MaxClockSkewAdjust)...)
158-
159161
return opts
160162
}
161163

162164
func (qOpts *QueryOptions) BuildQueryServiceOptionsV2(initArchiveStorageFn InitArchiveStorageFn, logger *zap.Logger) *v2querysvc.QueryServiceOptions {
163-
opts := &v2querysvc.QueryServiceOptions{}
165+
opts := &v2querysvc.QueryServiceOptions{
166+
MaxClockSkewAdjust: qOpts.MaxClockSkewAdjust,
167+
}
164168

165169
ar, aw := initArchiveStorageFn(logger)
166170
if ar != nil && aw != nil {
@@ -170,8 +174,6 @@ func (qOpts *QueryOptions) BuildQueryServiceOptionsV2(initArchiveStorageFn InitA
170174
logger.Info("Archive storage not initialized")
171175
}
172176

173-
opts.Adjuster = v2adjuster.Sequence(v2adjuster.StandardAdjusters(qOpts.MaxClockSkewAdjust)...)
174-
175177
return opts
176178
}
177179

@@ -206,6 +208,7 @@ func mapHTTPHeaderToOTELHeaders(h http.Header) map[string]configopaque.String {
206208

207209
func DefaultQueryOptions() QueryOptions {
208210
return QueryOptions{
211+
MaxClockSkewAdjust: defaultMaxClockSkewAdjust,
209212
HTTP: confighttp.ServerConfig{
210213
Endpoint: ports.PortToHostPort(ports.QueryHTTP),
211214
},

cmd/query/app/flags_test.go

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -102,9 +102,9 @@ func TestBuildQueryServiceOptions(t *testing.T) {
102102

103103
qSvcOpts := qOpts.BuildQueryServiceOptions(initializedFn, zap.NewNop())
104104
assert.NotNil(t, qSvcOpts)
105-
assert.NotNil(t, qSvcOpts.Adjuster)
106105
assert.NotNil(t, qSvcOpts.ArchiveSpanReader)
107106
assert.NotNil(t, qSvcOpts.ArchiveSpanWriter)
107+
assert.Equal(t, defaultMaxClockSkewAdjust, qSvcOpts.MaxClockSkewAdjust)
108108
}
109109

110110
func TestBuildQueryServiceOptions_NoArchiveStorage(t *testing.T) {
@@ -116,9 +116,9 @@ func TestBuildQueryServiceOptions_NoArchiveStorage(t *testing.T) {
116116
logger, logBuf := testutils.NewLogger()
117117
qSvcOpts := qOpts.BuildQueryServiceOptions(uninitializedFn, logger)
118118
assert.NotNil(t, qSvcOpts)
119-
assert.NotNil(t, qSvcOpts.Adjuster)
120119
assert.Nil(t, qSvcOpts.ArchiveSpanReader)
121120
assert.Nil(t, qSvcOpts.ArchiveSpanWriter)
121+
assert.Equal(t, defaultMaxClockSkewAdjust, qSvcOpts.MaxClockSkewAdjust)
122122

123123
require.Contains(t, logBuf.String(), "Archive storage not initialized")
124124
}
@@ -132,9 +132,9 @@ func TestBuildQueryServiceOptionsV2(t *testing.T) {
132132
qSvcOpts := qOpts.BuildQueryServiceOptionsV2(initializedFn, zap.NewNop())
133133

134134
assert.NotNil(t, qSvcOpts)
135-
assert.NotNil(t, qSvcOpts.Adjuster)
136135
assert.NotNil(t, qSvcOpts.ArchiveTraceReader)
137136
assert.NotNil(t, qSvcOpts.ArchiveTraceWriter)
137+
assert.Equal(t, defaultMaxClockSkewAdjust, qSvcOpts.MaxClockSkewAdjust)
138138
}
139139

140140
func TestBuildQueryServiceOptionsV2_NoArchiveStorage(t *testing.T) {

cmd/query/app/querysvc/query_service.go

Lines changed: 6 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -18,15 +18,11 @@ import (
1818

1919
var errNoArchiveSpanStorage = errors.New("archive span storage was not configured")
2020

21-
const (
22-
defaultMaxClockSkewAdjust = time.Second
23-
)
24-
2521
// QueryServiceOptions has optional members of QueryService
2622
type QueryServiceOptions struct {
27-
ArchiveSpanReader spanstore.Reader
28-
ArchiveSpanWriter spanstore.Writer
29-
Adjuster adjuster.Adjuster
23+
ArchiveSpanReader spanstore.Reader
24+
ArchiveSpanWriter spanstore.Writer
25+
MaxClockSkewAdjust time.Duration
3026
}
3127

3228
// StorageCapabilities is a feature flag for query service
@@ -41,6 +37,7 @@ type StorageCapabilities struct {
4137
type QueryService struct {
4238
spanReader spanstore.Reader
4339
dependencyReader depstore.Reader
40+
adjuster adjuster.Adjuster
4441
options QueryServiceOptions
4542
}
4643

@@ -67,12 +64,10 @@ func NewQueryService(traceReader tracestore.Reader, dependencyReader depstore.Re
6764
qsvc := &QueryService{
6865
spanReader: spanReader,
6966
dependencyReader: dependencyReader,
67+
adjuster: adjuster.Sequence(StandardAdjusters(options.MaxClockSkewAdjust)...),
7068
options: options,
7169
}
7270

73-
if qsvc.options.Adjuster == nil {
74-
qsvc.options.Adjuster = adjuster.Sequence(StandardAdjusters(defaultMaxClockSkewAdjust)...)
75-
}
7671
return qsvc
7772
}
7873

@@ -143,7 +138,7 @@ func (qs QueryService) ArchiveTrace(ctx context.Context, query spanstore.GetTrac
143138

144139
// Adjust applies adjusters to the trace.
145140
func (qs QueryService) adjust(trace *model.Trace) {
146-
qs.options.Adjuster.Adjust(trace)
141+
qs.adjuster.Adjust(trace)
147142
}
148143

149144
// GetDependencies implements dependencystore.Reader.GetDependencies

cmd/query/app/querysvc/v2/querysvc/service.go

Lines changed: 8 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -21,19 +21,14 @@ import (
2121

2222
var errNoArchiveSpanStorage = errors.New("archive span storage was not configured")
2323

24-
const (
25-
defaultMaxClockSkewAdjust = time.Second
26-
)
27-
2824
// QueryServiceOptions holds the configuration options for the query service.
2925
type QueryServiceOptions struct {
3026
// ArchiveTraceReader is used to read archived traces from the storage.
3127
ArchiveTraceReader tracestore.Reader
3228
// ArchiveTraceWriter is used to write traces to the archive storage.
3329
ArchiveTraceWriter tracestore.Writer
34-
// Adjuster is used to adjust traces before they are returned to the client.
35-
// If not set, the default adjuster will be used.
36-
Adjuster adjuster.Adjuster
30+
// MaxClockSkewAdjust is the maximum duration by which to adjust a span.
31+
MaxClockSkewAdjust time.Duration
3732
}
3833

3934
// StorageCapabilities is a feature flag for query service
@@ -48,6 +43,7 @@ type StorageCapabilities struct {
4843
type QueryService struct {
4944
traceReader tracestore.Reader
5045
dependencyReader depstore.Reader
46+
adjuster adjuster.Adjuster
5147
options QueryServiceOptions
5248
}
5349

@@ -76,13 +72,12 @@ func NewQueryService(
7672
qsvc := &QueryService{
7773
traceReader: traceReader,
7874
dependencyReader: dependencyReader,
79-
options: options,
75+
adjuster: adjuster.Sequence(
76+
adjuster.StandardAdjusters(options.MaxClockSkewAdjust)...,
77+
),
78+
options: options,
8079
}
8180

82-
if qsvc.options.Adjuster == nil {
83-
qsvc.options.Adjuster = adjuster.Sequence(
84-
adjuster.StandardAdjusters(defaultMaxClockSkewAdjust)...)
85-
}
8681
return qsvc
8782
}
8883

@@ -191,7 +186,7 @@ func (qs QueryService) receiveTraces(
191186
}
192187
for _, trace := range traces {
193188
if !rawTraces {
194-
qs.options.Adjuster.Adjust(trace)
189+
qs.adjuster.Adjust(trace)
195190
}
196191
jptrace.SpanIter(trace)(func(_ jptrace.SpanIterPos, span ptrace.Span) bool {
197192
foundTraceIDs[span.TraceID()] = struct{}{}

cmd/query/app/querysvc/v2/querysvc/service_test.go

Lines changed: 2 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -59,12 +59,6 @@ func withArchiveTraceWriter() testOption {
5959
}
6060
}
6161

62-
func withAdjuster(adj adjuster.Adjuster) testOption {
63-
return func(_ *testQueryService, options *QueryServiceOptions) {
64-
options.Adjuster = adj
65-
}
66-
}
67-
6862
func initializeTestService(opts ...testOption) *testQueryService {
6963
traceReader := &tracestoremocks.Reader{}
7064
dependencyStorage := &depstoremocks.Reader{}
@@ -483,7 +477,8 @@ func TestFindTraces_WithRawTraces_PerformsAggregation(t *testing.T) {
483477
adjustCalls++
484478
})
485479

486-
tqs := initializeTestService(withAdjuster(adj))
480+
tqs := initializeTestService()
481+
tqs.queryService.adjuster = adj
487482
duration, err := time.ParseDuration("20ms")
488483
require.NoError(t, err)
489484
now := time.Now()

0 commit comments

Comments
 (0)