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

  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.