jaegertracing/jaeger · error
cannot find factory for dependency storage %s: %w
Error message
cannot find factory for dependency storage %s: %w
What it means
jaeger-query requires the primary trace storage factory to also implement depstore.Factory so it can read service dependencies. If the type assertion tf.(depstore.Factory) fails, Start returns 'cannot find factory for dependency storage'. Note the wrapped err is nil here because the message reflects a missing capability, not an underlying error.
Source
Thrown at cmd/jaeger/internal/extension/jaegerquery/server.go:88
Namespace(metrics.NSOptions{Name: "jaeger"}).
Namespace(metrics.NSOptions{Name: "query"})
tf, err := jaegerstorage.GetTraceStoreFactory(s.config.Storage.TracesPrimary, host)
if err != nil {
return fmt.Errorf("cannot find factory for trace storage %s: %w", s.config.Storage.TracesPrimary, err)
}
traceReader, err := tf.CreateTraceReader()
if err != nil {
return fmt.Errorf("cannot create trace reader: %w", err)
}
interceptors, err := queryinterceptor.Resolve(host, s.config.QueryInterceptors)
if err != nil {
return fmt.Errorf("cannot resolve query interceptors: %w", err)
}
df, ok := tf.(depstore.Factory)
if !ok {
return fmt.Errorf("cannot find factory for dependency storage %s: %w", s.config.Storage.TracesPrimary, err)
}
depReader, err := df.CreateDependencyReader()
if err != nil {
return fmt.Errorf("cannot create dependencies reader: %w", err)
}
opts := querysvc.QueryServiceOptions{
MaxClockSkewAdjust: s.config.MaxClockSkewAdjust,
MaxTraceSize: s.config.MaxTraceSize,
Interceptors: interceptors,
}
if err := s.addArchiveStorage(&opts, host); err != nil {
return err
}
qs := querysvc.NewQueryService(traceReader, depReader, opts)
s.qs = qs
mqs, err := s.createMetricReader(host)View on GitHub (pinned to 806f444784)
Solutions
- Choose a traces_primary backend that implements depstore.Factory (Cassandra, Elasticsearch, etc.)
- If dependencies are not needed, confirm the deployment tolerates the query extension requiring dep support, or use a supported backend
- Check the backend's documentation for dependency-reader support before switching
- If the backend should support deps, verify you are on a jaeger version where that backend implements depstore.Factory
Example fix
// before storage: traces_primary: memory-only-no-deps # lacks depstore.Factory // after storage: traces_primary: cassandra-main # implements depstore.Factory
Defensive patterns
Strategy: type-guard
Validate before calling
// Before relying on dependencies, confirm the factory supports them
import "github.com/jaegertracing/jaeger/plugin/storage/dependencystore"
func supportsDeps(tf interface{}) bool {
_, ok := tf.(depstore.Factory)
return ok
} Type guard
func asDepstoreFactory(tf any) (depstore.Factory, bool) {
df, ok := tf.(depstore.Factory)
return df, ok
}
if _, ok := asDepstoreFactory(tf); !ok {
// choose a backend that supports dependencies
} Try / catch
if err := ext.Start(ctx, host); err != nil {
if strings.Contains(err.Error(), "cannot find factory for dependency storage") {
log.Fatalf("backend %q does not implement depstore.Factory — pick a supported backend", primaryName)
}
return err
} Prevention
- Confirm depstore.Factory support before choosing a traces_primary backend
- Use Cassandra/Elasticsearch/metadata-aware backends when dependency links are required
- Document backend capability matrix for your deployment
- Test dependency links after any backend migration
When it happens
Trigger: Storage.TracesPrimary points to a backend whose TraceStoreFactory does not implement CreateDependencyReader — e.g. certain remote-storage/metric-only backends that support traces but not dependency links.
Common situations: Using a storage backend that lacks dependency support (e.g. some OTLP-native or experimental backends) as traces_primary; switching backends without checking depstore support; expecting dependency links from a backend that never computes them.
Related errors
- cannot create dependencies reader: %w
- trace not found
- cannot find factory for trace storage %s: %w
- cannot create trace reader: %w
- cannot find traces archive storage factory: %w
AI-assisted analysis of jaegertracing/jaeger@806f444784 (2026-09-01).
Data as JSON: /api/errors/f32666efdd222555.
Report an issue: GitHub.