weaviate/weaviate · critical
read bloom filter: %w
Error message
read bloom filter: %w
What it means
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.
Source
Thrown at adapters/repos/db/lsmkv/segment_metadata.go:233
return err
}
if err := s.initCNAFromData(netAdditions); err != nil {
return err
}
return nil
}
func (s *segment) initBloomFiltersFromData(primary []byte, secondary [][]byte) error {
if !s.useBloomFilter {
return nil
}
s.bloomFilter = new(bloom.BloomFilter)
_, err := s.bloomFilter.ReadFrom(bytes.NewReader(primary))
if err != nil {
return fmt.Errorf("read bloom filter: %w", err)
}
s.secondaryBloomFilters = make([]*bloom.BloomFilter, s.secondaryIndexCount)
for i := range s.secondaryBloomFilters {
s.secondaryBloomFilters[i] = new(bloom.BloomFilter)
_, err := s.secondaryBloomFilters[i].ReadFrom(bytes.NewReader(secondary[i]))
if err != nil {
return fmt.Errorf("read secondary bloom filter %d with byte length %d: %w", i, len(secondary[i]), err)
}
}
return nil
}
func (s *segment) initCNAFromData(netAdditions []byte) error {
if !s.calcCountNetAdditions || s.strategy != segmentindex.StrategyReplace {
return nil
}
View on GitHub (pinned to 75aa4b6d11)
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)
Defensive patterns
Strategy: validation
Validate before calling
// sanity check the metadata file size before opening
info, err := os.Stat(metaPath)
if err != nil || info.Size() < 16 {
return fmt.Errorf("metadata file missing or implausibly small: %v", err)
} Try / catch
err := bucket.Open()
if err != nil && strings.Contains(err.Error(), "read bloom filter") {
logger.Errorf("bloom data corrupt, restore shard from backup or reindex: %v", err)
triggerShardRestore()
} Prevention
- 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
When it happens
Trigger: Opening a segment whose metadata file has a truncated or corrupt primary bloom filter blob; version skew between writer and reader bloom serialization formats.
Common situations: Disk corruption or partial flush after crash; manual editing/copying of metadata files; cross-version data directory reuse.
Related errors
- delete existing bloom filter %s: %w
- read bloom filter from disk: %w
- read secondary bloom filter %d with byte length %d: %w
- objects bucket not found for shard %s
- objects bucket not found
AI-assisted analysis of weaviate/weaviate@75aa4b6d11 (2026-09-04).
Data as JSON: /api/errors/448e40cc66099d3f.
Report an issue: GitHub.