HADOOP-11327. BloomFilter#not() omits the last bit, resulting in an incorrect filter. Contributed by Eric Payne

(cherry picked from commit 07b0806036)
This commit is contained in:
Jason Lowe 2015-01-21 19:04:29 +00:00
parent 683cc18bba
commit 57a53acad4
3 changed files with 15 additions and 1 deletions

View File

@ -375,6 +375,9 @@ Release 2.7.0 - UNRELEASED
HADOOP-10668. TestZKFailoverControllerStress#testExpireBackAndForth
occasionally fails. (Ming Ma via cnauroth)
HADOOP-11327. BloomFilter#not() omits the last bit, resulting in an
incorrect filter (Eric Payne via jlowe)
Release 2.6.0 - 2014-11-18
INCOMPATIBLE CHANGES

View File

@ -157,7 +157,7 @@ public boolean membershipTest(Key key) {
@Override
public void not() {
bits.flip(0, vectorSize - 1);
bits.flip(0, vectorSize);
}
@Override

View File

@ -23,6 +23,7 @@
import static org.junit.Assert.assertTrue;
import java.util.AbstractCollection;
import java.util.BitSet;
import java.util.Iterator;
import org.apache.hadoop.util.bloom.BloomFilterCommonTester.BloomFilterTestStrategy;
@ -237,4 +238,14 @@ public void testFiltersWithMurmurHash() {
BloomFilterTestStrategy.FILTER_AND_STRATEGY,
BloomFilterTestStrategy.FILTER_XOR_STRATEGY)).test();
}
@Test
public void testNot() {
BloomFilter bf = new BloomFilter(8, 1, Hash.JENKINS_HASH);
bf.bits = BitSet.valueOf(new byte[] { (byte) 0x95 });
BitSet origBitSet = (BitSet) bf.bits.clone();
bf.not();
assertFalse("BloomFilter#not should have inverted all bits",
bf.bits.intersects(origBitSet));
}
}