jaegertracing/jaeger · error
cannot create trace reader: %w
Error message
cannot create trace reader: %w
What it means
After finding the trace store factory, Start calls tf.CreateTraceReader() to build the reader the query service will use. If the storage backend cannot construct its reader (connection, schema, or driver failure surfaced by the backend), the error is wrapped as 'cannot create trace reader'.
Source
Thrown at cmd/jaeger/internal/extension/jaegerquery/server.go:78
deps = append(deps, s.config.QueryInterceptors...)
return deps
}
func (s *server) Start(ctx context.Context, host component.Host) error {
telset := telemetry.FromOtelComponent(s.telset, host)
if !s.config.EnableTracing {
telset.TracerProvider = nooptrace.NewTracerProvider()
}
telset.Metrics = telset.Metrics.
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,View on GitHub (pinned to 806f444784)
Solutions
- Read the wrapped cause from the log — it names the failing backend and reason
- Verify the storage backend is reachable and credentials in the jaeger_storage config are valid
- Run the backend's schema/init tool (e.g. ES index cleaner/rollover init, Cassandra schema) if the error mentions missing schema
- Test connectivity from the jaeger-query host to the storage endpoint
Example fix
// before
jaeger_storage:
backends:
es:
elasticsearch:
server_urls: http://es:9200 # ES down / auth missing
// after
jaeger_storage:
backends:
es:
elasticsearch:
server_urls: https://es:9200
index_prefix: jaeger-main
tls:
insecure_skip_verify: false Defensive patterns
Strategy: try-catch
Validate before calling
// Pre-check backend reachability before starting jaeger-query
for _, u := range serverURLs {
resp, err := http.Get(u + "/_cluster/health")
if err != nil || resp.StatusCode != 200 {
return fmt.Errorf("storage backend %s unreachable", u)
}
} Try / catch
if err := ext.Start(ctx, host); err != nil {
if strings.Contains(err.Error(), "cannot create trace reader") {
log.Fatalf("trace reader init failed: %v — check backend reachability/credentials/schema", err)
}
return err
} Prevention
- Health-check the storage backend as a pre-start dependency
- Rotate credentials via secret mounts and verify with a smoke connection
- Keep schema/init tooling version-aligned with the storage plugin
- Add readiness probes that exercise a storage read
When it happens
Trigger: The named storage factory exists but CreateTraceReader fails — e.g. the backend is unreachable, credentials are wrong, the schema is missing/outdated, or the backend driver returns an initialization error.
Common situations: Cassandra/Elasticsearch/ClickHouse down or credentials rotated; remote storage schema never initialized (e.g. missing ES index templates); Badger memory/permission problems; network/firewall blocking the storage endpoint.
Related errors
- cannot create dependencies reader: %w
- trace not found
- failed to initialize storage '%s': %w
- cannot find factory for trace storage %s: %w
- cannot find factory for dependency storage %s: %w
AI-assisted analysis of jaegertracing/jaeger@806f444784 (2026-09-01).
Data as JSON: /api/errors/b19f981058d72a99.
Report an issue: GitHub.