jaegertracing/jaeger · error

failed to query dependencies

Error message

failed to query dependencies: %w

What it means

ClickHouse depstore Reader.GetDependencies queries the jaeger_dependencies table for dependency-link snapshots between the query's start and end times. If the underlying clickhouse-go Query call fails — connection errors, DNS failure, auth rejection, malformed SQL/table missing — the error is wrapped with this message and returned. The %w wrap preserves the driver error for errors.Is/As inspection.

Solutions

  1. Verify ClickHouse connectivity (address, port, credentials, TLS) in the storage configuration and that the server is up.
  2. Confirm the schema is initialized (jaeger_dependencies table exists) with the correct database name.
  3. Inspect the wrapped driver error via errors.Is/As (e.g. clickhouse exceptions) to pinpoint auth vs network vs SQL causes; check context deadlines.

Example fix

// config before
storage: { clickhouse: { address: "clickhouse:9009" } }
// after (default native port)
storage: { clickhouse: { address: "clickhouse:9000", database: "jaeger" } }
Defensive patterns

Strategy: try-catch

Validate before calling

if err := conn.Ping(ctx); err != nil {
  return fmt.Errorf("clickhouse unreachable: %w", err)
}
if query.StartTime.After(query.EndTime) {
  return errors.New("invalid dependency query range")
}

Try / catch

deps, err := reader.GetDependencies(ctx, q)
if err != nil {
  var chEx *clickhouse.Exception
  if errors.As(err, &chEx) {
    log.Printf("clickhouse error code=%d: %v", chEx.Code, chEx)
  } else if errors.Is(err, context.DeadlineExceeded) {
    log.Printf("dependency query timed out")
  }
  return fmt.Errorf("getting dependencies: %w", err)
}

Prevention

When it happens

Trigger: Calling GetDependencies(ctx, depstore.QueryParameters{StartTime, EndTime}) when r.conn.Query(ctx, sql.SelectDependencies, ...) returns an error: server unreachable, credentials invalid, database/table absent, context canceled before the query starts.

Common situations: ClickHouse endpoint misconfigured in the storage config; ClickHouse down or restarting; wrong username/password or TLS settings; network policy blocking port 9000/8123; table not created by schema initialization.

Understand the failure class

Background: Database query failed: Internal Server Error 500s wrapping SQL, Prisma, and connection failures — what to check first — this error's family across 16 libraries.

Related errors


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

Appendix: source

Thrown at internal/storage/v2/clickhouse/depstore/reader.go:37

type Reader struct {
	conn driver.Conn
}

func NewDependencyReader(conn driver.Conn) *Reader {
	return &Reader{conn: conn}
}

// dependencyKey groups dependency links by (parent, child) for merging.
type dependencyKey struct {
	parent string
	child  string
}

func (r *Reader) GetDependencies(ctx context.Context, query depstore.QueryParameters) ([]model.DependencyLink, error) {
	rows, err := r.conn.Query(ctx, sql.SelectDependencies, query.StartTime, query.EndTime)
	if err != nil {
		return nil, fmt.Errorf("failed to query dependencies: %w", err)
	}
	defer rows.Close()

	// Merge dependencies from all snapshots in the time range.
	merged := make(map[dependencyKey]uint64)

	for rows.Next() {
		var blob string
		if err := rows.Scan(&blob); err != nil {
			return nil, fmt.Errorf("failed to scan dependency row: %w", err)
		}
		var links []dependencyLink
		if err := json.Unmarshal([]byte(blob), &links); err != nil {
			return nil, fmt.Errorf("failed to unmarshal dependencies JSON: %w", err)
		}
		for _, link := range links {
			merged[dependencyKey{link.Parent, link.Child}] += link.CallCount
		}

View on GitHub (pinned to 806f444784)