{"record":{"id":"0ad579ada6429dfc","repo":"weaviate/weaviate","slug":"intermediate-rescore-fde-for-vector-d","errorCode":null,"errorMessage":"intermediate rescore: fde for vector %d","messagePattern":"intermediate rescore: fde for vector (.+?)","errorType":"exception","errorClass":null,"httpStatus":null,"severity":"error","filePath":"adapters/repos/db/vector/hfresh/search.go","lineNumber":687,"sourceCode":"// bucket plus the fold); the pipeline shape stays as is.\nfunc (h *HFresh) rescoreFDECandidates(queryFDE []float32, candidates *ResultSet, rerankBudget int) ([]uint64, error) {\n\tbucket := h.store.Bucket(h.id + \"_muvera_vectors\")\n\tif bucket == nil {\n\t\treturn nil, errors.New(\"intermediate rescore: muvera vectors bucket not found\")\n\t}\n\n\t// empty struct, costs nothing to create per call\n\tdotProvider := distancer.NewDotProductProvider()\n\tcosine := h.needsNormalization\n\trescored := NewResultSet(rerankBudget)\n\tkeyBuf := make([]byte, 8)\n\tvar fdeBuf []float32\n\n\tfor id := range candidates.Iter() {\n\t\tbinary.BigEndian.PutUint64(keyBuf, id)\n\t\traw, err := bucket.Get(keyBuf)\n\t\tif err != nil {\n\t\t\treturn nil, errors.Wrapf(err, \"intermediate rescore: fde for vector %d\", id)\n\t\t}\n\t\tif len(raw) == 0 {\n\t\t\t// deleted between the posting scan and this stage; skip stale\n\t\t\t// entries gracefully, like the single-vector rescore does\n\t\t\tcontinue\n\t\t}\n\t\tfdeBuf = float32SliceInto(fdeBuf, raw)\n\n\t\tvar dist float32\n\t\tif cosine {\n\t\t\tnegDot, err := dotProvider.SingleDist(queryFDE, fdeBuf)\n\t\t\tif err != nil {\n\t\t\t\treturn nil, errors.Wrapf(err, \"intermediate rescore: distance for vector %d\", id)\n\t\t\t}\n\t\t\tnegNormSq, err := dotProvider.SingleDist(fdeBuf, fdeBuf)\n\t\t\tif err != nil {\n\t\t\t\treturn nil, errors.Wrapf(err, \"intermediate rescore: norm for vector %d\", id)\n\t\t\t}","sourceCodeStart":669,"sourceCodeEnd":705,"githubUrl":"https://github.com/weaviate/weaviate/blob/75aa4b6d11f8818305aafd4440b4e32794f7ca04/adapters/repos/db/vector/hfresh/search.go#L669-L705","documentation":"Wraps an error returned by bucket.Get while reading the raw FDE (fixed dimensional encoding) bytes of a candidate vector during the intermediate rescore stage of an HFresh FDE search. The candidate id came from the posting scan, but the underlying LSMKV bucket read failed (I/O, corruption, bucket closed). Unlike the empty-read case (deleted vector, skipped gracefully), this is an actual storage-level failure and aborts the search.","triggerScenarios":"Calling a search that uses FDE rescoring (searchByFDE) when bucket.Get(keyBuf) returns a non-nil error for a candidate id — e.g. disk I/O error, corrupted segment, or a closed/compacting bucket.","commonSituations":"Disk failures or full disks on a node; LSMKV segment corruption; querying a shard whose store is shutting down or was dropped mid-query; races with shard offloading/tenant moves.","solutions":["Inspect the wrapped inner error (the cause is appended by errors.Wrapf) to find the storage-level root cause (I/O, corruption, closed bucket).","Check disk health and free space on the node (dmesg, df) and repair or restore the affected shard from backup if corruption is reported.","Retry the query — transient errors during compaction/shutdown often resolve once the node is stable.","If it recurs on the same shard, drop and re-import the collection or restore from a backup."],"exampleFix":null,"handlingStrategy":"retry","validationCode":"// before querying, verify the collection/shard is readable\nschema := client.Schema.GetExtractorClass(class)\nif schema == nil { return fmt.Errorf(\"class %s not found\", class) }","typeGuard":null,"tryCatchPattern":"result, err := client.GraphQL().Get().WithClassName(class).Run(ctx)\nif err != nil {\n    if isStorageError(err) { // transient I/O\n        // retry with backoff, then alert if persistent\n    }\n    return fmt.Errorf(\"fde rescore read failed: %w\", err)\n}","preventionTips":["Monitor disk health and free space on all nodes","Keep backups so corrupt shards can be restored","Avoid querying shards that are being offloaded or migrated","Pin cluster nodes to one Weaviate version"],"tags":["storage","lsmkv","vector-search","hfresh"],"backgroundTag":"storage-read-failure","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"}