jaegertracing/jaeger · error
unsupported schema version: %v
Error message
unsupported schema version: %v
What it means
DependencyStore is constructed with a schema version (V1 or V2) that determines the Cassandra insert statement. WriteDependencies returns this error when the store was built with a version outside the known set, meaning the DependencyStore was created with an invalid version value — a construction/programming error, not a Cassandra failure.
Source
Thrown at internal/storage/v1/cassandra/dependencystore/storage.go:94
deps := make([]Dependency, len(dependencies))
for i, d := range dependencies {
deps[i] = Dependency{
Parent: d.Parent,
Child: d.Child,
//nolint:gosec // G115
CallCount: int64(d.CallCount),
Source: string(d.Source),
}
}
var query cassandra.Query
switch s.version {
case V1:
query = s.session.Query(depsInsertStmtV1, ts, ts, deps)
case V2:
query = s.session.Query(depsInsertStmtV2, ts, ts.Truncate(tsBucket), deps)
default:
return fmt.Errorf("unsupported schema version: %v", s.version)
}
return s.dependenciesTableMetrics.Exec(query, s.logger)
}
// GetDependencies returns all interservice dependencies
func (s *DependencyStore) GetDependencies(_ context.Context, endTs time.Time, lookback time.Duration) ([]model.DependencyLink, error) {
startTs := endTs.Add(-1 * lookback)
var query cassandra.Query
switch s.version {
case V1:
query = s.session.Query(depsSelectStmtV1, startTs, endTs)
case V2:
query = s.session.Query(depsSelectStmtV2, getBuckets(startTs, endTs), startTs, endTs)
default:
return nil, fmt.Errorf("unsupported schema version: %v", s.version)
}
iter := query.Consistency(cassandra.One).Iter()
View on GitHub (pinned to 806f444784)
Solutions
- Validate the schema version at store construction (in the constructor) so writes fail fast at startup instead.
- Set the version explicitly with the package's V1/V2 constants when creating the store.
- Check the config plumbing that maps Jaeger's cassandra schema-version flag into the store version.
- Update tests/embedding code that build DependencyStore without WithVersion.
Example fix
// before
store := dependencystore.New(session, logger, metrics, dependencystore.DependencyStoreSchemaVersion(cfg.Version)) // unvalidated
// after
switch cfg.Version {
case "v1", "v2":
store = dependencystore.New(session, logger, metrics, schemaVersionFromConfig(cfg))
default:
return nil, fmt.Errorf("unknown dependency store schema version %q", cfg.Version)
} Defensive patterns
Strategy: validation
Validate before calling
v := schemaVersionFromConfig(cfg)
if v != V1 && v != V2 {
return nil, fmt.Errorf("invalid dependency store schema version: %v", v)
} Type guard
func validVersion(v DependencyStoreSchemaVersion) bool { return v == V1 || v == V2 } Try / catch
if err := store.WriteDependencies(ctx, ts, deps); err != nil {
if strings.Contains(err.Error(), "unsupported schema version") {
logger.Error("dependency store misconfigured: schema version must be V1 or V2")
}
return err
} Prevention
- Validate the version in the constructor rather than at each query.
- Use the package constants V1/V2 only; never cast raw integers.
- Map the --cassandra.schema-version flag to store versions with an explicit allowlist.
When it happens
Trigger: Calling WriteDependencies on a DependencyStore created (NewDependencyStore / WithVersion) with a version value other than V1 or V2, e.g. DependencyStoreSchemaVersion(-1) or a zero-value store.
Common situations: Passing an uninitialized version struct, casting an integer from config into the version type, or constructing the store manually in tests/embedding code.
Related errors
- invalid version
- query exists in template without ";"
- only one of TagIndexBlacklist and TagIndexWhitelist can be s
- failed to obtain purger: %w
- failed to Exec query '%s': %w
AI-assisted analysis of jaegertracing/jaeger@806f444784 (2026-09-01).
Data as JSON: /api/errors/e40778e7ce702884.
Report an issue: GitHub.