From c9fdf61bd91875cdc71559cd9bab8314ad8775e1 Mon Sep 17 00:00:00 2001 From: Runxi Yu Date: Sun, 14 Jun 2026 14:13:45 +0000 Subject: object/store/packed, cmd/idx-bloom: NewBuilder wants a PackHash --- cmd/idx-bloom/main.go | 2 +- object/store/packed/internal/ingest/finalize.go | 9 +++++---- object/store/packed/pack.go | 10 ++++++++-- 3 files changed, 14 insertions(+), 7 deletions(-) diff --git a/cmd/idx-bloom/main.go b/cmd/idx-bloom/main.go index 62fb347b..fa471237 100644 --- a/cmd/idx-bloom/main.go +++ b/cmd/idx-bloom/main.go @@ -86,7 +86,7 @@ func buildFilter(objectFormat id.ObjectFormat, index *packidx.Packidx) ([]byte, return nil, fmt.Errorf("choosing parameters: %w", err) } - builder, err := bloom.NewBuilder(objectFormat, bucketCount, k) + builder, err := bloom.NewBuilder(objectFormat, bucketCount, k, index.PackHash()) if err != nil { return nil, fmt.Errorf("creating builder: %w", err) } diff --git a/object/store/packed/internal/ingest/finalize.go b/object/store/packed/internal/ingest/finalize.go index 8caf6b2f..afed996c 100644 --- a/object/store/packed/internal/ingest/finalize.go +++ b/object/store/packed/internal/ingest/finalize.go @@ -39,7 +39,7 @@ func (ingestion *ingestion) finalize() (Result, error) { return Result{}, err } - bloomBuilder, err := ingestion.buildBloom(entries) + bloomBuilder, err := ingestion.buildBloom(entries, packHash) if err != nil { return Result{}, err } @@ -97,14 +97,15 @@ func (ingestion *ingestion) finalize() (Result, error) { }, nil } -// buildBloom builds a Bloom filter over the index entries' object IDs. -func (ingestion *ingestion) buildBloom(entries []packidx.Entry) (*bloom.Builder, error) { +// buildBloom builds a Bloom filter over the index entries' object IDs, +// bound to packHash. +func (ingestion *ingestion) buildBloom(entries []packidx.Entry, packHash []byte) (*bloom.Builder, error) { bucketCount, k, err := bloom.RecommendParams(ingestion.objectFormat, len(entries)) if err != nil { return nil, fmt.Errorf("object/store/packed/internal/ingest: %w", err) } - builder, err := bloom.NewBuilder(ingestion.objectFormat, bucketCount, k) + builder, err := bloom.NewBuilder(ingestion.objectFormat, bucketCount, k, packHash) if err != nil { return nil, fmt.Errorf("object/store/packed/internal/ingest: %w", err) } diff --git a/object/store/packed/pack.go b/object/store/packed/pack.go index ba865e51..9cd6162b 100644 --- a/object/store/packed/pack.go +++ b/object/store/packed/pack.go @@ -73,7 +73,7 @@ func openPack(root *os.Root, name string, objectFormat id.ObjectFormat) (*pack, return nil, fmt.Errorf("%w: pack %q: %w", ErrMalformedPackedStore, name, err) } - bloomMapping, filter := openBloom(root, name, objectFormat) + bloomMapping, filter := openBloom(root, name, objectFormat, idx.PackHash()) return &pack{ name: name, @@ -86,7 +86,7 @@ func openPack(root *os.Root, name string, objectFormat id.ObjectFormat) (*pack, }, nil } -func openBloom(root *os.Root, name string, objectFormat id.ObjectFormat) (*mmap.Mmap, *bloom.Bloom) { +func openBloom(root *os.Root, name string, objectFormat id.ObjectFormat, packHash []byte) (*mmap.Mmap, *bloom.Bloom) { mapping, err := mapFile(root, name+".bloom") if err != nil { return nil, nil @@ -99,6 +99,12 @@ func openBloom(root *os.Root, name string, objectFormat id.ObjectFormat) (*mmap. return nil, nil } + if !bytes.Equal(filter.PackHash(), packHash) { + _ = mapping.Close() + + return nil, nil + } + return mapping, &filter } -- cgit v1.3.1-10-gc9f91