{"record":{"id":"8257d32e94ed3948","repo":"weaviate/weaviate","slug":"w-level-d-is-too-high-for-height-d","errorCode":null,"errorMessage":"%w: level(%d) is too high for height(%d)","messagePattern":"%w: level\\((.+?)\\) is too high for height\\((.+?)\\)","errorType":"exception","errorClass":"ErrIllegalState","httpStatus":null,"severity":"error","filePath":"usecases/replica/hashtree/aggregated_hashtree.go","lineNumber":50,"sourceCode":"\n\tNewRangeReader(discriminant *Bitset) (AggregatedHashTreeRangeReader, error)\n\n\tSerialize(w io.Writer) (n int64, err error)\n}\n\ntype AggregatedHashTreeRangeReader interface {\n\tNext() (uint64, uint64, error)\n}\n\n// LevelDiff compares level-l digests1 and digests2, clearing matched bits in\n// discriminant. For l < height it returns a level-(l+1) discriminant with\n// the children of mismatched nodes set; at l == height it returns nil.\nfunc LevelDiff(l, height int, discriminant *Bitset, digests1, digests2 []Digest) (nextDiscriminant *Bitset, levelDiffCount int, err error) {\n\tif l < 0 {\n\t\treturn nil, 0, fmt.Errorf(\"%w: invalid level(%d)\", ErrIllegalArguments, l)\n\t}\n\tif l > height {\n\t\treturn nil, 0, fmt.Errorf(\"%w: level(%d) is too high for height(%d)\", ErrIllegalState, l, height)\n\t}\n\tif discriminant == nil {\n\t\treturn nil, 0, fmt.Errorf(\"%w: nil discriminant provided\", ErrIllegalArguments)\n\t}\n\n\texpected := nodesAtLevel(l)\n\tif discriminant.Size() != expected {\n\t\treturn nil, 0, fmt.Errorf(\"%w: discriminant size %d, expected %d for level %d\",\n\t\t\tErrIllegalArguments, discriminant.Size(), expected, l)\n\t}\n\n\t// digests1/digests2 hold one entry per set bit, not per Size().\n\tsetCount := discriminant.SetCount()\n\tif len(digests1) < setCount || len(digests2) < setCount {\n\t\treturn nil, 0, fmt.Errorf(\"%w: digests slice too short for level %d (have %d/%d, need >= %d)\",\n\t\t\tErrIllegalArguments, l, len(digests1), len(digests2), setCount)\n\t}\n","sourceCodeStart":32,"sourceCodeEnd":68,"githubUrl":"https://github.com/weaviate/weaviate/blob/75aa4b6d11f8818305aafd4440b4e32794f7ca04/usecases/replica/hashtree/aggregated_hashtree.go#L32-L68","documentation":"Returned by LevelDiff, wrapping ErrIllegalState, when the requested level exceeds the hashtree's height. The traversal is trying to read a level deeper than the tree has leaves, which indicates the caller's height math or the tree construction is inconsistent.","triggerScenarios":"Thrown at usecases/replica/hashtree/aggregated_hashtree.go:50 when the library encounters an invalid state.","commonSituations":"See trigger scenarios.","solutions":["Pass a level no greater than the hashtree height","Recompute height from the same tree instance used for the diff","Verify the tree was built with the capacity/height the caller assumes"],"exampleFix":null,"handlingStrategy":"validation","validationCode":null,"typeGuard":null,"tryCatchPattern":null,"preventionTips":[],"tags":[],"backgroundTag":null,"analyzedSha":"75aa4b6d11f8818305aafd4440b4e32794f7ca04","analyzedAt":"2026-09-04T14:58:20.392Z","contentChangedAt":"2026-09-04T14:58:20.392Z","schemaVersion":2},"datasetVersion":"2026-09-11T21:17:09.523Z"}