{"record":{"id":"448e40cc66099d3f","repo":"weaviate/weaviate","slug":"read-bloom-filter-w","errorCode":null,"errorMessage":"read bloom filter: %w","messagePattern":"read bloom filter: %w","errorType":"error_code","errorClass":null,"httpStatus":null,"severity":"critical","filePath":"adapters/repos/db/lsmkv/segment_metadata.go","lineNumber":233,"sourceCode":"\t\treturn err\n\t}\n\n\tif err := s.initCNAFromData(netAdditions); err != nil {\n\t\treturn err\n\t}\n\n\treturn nil\n}\n\nfunc (s *segment) initBloomFiltersFromData(primary []byte, secondary [][]byte) error {\n\tif !s.useBloomFilter {\n\t\treturn nil\n\t}\n\n\ts.bloomFilter = new(bloom.BloomFilter)\n\t_, err := s.bloomFilter.ReadFrom(bytes.NewReader(primary))\n\tif err != nil {\n\t\treturn fmt.Errorf(\"read bloom filter: %w\", err)\n\t}\n\n\ts.secondaryBloomFilters = make([]*bloom.BloomFilter, s.secondaryIndexCount)\n\tfor i := range s.secondaryBloomFilters {\n\t\ts.secondaryBloomFilters[i] = new(bloom.BloomFilter)\n\t\t_, err := s.secondaryBloomFilters[i].ReadFrom(bytes.NewReader(secondary[i]))\n\t\tif err != nil {\n\t\t\treturn fmt.Errorf(\"read secondary bloom filter %d with byte length %d: %w\", i, len(secondary[i]), err)\n\t\t}\n\t}\n\treturn nil\n}\n\nfunc (s *segment) initCNAFromData(netAdditions []byte) error {\n\tif !s.calcCountNetAdditions || s.strategy != segmentindex.StrategyReplace {\n\t\treturn nil\n\t}\n","sourceCodeStart":215,"sourceCodeEnd":251,"githubUrl":"https://github.com/weaviate/weaviate/blob/75aa4b6d11f8818305aafd4440b4e32794f7ca04/adapters/repos/db/lsmkv/segment_metadata.go#L215-L251","documentation":"The primary bloom filter is deserialized from bytes embedded in the metadata file; if the bloom library's ReadFrom rejects the bytes (wrong size, truncated, garbage), this error is returned and segment startup fails. It indicates the metadata file's bloom region is corrupt or was produced by an incompatible writer.","triggerScenarios":"Opening a segment whose metadata file has a truncated or corrupt primary bloom filter blob; version skew between writer and reader bloom serialization formats.","commonSituations":"Disk corruption or partial flush after crash; manual editing/copying of metadata files; cross-version data directory reuse.","solutions":["Restore the shard from backup or reindex the collection","Check for disk/filesystem corruption and verify the checksummed metadata file integrity","Ensure the same Weaviate version wrote the data directory","Delete and rebuild the affected segment only if the DB supports rebuilding its index (e.g. inverted-index rebuild tooling)"],"exampleFix":null,"handlingStrategy":"validation","validationCode":"// sanity check the metadata file size before opening\ninfo, err := os.Stat(metaPath)\nif err != nil || info.Size() < 16 {\n    return fmt.Errorf(\"metadata file missing or implausibly small: %v\", err)\n}","typeGuard":null,"tryCatchPattern":"err := bucket.Open()\nif err != nil && strings.Contains(err.Error(), \"read bloom filter\") {\n    logger.Errorf(\"bloom data corrupt, restore shard from backup or reindex: %v\", err)\n    triggerShardRestore()\n}","preventionTips":["Use checksummed backups for disaster recovery","Shut down cleanly; avoid power-loss/kill -9 during compaction","Monitor disk errors and filesystem health","Keep Weaviate versions consistent across the cluster"],"tags":["lsmkv","bloom-filter","corruption","startup"],"backgroundTag":"segment-corruption","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"}