{"record":{"id":"b19f981058d72a99","repo":"jaegertracing/jaeger","slug":"cannot-create-trace-reader-w","errorCode":null,"errorMessage":"cannot create trace reader: %w","messagePattern":"cannot create trace reader: %w","errorType":"console","errorClass":null,"httpStatus":null,"severity":"error","filePath":"cmd/jaeger/internal/extension/jaegerquery/server.go","lineNumber":78,"sourceCode":"\tdeps = append(deps, s.config.QueryInterceptors...)\n\treturn deps\n}\n\nfunc (s *server) Start(ctx context.Context, host component.Host) error {\n\ttelset := telemetry.FromOtelComponent(s.telset, host)\n\tif !s.config.EnableTracing {\n\t\ttelset.TracerProvider = nooptrace.NewTracerProvider()\n\t}\n\ttelset.Metrics = telset.Metrics.\n\t\tNamespace(metrics.NSOptions{Name: \"jaeger\"}).\n\t\tNamespace(metrics.NSOptions{Name: \"query\"})\n\ttf, err := jaegerstorage.GetTraceStoreFactory(s.config.Storage.TracesPrimary, host)\n\tif err != nil {\n\t\treturn fmt.Errorf(\"cannot find factory for trace storage %s: %w\", s.config.Storage.TracesPrimary, err)\n\t}\n\ttraceReader, err := tf.CreateTraceReader()\n\tif err != nil {\n\t\treturn fmt.Errorf(\"cannot create trace reader: %w\", err)\n\t}\n\n\tinterceptors, err := queryinterceptor.Resolve(host, s.config.QueryInterceptors)\n\tif err != nil {\n\t\treturn fmt.Errorf(\"cannot resolve query interceptors: %w\", err)\n\t}\n\n\tdf, ok := tf.(depstore.Factory)\n\tif !ok {\n\t\treturn fmt.Errorf(\"cannot find factory for dependency storage %s: %w\", s.config.Storage.TracesPrimary, err)\n\t}\n\tdepReader, err := df.CreateDependencyReader()\n\tif err != nil {\n\t\treturn fmt.Errorf(\"cannot create dependencies reader: %w\", err)\n\t}\n\n\topts := querysvc.QueryServiceOptions{\n\t\tMaxClockSkewAdjust: s.config.MaxClockSkewAdjust,","sourceCodeStart":60,"sourceCodeEnd":96,"githubUrl":"https://github.com/jaegertracing/jaeger/blob/806f4447841ecdb60519f408b004a599d515f437/cmd/jaeger/internal/extension/jaegerquery/server.go#L60-L96","documentation":"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'.","triggerScenarios":"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.","commonSituations":"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.","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"],"exampleFix":"// before\njaeger_storage:\n  backends:\n    es:\n      elasticsearch:\n        server_urls: http://es:9200  # ES down / auth missing\n// after\njaeger_storage:\n  backends:\n    es:\n      elasticsearch:\n        server_urls: https://es:9200\n        index_prefix: jaeger-main\n        tls:\n          insecure_skip_verify: false","handlingStrategy":"try-catch","validationCode":"// Pre-check backend reachability before starting jaeger-query\nfor _, u := range serverURLs {\n\tresp, err := http.Get(u + \"/_cluster/health\")\n\tif err != nil || resp.StatusCode != 200 {\n\t\treturn fmt.Errorf(\"storage backend %s unreachable\", u)\n\t}\n}","typeGuard":null,"tryCatchPattern":"if err := ext.Start(ctx, host); err != nil {\n\tif strings.Contains(err.Error(), \"cannot create trace reader\") {\n\t\tlog.Fatalf(\"trace reader init failed: %v — check backend reachability/credentials/schema\", err)\n\t}\n\treturn err\n}","preventionTips":["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"],"tags":["go","storage","backend-connection","startup"],"backgroundTag":"storage-backend-unavailable","analyzedSha":"806f4447841ecdb60519f408b004a599d515f437","analyzedAt":"2026-09-01T02:39:22.140Z","contentChangedAt":null,"schemaVersion":2},"datasetVersion":"2026-09-08T05:18:18.240Z"}