{"record":{"id":"815486ad671ba9ed","repo":"jaegertracing/jaeger","slug":"failed-to-get-dependencies-w","errorCode":null,"errorMessage":"failed to get dependencies: %w","messagePattern":"failed to get dependencies: %w","errorType":"exception","errorClass":null,"httpStatus":null,"severity":"error","filePath":"cmd/jaeger/internal/extension/jaegerquery/internal/mcptools/internal/handlers/get_dependencies.go","lineNumber":63,"sourceCode":"\tendTime, err := parseDependencyTime(input.EndTime, time.Now())\n\tif err != nil {\n\t\treturn nil, types.GetDependenciesOutput{}, fmt.Errorf(\"invalid end_time: %w\", err)\n\t}\n\n\tdefaultStart := endTime.Add(-24 * time.Hour)\n\tstartTime, err := parseDependencyTime(input.StartTime, defaultStart)\n\tif err != nil {\n\t\treturn nil, types.GetDependenciesOutput{}, fmt.Errorf(\"invalid start_time: %w\", err)\n\t}\n\n\tif !startTime.Before(endTime) {\n\t\treturn nil, types.GetDependenciesOutput{}, errors.New(\"start_time must be before end_time\")\n\t}\n\n\tlookback := endTime.Sub(startTime)\n\tdeps, err := h.queryService.GetDependencies(ctx, endTime, lookback)\n\tif err != nil {\n\t\treturn nil, types.GetDependenciesOutput{}, fmt.Errorf(\"failed to get dependencies: %w\", err)\n\t}\n\n\tlinks := make([]types.DependencyLink, 0, len(deps))\n\tfor _, d := range deps {\n\t\tlinks = append(links, types.DependencyLink{\n\t\t\tCaller:    d.Parent,\n\t\t\tCallee:    d.Child,\n\t\t\tCallCount: d.CallCount,\n\t\t})\n\t}\n\n\t// Sort by caller then callee for consistent ordering\n\tslices.SortFunc(links, func(a, b types.DependencyLink) int {\n\t\tif c := cmp.Compare(a.Caller, b.Caller); c != 0 {\n\t\t\treturn c\n\t\t}\n\t\treturn cmp.Compare(a.Callee, b.Callee)\n\t})","sourceCodeStart":45,"sourceCodeEnd":81,"githubUrl":"https://github.com/jaegertracing/jaeger/blob/806f4447841ecdb60519f408b004a599d515f437/cmd/jaeger/internal/extension/jaegerquery/internal/mcptools/internal/handlers/get_dependencies.go#L45-L81","documentation":"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.","triggerScenarios":"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.","commonSituations":"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.","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."],"exampleFix":"// before\ndeps, err := handler.Handle(ctx, req, types.GetDependenciesInput{StartTime: tooEarly}) // storage row missing\n// after\n// query a window covered by the dependency job, e.g. last 24h\ndeps, err := handler.Handle(ctx, req, types.GetDependenciesInput{EndTime: nowRFC3339, StartTime: nowMinus24hRFC3339})","handlingStrategy":"try-catch","validationCode":null,"typeGuard":null,"tryCatchPattern":"out, _, err := handler.Handle(ctx, req, input)\nif err != nil {\n\tvar wrapped *fmt.wrapError\n\tif errors.As(err, &wrapped) && strings.Contains(err.Error(), \"failed to get dependencies\") {\n\t\tlog.Printf(\"dependency fetch failed: %v\", err) // inspect %w cause\n\t\t// retry after checking storage health\n\t}\n}","preventionTips":["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."],"tags":["storage","backend","jaeger","mcp"],"backgroundTag":"storage-query-failed","analyzedSha":"806f4447841ecdb60519f408b004a599d515f437","analyzedAt":"2026-09-01T02:39:22.140Z","contentChangedAt":null,"schemaVersion":2},"datasetVersion":"2026-09-08T05:18:18.240Z"}