weaviate/weaviate · error
%q: hashtree level %d returned %d digests, expected %d
Error message
%q: hashtree level %d returned %d digests, expected %d
What it means
Thrown after a successful remote HashTreeLevel RPC when the remote node returned a different number of digests than the discriminant requested. This indicates the target replica's hashtree disagrees about level width — usually a height/capacity mismatch between source and target shards.
Source
Thrown at usecases/replica/finder.go:417
digests = hashtree.SizeDigests(digests, need)
n, err := ht.Level(l, discriminant, digests)
if err != nil {
return nil, fmt.Errorf("%q: %w", targetNodeAddress, err)
}
// a short local write would leave stale digests from a previous level or target
if n != need {
return nil, fmt.Errorf("%q: local hashtree level %d wrote %d digests, expected %d",
targetNodeAddress, l, n, need)
}
levelDigests, err := f.client.HashTreeLevel(ctx, targetNodeAddress, f.class, shardName, l, discriminant)
if err != nil {
return nil, fmt.Errorf("%q: %w", targetNodeAddress, err)
}
// anything but one digest per set bit reads as a failed target, never as convergence
if len(levelDigests) != need {
return nil, fmt.Errorf("%q: hashtree level %d returned %d digests, expected %d",
targetNodeAddress, l, len(levelDigests), need)
}
nextDiscriminant, levelDiffCount, err := hashtree.LevelDiff(l, height, discriminant, digests, levelDigests)
if err != nil {
return nil, fmt.Errorf("%q: %w", targetNodeAddress, err)
}
if l == height {
leaf = discriminant
break
}
if levelDiffCount == 0 {
break
}
discriminant = nextDiscriminant
}
View on GitHub (pinned to 75aa4b6d11)
Solutions
- Verify both replicas run compatible versions and identical shard capacity settings
- Check whether the target shard was recreated/resized while differencing was in progress
- Retry the operation once the cluster is quiescent
Defensive patterns
Strategy: retry
When it happens
Trigger: Thrown at usecases/replica/finder.go:417 when the library encounters an invalid state.
Common situations: See trigger scenarios.
AI-assisted analysis of weaviate/weaviate@75aa4b6d11 (2026-09-04).
Data as JSON: /api/errors/a976c6d3f9b03242.
Report an issue: GitHub.