jaegertracing/jaeger · error
failed to get dependencies: %w
Error message
failed to get dependencies: %w
What it means
The gRPC remote storage DependencyReader wraps any error from the remote GetDependencies call and re-raises it as 'failed to get dependencies'. It means the downstream remote-storage plugin failed to return dependency links for the given time range.
Source
Thrown at internal/storage/v2/grpc/depreader.go:41
// NewDependencyReader creates a DependencyReader that communicates with a remote gRPC storage server.
// The provided gRPC connection is used exclusively for reading dependencies, meaning it is safe
// to enable instrumentation on the connection.
func NewDependencyReader(conn *grpc.ClientConn) *DependencyReader {
return &DependencyReader{
client: storage.NewDependencyReaderClient(conn),
}
}
func (dr *DependencyReader) GetDependencies(
ctx context.Context,
query depstore.QueryParameters,
) ([]model.DependencyLink, error) {
resp, err := dr.client.GetDependencies(ctx, &storage.GetDependenciesRequest{
StartTime: query.StartTime,
EndTime: query.EndTime,
})
if err != nil {
return nil, fmt.Errorf("failed to get dependencies: %w", err)
}
dependencies := make([]model.DependencyLink, len(resp.Dependencies))
for i, dep := range resp.Dependencies {
dependencies[i] = model.DependencyLink{
Parent: dep.Parent,
Child: dep.Child,
CallCount: dep.CallCount,
Source: dep.Source,
}
}
return dependencies, nil
}
View on GitHub (pinned to 806f444784)
Solutions
- Check the error's wrapped cause to identify the underlying gRPC status (unavailable, deadline, unimplemented)
- Verify the remote-storage server address/ports in the storage config
- Ensure the remote storage plugin supports dependency links and is running
- Retry with backoff if the cause is transient unavailability
Example fix
// before
deps, err := depReader.GetDependencies(ctx, query)
// after - inspect wrapped cause
deps, err := depReader.GetDependencies(ctx, query)
if err != nil {
if status.Code(err) == codes.Unavailable { /* retry */ }
return err
} Defensive patterns
Strategy: retry
Validate before calling
// verify connectivity before calling
conn, err := grpc.NewClient(addr, grpc.WithTransportCredentials(insecure.NewCredentials()))
if err != nil { /* endpoint misconfigured */ } Try / catch
deps, err := depReader.GetDependencies(ctx, query)
if err != nil {
if status.Code(errors.Unwrap(err)) == codes.Unavailable {
// retry with backoff
}
return err
} Prevention
- Monitor remote storage liveness
- Set generous but bounded context deadlines
- Confirm the plugin implements dependency links before use
When it happens
Trigger: Calling DependencyReader.GetDependencies(ctx, query) when the remote storage server is unreachable, returns a gRPC error, or the request is rejected (auth/tenancy, deadline exceeded).
Common situations: Remote storage service down or wrong host:port configured; network/firewall blocking the gRPC port; server not implementing the dependencies API; authentication token missing.
Related errors
- cannot find factory for dependency storage %s: %w
- cannot create dependencies reader: %w
- ErrUnsupported
- failed to execute GetServices: %w
- failed to execute GetOperations: %w
AI-assisted analysis of jaegertracing/jaeger@806f444784 (2026-09-01).
Data as JSON: /api/errors/b66866c1fa2bb928.
Report an issue: GitHub.