jaegertracing/jaeger · error

unsupported schema version

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.

Solutions

  1. Validate the schema version at store construction (in the constructor) so writes fail fast at startup instead.
  2. Set the version explicitly with the package's V1/V2 constants when creating the store.
  3. Check the config plumbing that maps Jaeger's cassandra schema-version flag into the store version.
  4. 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

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


AI-assisted analysis of jaegertracing/jaeger@806f444784 (2026-09-01). Data as JSON: /api/errors/e40778e7ce702884. Report an issue: GitHub.

Appendix: 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)