aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGravatar Runxi Yu2026-06-14 14:13:45 +0000
committerGravatar Runxi Yu2026-06-14 14:13:45 +0000
commitc9fdf61bd91875cdc71559cd9bab8314ad8775e1 (patch)
treecd970e43d1c47fa8888bbb99f760c8cf13fdf0b8
parentinternal/format/packidx/bloom: Add trailers (diff)
object/store/packed, cmd/idx-bloom: NewBuilder wants a PackHash
-rw-r--r--cmd/idx-bloom/main.go2
-rw-r--r--object/store/packed/internal/ingest/finalize.go9
-rw-r--r--object/store/packed/pack.go10
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
}