{"record":{"id":"671e5f872880e2f5","repo":"jaegertracing/jaeger","slug":"error-reading-s-from-storage-w","errorCode":null,"errorMessage":"error reading %s from storage: %w","messagePattern":"error reading (.+?) from storage: %w","errorType":"exception","errorClass":null,"httpStatus":null,"severity":"error","filePath":"internal/storage/v1/cassandra/spanstore/operation_names.go","lineNumber":205,"sourceCode":"\t\t// Get operations for all spanKind\n\t\tcasQuery = s.session.Query(s.table.queryStmt, query.ServiceName)\n\t} else {\n\t\t// Get operations for given spanKind\n\t\tcasQuery = s.session.Query(s.table.queryByKindStmt, query.ServiceName, query.SpanKind)\n\t}\n\titer := casQuery.Iter()\n\n\tvar operationName string\n\tvar spanKind string\n\tvar operations []tracestore.Operation\n\tfor iter.Scan(&spanKind, &operationName) {\n\t\toperations = append(operations, tracestore.Operation{\n\t\t\tName:     operationName,\n\t\t\tSpanKind: spanKind,\n\t\t})\n\t}\n\tif err := iter.Close(); err != nil {\n\t\terr = fmt.Errorf(\"error reading %s from storage: %w\", s.table.tableName, err)\n\t\treturn nil, err\n\t}\n\treturn operations, nil\n}\n","sourceCodeStart":187,"sourceCodeEnd":210,"githubUrl":"https://github.com/jaegertracing/jaeger/blob/806f4447841ecdb60519f408b004a599d515f437/internal/storage/v1/cassandra/spanstore/operation_names.go#L187-L210","documentation":"getOperationsV2 reads operation names (with span_kind) from the bucketed operation_names_v2 table; if the gocql iterator reports an error on Close(), the driver error is wrapped with the table name so operators know exactly which table-backed query failed.","triggerScenarios":"GetOperations call against the v2 schema where the Cassandra query on operation_names_v2 fails at scan/close time — read timeout, coordinator failure, consistency not achieved, or failing replica during the multi-bucket scan.","commonSituations":"Cassandra read timeouts on large services spanning many buckets; node outage; network partition between Jaeger and the cluster; overloading during heavy query traffic.","solutions":["Inspect the wrapped driver error and Cassandra logs for the root cause (timeout vs unavailable vs consistency failure).","Retry the operation after cluster health is restored.","Increase read timeout or adjust retry policy/consistency level in the Cassandra configuration if timeouts recur.","Check bucket/table health with nodetool; run repair if replicas are inconsistent."],"exampleFix":null,"handlingStrategy":"retry","validationCode":null,"typeGuard":null,"tryCatchPattern":"ops, err := reader.GetOperations(ctx, tracestore.OperationQuery{ServiceName: svc})\nif err != nil {\n    if strings.Contains(err.Error(), \"error reading operation_names_v2\") {\n        // retry with backoff; check wrapped driver error\n    }\n    return err\n}","preventionTips":["Keep Cassandra cluster healthy; alert on read timeouts/unavailables.","Tune read timeout and retry policy in Jaeger's Cassandra options.","Run regular nodetool repairs on operation_names_v2.","Avoid pathological service cardinality that explodes bucket scans."],"tags":["cassandra","storage","query","iterator"],"backgroundTag":"storage-read-failed","analyzedSha":"806f4447841ecdb60519f408b004a599d515f437","analyzedAt":"2026-09-01T02:39:22.140Z","contentChangedAt":null,"schemaVersion":2},"datasetVersion":"2026-09-08T05:18:18.240Z"}