use bloom filter in second pass of sync --all --content

This is needed because when preferred content matches on files,
the second pass would otherwise want to drop all keys. Using a bloom filter
avoids this, and in the case of a false positive, a key will be left
undropped that preferred content would allow dropping. Chances of that
happening are a mere 1 in 1 million.
This commit is contained in:
Joey Hess 2015-06-16 18:38:12 -04:00
parent a0a8127956
commit adba0595bd
4 changed files with 46 additions and 21 deletions

View file

@ -12,6 +12,7 @@ module Utility.Bloom (
safeSuggestSizing,
Hashable(..),
cheapHashes,
elemB,
notElemB,
newMB,
@ -34,6 +35,9 @@ import Control.Monad.ST (ST)
notElemB :: a -> Bloom a -> Bool
notElemB = Bloom.notElem
elemB :: a -> Bloom a -> Bool
elemB = Bloom.elem
newMB :: (a -> [Bloom.Hash]) -> Int -> ST s (MBloom.MBloom s a)
newMB = MBloom.new
@ -48,6 +52,9 @@ unsafeFreezeMB = Bloom.unsafeFreeze
notElemB :: a -> Bloom a -> Bool
notElemB = Bloom.notElemB
elemB :: a -> Bloom a -> Bool
elemB = Bloom.elem
newMB :: (a -> [Bloom.Hash]) -> Int -> ST s (Bloom.MBloom s a)
newMB = Bloom.newMB