HBASE-2625 Make testDynamicBloom()'s randomness deterministic

git-svn-id: https://svn.apache.org/repos/asf/hbase/trunk@949423 13f79535-47bb-0310-9956-ffa450edef68
This commit is contained in:
Michael Stack 2010-05-29 17:21:18 +00:00
parent 914f415fd5
commit 9f7ecc2b02
2 changed files with 20 additions and 4 deletions

View File

@ -1260,6 +1260,8 @@ Release 0.20.0 - Tue Sep 8 12:53:05 PDT 2009
HBASE-1743 [debug tool] Add regionsInTransition list to ClusterStatus HBASE-1743 [debug tool] Add regionsInTransition list to ClusterStatus
detailed output detailed output
HBASE-1772 Up the default ZK session timeout from 30seconds to 60seconds HBASE-1772 Up the default ZK session timeout from 30seconds to 60seconds
HBASE-2625 Make testDynamicBloom()'s "randomness" deterministic
(Nicolas Spiegelberg via Stack)
OPTIMIZATIONS OPTIMIZATIONS
HBASE-1412 Change values for delete column and column family in KeyValue HBASE-1412 Change values for delete column and column family in KeyValue

View File

@ -26,6 +26,7 @@ import java.io.DataInputStream;
import java.io.DataOutputStream; import java.io.DataOutputStream;
import java.nio.ByteBuffer; import java.nio.ByteBuffer;
import java.util.BitSet; import java.util.BitSet;
import java.util.Random;
import junit.framework.TestCase; import junit.framework.TestCase;
@ -150,13 +151,23 @@ public class TestByteBloomFilter extends TestCase {
Hash.MURMUR_HASH); Hash.MURMUR_HASH);
bf1.allocBloom(); bf1.allocBloom();
long seed = System.currentTimeMillis();
Random r = new Random(seed);
System.out.println("seed = " + seed);
for (int i = 0; i < keyInterval*4; ++i) { // add for (int i = 0; i < keyInterval*4; ++i) { // add
if (Math.random() > 0.5) { if (r.nextBoolean()) {
bf1.add(Bytes.toBytes(i)); bf1.add(Bytes.toBytes(i));
valid.set(i); valid.set(i);
// we assume only 2 blooms in this test, so exit before a 3rd is made
if (bf1.getKeyCount() == 2000) {
break;
}
} }
} }
assertTrue(2 <= bf1.bloomCount() && bf1.bloomCount() <= 3); assertTrue(2 <= bf1.bloomCount());
System.out.println("keys added = " + bf1.getKeyCount());
// test serialization/deserialization // test serialization/deserialization
ByteArrayOutputStream metaOut = new ByteArrayOutputStream(); ByteArrayOutputStream metaOut = new ByteArrayOutputStream();
@ -178,8 +189,11 @@ public class TestByteBloomFilter extends TestCase {
} }
} }
// note that actualErr = err * bloomCount // Dynamic Blooms are a little sneaky. The error rate currently isn't
// error rate should be roughly: (keyInterval*2)*(err*2), allow some tolerance // 'err', it's err * bloomCount. bloomCount == 2000/1000 == 2 in this case
// So, the actual error rate should be roughly:
// (keyInterval*2) * err * bloomCount
// allow some tolerance
System.out.println("False positives: " + falsePositives); System.out.println("False positives: " + falsePositives);
assertTrue(falsePositives <= (keyInterval*5)*err); assertTrue(falsePositives <= (keyInterval*5)*err);
} }