Open
Description
Hey @tylertreat! I noticed that NewDefaultScalableBloomFilter(0.01)
panics after exactly 31,536,466 insertions. Here is a test case:
func TestScalableBloomLarge(t *testing.T) {
total := uint32(40000000) // 40 million
f := NewDefaultScalableBloomFilter(0.01)
i := uint32(0)
defer func() {
if err := recover(); err != nil {
fmt.Printf("panicked after %d iterations: %s\n", i, err)
panic(err)
}
}()
for ; i < total; i++ {
if i%1000000 == 0 {
fmt.Printf(" i: %d\n", i)
}
key := make([]byte, 8)
binary.BigEndian.PutUint32(key, i)
f.Add(key)
}
}
and here is the test ouput:
=== RUN TestScalableBloomLarge
i: 0
i: 1000000
i: 2000000
# ...
i: 29000000
i: 30000000
i: 31000000
panicked after 31536466 iterations: runtime error: makeslice: len out of range
--- FAIL: TestScalableBloomLarge (215.81s)
panic: runtime error: makeslice: len out of range [recovered]
panic: runtime error: makeslice: len out of range [recovered]
panic: runtime error: makeslice: len out of range
goroutine 132 [running]:
testing.tRunner.func1(0xc000100f00)
/usr/local/Cellar/go/1.12.1/libexec/src/testing/testing.go:830 +0x392
panic(0x1174160, 0x11d3170)
/usr/local/Cellar/go/1.12.1/libexec/src/runtime/panic.go:522 +0x1b5
github.com/tylertreat/BoomFilters.TestScalableBloomLarge.func1(0xc00007cf7c)
/Users/jameshageman/stripe/BoomFilters/scalable_test.go:179 +0x118
panic(0x1174160, 0x11d3170)
/usr/local/Cellar/go/1.12.1/libexec/src/runtime/panic.go:522 +0x1b5
github.com/tylertreat/BoomFilters.NewPartitionedBloomFilter(0x2710, 0x357fb461c091b, 0x54e5e2762f38eb)
/Users/jameshageman/stripe/BoomFilters/partitioned.go:52 +0xb1
github.com/tylertreat/BoomFilters.(*ScalableBloomFilter).addFilter(0xc00028a000)
/Users/jameshageman/stripe/BoomFilters/scalable.go:148 +0x6a
github.com/tylertreat/BoomFilters.(*ScalableBloomFilter).Add(0xc00028a000, 0xc0d18e4858, 0x8, 0x8, 0x11d8120, 0xc00028a000)
/Users/jameshageman/stripe/BoomFilters/scalable.go:120 +0x112
github.com/tylertreat/BoomFilters.TestScalableBloomLarge(0xc000100f00)
/Users/jameshageman/stripe/BoomFilters/scalable_test.go:189 +0xc6
testing.tRunner(0xc000100f00, 0x11ad908)
/usr/local/Cellar/go/1.12.1/libexec/src/testing/testing.go:865 +0xc0
created by testing.(*T).Run
/usr/local/Cellar/go/1.12.1/libexec/src/testing/testing.go:916 +0x35a
FAIL github.com/tylertreat/BoomFilters 218.857s
The culprit appears to be this line:
Line 52 in 611b3db
which confuses me because k
should be a totally reasonable size, and is only a function of fpr
and not n
.
Metadata
Assignees
Labels
No labels
Activity