You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@hbase.apache.org by st...@apache.org on 2009/01/20 07:37:29 UTC

svn commit: r735947 - in /hadoop/hbase/trunk: CHANGES.txt src/java/org/onelab/filter/HashFunction.java src/test/org/onelab/test/TestFilter.java

Author: stack
Date: Mon Jan 19 22:37:29 2009
New Revision: 735947

URL: http://svn.apache.org/viewvc?rev=735947&view=rev
Log:
HBASE-1134 HashFunction inadvertently destroys some randomness

Modified:
    hadoop/hbase/trunk/CHANGES.txt
    hadoop/hbase/trunk/src/java/org/onelab/filter/HashFunction.java
    hadoop/hbase/trunk/src/test/org/onelab/test/TestFilter.java

Modified: hadoop/hbase/trunk/CHANGES.txt
URL: http://svn.apache.org/viewvc/hadoop/hbase/trunk/CHANGES.txt?rev=735947&r1=735946&r2=735947&view=diff
==============================================================================
--- hadoop/hbase/trunk/CHANGES.txt (original)
+++ hadoop/hbase/trunk/CHANGES.txt Mon Jan 19 22:37:29 2009
@@ -5,6 +5,8 @@
   BUG FIXES
    HBASE-1140  "ant clean test" fails (Nitay Joffe via Stack)
    HBASE-1129  Master won't go down; stuck joined on rootScanner
+   HBASE-1136  HashFunction inadvertently destroys some randomness
+               (Jonathan Ellis via Stack)
 
   IMPROVEMENTS
    HBASE-1089  Add count of regions on filesystem to master UI; add percentage

Modified: hadoop/hbase/trunk/src/java/org/onelab/filter/HashFunction.java
URL: http://svn.apache.org/viewvc/hadoop/hbase/trunk/src/java/org/onelab/filter/HashFunction.java?rev=735947&r1=735946&r2=735947&view=diff
==============================================================================
--- hadoop/hbase/trunk/src/java/org/onelab/filter/HashFunction.java (original)
+++ hadoop/hbase/trunk/src/java/org/onelab/filter/HashFunction.java Mon Jan 19 22:37:29 2009
@@ -118,7 +118,8 @@
       }
       int[] result = new int[nbHash];
       for (int i = 0, initval = 0; i < nbHash; i++) {
-        initval = result[i] = Math.abs(hashFunction.hash(b, initval) % maxValue);
+	  initval = hashFunction.hash(b, initval);
+	  result[i] = Math.abs(initval) % maxValue;
       }
       return result;
   }//end hash() 

Modified: hadoop/hbase/trunk/src/test/org/onelab/test/TestFilter.java
URL: http://svn.apache.org/viewvc/hadoop/hbase/trunk/src/test/org/onelab/test/TestFilter.java?rev=735947&r1=735946&r2=735947&view=diff
==============================================================================
--- hadoop/hbase/trunk/src/test/org/onelab/test/TestFilter.java (original)
+++ hadoop/hbase/trunk/src/test/org/onelab/test/TestFilter.java Mon Jan 19 22:37:29 2009
@@ -266,7 +266,7 @@
    * @throws UnsupportedEncodingException
    */
   public void testCountingBloomFilter() throws UnsupportedEncodingException {
-    Filter bf = new CountingBloomFilter(8, 2, Hash.JENKINS_HASH);
+    Filter bf = new CountingBloomFilter(128, 2, Hash.JENKINS_HASH);
     Key key = new StringKey("toto");
     Key k2 = new StringKey("lulu");
     Key k3 = new StringKey("mama");
@@ -274,7 +274,6 @@
     bf.add(k2);
     bf.add(k3);
     assertTrue(bf.membershipTest(key));
-    assertTrue(bf.membershipTest(new StringKey("graknyl")));
     assertFalse(bf.membershipTest(new StringKey("xyzzy")));
     assertFalse(bf.membershipTest(new StringKey("abcd")));
 
@@ -282,15 +281,6 @@
     ((CountingBloomFilter)bf).delete(key);
     assertFalse(bf.membershipTest(key));
     
-    // OR 'key' back into the filter
-    Filter bf2 = new CountingBloomFilter(8, 2, Hash.JENKINS_HASH);
-    bf2.add(key);
-    bf.or(bf2);
-    assertTrue(bf.membershipTest(key));
-    assertTrue(bf.membershipTest(new StringKey("graknyl")));
-    assertFalse(bf.membershipTest(new StringKey("xyzzy")));
-    assertFalse(bf.membershipTest(new StringKey("abcd")));
-    
     // to test for overflows, add 'key' enough times to overflow a 4bit bucket,
     // while asserting that it stays a member
     for(int i = 0; i < 16; i++){
@@ -319,7 +309,7 @@
    * @throws UnsupportedEncodingException
    */
   public void testDynamicBloomFilter() throws UnsupportedEncodingException {
-    Filter bf = new DynamicBloomFilter(8, 2, Hash.JENKINS_HASH, 2);
+    Filter bf = new DynamicBloomFilter(128, 2, Hash.JENKINS_HASH, 2);
     Key key = new StringKey("toto");
     Key k2 = new StringKey("lulu");
     Key k3 = new StringKey("mama");
@@ -327,7 +317,6 @@
     bf.add(k2);
     bf.add(k3);
     assertTrue(bf.membershipTest(key));
-    assertTrue(bf.membershipTest(new StringKey("graknyl")));
     assertFalse(bf.membershipTest(new StringKey("xyzzy")));
     assertFalse(bf.membershipTest(new StringKey("abcd")));
   }