jaegertracing/jaeger · error
failed to get dependencies: %w
Error message
failed to get dependencies: %w
What it means
After validating the time range, the handler calls queryService.GetDependencies(ctx, endTime, lookback). If the Jaeger query service or its storage backend returns an error, it is wrapped with "failed to get dependencies". Unlike the *_time errors this is a backend/infrastructure failure, not input validation.
Source
Thrown at cmd/jaeger/internal/extension/jaegerquery/internal/mcptools/internal/handlers/get_dependencies.go:63
endTime, err := parseDependencyTime(input.EndTime, time.Now())
if err != nil {
return nil, types.GetDependenciesOutput{}, fmt.Errorf("invalid end_time: %w", err)
}
defaultStart := endTime.Add(-24 * time.Hour)
startTime, err := parseDependencyTime(input.StartTime, defaultStart)
if err != nil {
return nil, types.GetDependenciesOutput{}, fmt.Errorf("invalid start_time: %w", err)
}
if !startTime.Before(endTime) {
return nil, types.GetDependenciesOutput{}, errors.New("start_time must be before end_time")
}
lookback := endTime.Sub(startTime)
deps, err := h.queryService.GetDependencies(ctx, endTime, lookback)
if err != nil {
return nil, types.GetDependenciesOutput{}, fmt.Errorf("failed to get dependencies: %w", err)
}
links := make([]types.DependencyLink, 0, len(deps))
for _, d := range deps {
links = append(links, types.DependencyLink{
Caller: d.Parent,
Callee: d.Child,
CallCount: d.CallCount,
})
}
// Sort by caller then callee for consistent ordering
slices.SortFunc(links, func(a, b types.DependencyLink) int {
if c := cmp.Compare(a.Caller, b.Caller); c != 0 {
return c
}
return cmp.Compare(a.Callee, b.Callee)
})View on GitHub (pinned to 806f444784)
Solutions
- Check the wrapped %w error and jaeger-query logs for the underlying storage error.
- Verify the storage backend is reachable and configured (STORAGE_* env vars).
- Ensure the dependencies derivation job runs and the queried window contains derived data.
- Retry with an earlier/valid time window or after restoring storage connectivity.
Example fix
// before
deps, err := handler.Handle(ctx, req, types.GetDependenciesInput{StartTime: tooEarly}) // storage row missing
// after
// query a window covered by the dependency job, e.g. last 24h
deps, err := handler.Handle(ctx, req, types.GetDependenciesInput{EndTime: nowRFC3339, StartTime: nowMinus24hRFC3339}) Defensive patterns
Strategy: try-catch
Try / catch
out, _, err := handler.Handle(ctx, req, input)
if err != nil {
var wrapped *fmt.wrapError
if errors.As(err, &wrapped) && strings.Contains(err.Error(), "failed to get dependencies") {
log.Printf("dependency fetch failed: %v", err) // inspect %w cause
// retry after checking storage health
}
} Prevention
- Monitor jaeger-query storage connectivity before issuing dependency queries.
- Ensure the dependency-derivation job runs and covers the queried window.
- Set request timeouts comfortably above storage latency.
- Check dependencies are not disabled in your storage configuration.
When it happens
Trigger: Calling get_dependencies when the storage backend is down or unreachable, when dependencies are disabled in storage (e.g. Elasticsearch/Kafka without the dependency-derivation job), when the queried window precedes available dependency data, or when the context is canceled/times out.
Common situations: Storage (Cassandra/ES/opensearch) outage or wrong connection config; querying dependencies before the dependency processing job has produced rows; all-in-one image started with dependencies disabled; network partition between jaeger-query and storage.
Related errors
AI-assisted analysis of jaegertracing/jaeger@806f444784 (2026-09-01).
Data as JSON: /api/errors/815486ad671ba9ed.
Report an issue: GitHub.