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

  1. Restore the shard from backup or reindex the collection
  2. Check for disk/filesystem corruption and verify the checksummed metadata file integrity
  3. Ensure the same Weaviate version wrote the data directory
  4. 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

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


AI-assisted analysis of weaviate/weaviate@75aa4b6d11 (2026-09-04). Data as JSON: /api/errors/448e40cc66099d3f. Report an issue: GitHub.