{"record":{"id":"a976c6d3f9b03242","repo":"weaviate/weaviate","slug":"q-hashtree-level-d-returned-d-digests-expecte","errorCode":null,"errorMessage":"%q: hashtree level %d returned %d digests, expected %d","messagePattern":"%q: hashtree level (.+?) returned (.+?) digests, expected (.+?)","errorType":"exception","errorClass":null,"httpStatus":null,"severity":"error","filePath":"usecases/replica/finder.go","lineNumber":417,"sourceCode":"\t\t\tdigests = hashtree.SizeDigests(digests, need)\n\n\t\t\tn, err := ht.Level(l, discriminant, digests)\n\t\t\tif err != nil {\n\t\t\t\treturn nil, fmt.Errorf(\"%q: %w\", targetNodeAddress, err)\n\t\t\t}\n\t\t\t// a short local write would leave stale digests from a previous level or target\n\t\t\tif n != need {\n\t\t\t\treturn nil, fmt.Errorf(\"%q: local hashtree level %d wrote %d digests, expected %d\",\n\t\t\t\t\ttargetNodeAddress, l, n, need)\n\t\t\t}\n\n\t\t\tlevelDigests, err := f.client.HashTreeLevel(ctx, targetNodeAddress, f.class, shardName, l, discriminant)\n\t\t\tif err != nil {\n\t\t\t\treturn nil, fmt.Errorf(\"%q: %w\", targetNodeAddress, err)\n\t\t\t}\n\t\t\t// anything but one digest per set bit reads as a failed target, never as convergence\n\t\t\tif len(levelDigests) != need {\n\t\t\t\treturn nil, fmt.Errorf(\"%q: hashtree level %d returned %d digests, expected %d\",\n\t\t\t\t\ttargetNodeAddress, l, len(levelDigests), need)\n\t\t\t}\n\n\t\t\tnextDiscriminant, levelDiffCount, err := hashtree.LevelDiff(l, height, discriminant, digests, levelDigests)\n\t\t\tif err != nil {\n\t\t\t\treturn nil, fmt.Errorf(\"%q: %w\", targetNodeAddress, err)\n\t\t\t}\n\n\t\t\tif l == height {\n\t\t\t\tleaf = discriminant\n\t\t\t\tbreak\n\t\t\t}\n\t\t\tif levelDiffCount == 0 {\n\t\t\t\tbreak\n\t\t\t}\n\t\t\tdiscriminant = nextDiscriminant\n\t\t}\n","sourceCodeStart":399,"sourceCodeEnd":435,"githubUrl":"https://github.com/weaviate/weaviate/blob/75aa4b6d11f8818305aafd4440b4e32794f7ca04/usecases/replica/finder.go#L399-L435","documentation":"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.","triggerScenarios":"Thrown at usecases/replica/finder.go:417 when the library encounters an invalid state.","commonSituations":"See trigger scenarios.","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"],"exampleFix":null,"handlingStrategy":"retry","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"}