You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cassandra.apache.org by jb...@apache.org on 2010/11/19 17:57:45 UTC

svn commit: r1036939 - in /cassandra/branches/cassandra-0.6: CHANGES.txt src/java/org/apache/cassandra/service/AntiEntropyService.java src/java/org/apache/cassandra/utils/FBUtilities.java

Author: jbellis
Date: Fri Nov 19 16:57:45 2010
New Revision: 1036939

URL: http://svn.apache.org/viewvc?rev=1036939&view=rev
Log:
Fix misuse of DataOutputBuffer.getData in AntiEntropyService
patch by Stu Hood; reviewed by jbellis for CASSANDRA-1729

Modified:
    cassandra/branches/cassandra-0.6/CHANGES.txt
    cassandra/branches/cassandra-0.6/src/java/org/apache/cassandra/service/AntiEntropyService.java
    cassandra/branches/cassandra-0.6/src/java/org/apache/cassandra/utils/FBUtilities.java

Modified: cassandra/branches/cassandra-0.6/CHANGES.txt
URL: http://svn.apache.org/viewvc/cassandra/branches/cassandra-0.6/CHANGES.txt?rev=1036939&r1=1036938&r2=1036939&view=diff
==============================================================================
--- cassandra/branches/cassandra-0.6/CHANGES.txt (original)
+++ cassandra/branches/cassandra-0.6/CHANGES.txt Fri Nov 19 16:57:45 2010
@@ -4,7 +4,9 @@
  * reject range queries received during bootstrap (CASSANDRA-1739)
  * fix wrapping-range queries on non-minimum token (CASSANDRA-1700)
  * add nodetool cfhistogram (CASSANDRA-1698)
- * limit repaired ranges to what the nodes have in common (CASSAHDRA-1674)
+ * limit repaired ranges to what the nodes have in common (CASSANDRA-1674)
+ * Fix misuse of DataOutputBuffer.getData in AntiEntropyService
+   (CASSANDRA-1729)
 
 
 0.6.8

Modified: cassandra/branches/cassandra-0.6/src/java/org/apache/cassandra/service/AntiEntropyService.java
URL: http://svn.apache.org/viewvc/cassandra/branches/cassandra-0.6/src/java/org/apache/cassandra/service/AntiEntropyService.java?rev=1036939&r1=1036938&r2=1036939&view=diff
==============================================================================
--- cassandra/branches/cassandra-0.6/src/java/org/apache/cassandra/service/AntiEntropyService.java (original)
+++ cassandra/branches/cassandra-0.6/src/java/org/apache/cassandra/service/AntiEntropyService.java Fri Nov 19 16:57:45 2010
@@ -20,6 +20,7 @@ package org.apache.cassandra.service;
 
 import java.io.*;
 import java.net.InetAddress;
+import java.security.MessageDigest;
 import java.util.*;
 import java.util.concurrent.*;
 
@@ -361,8 +362,10 @@ public class AntiEntropyService
         {
             validated++;
             // MerkleTree uses XOR internally, so we want lots of output bits here
-            byte[] rowhash = FBUtilities.hash("SHA-256", row.key.key.getBytes(), row.buffer.getData());
-            return new MerkleTree.RowHash(row.key.token, rowhash);
+            MessageDigest messageDigest = FBUtilities.createDigest("SHA-256");
+            messageDigest.update(row.key.key.getBytes());
+            messageDigest.update(row.buffer.getData(), 0, row.buffer.getLength());
+            return new MerkleTree.RowHash(row.key.token, messageDigest.digest());
         }
 
         /**

Modified: cassandra/branches/cassandra-0.6/src/java/org/apache/cassandra/utils/FBUtilities.java
URL: http://svn.apache.org/viewvc/cassandra/branches/cassandra-0.6/src/java/org/apache/cassandra/utils/FBUtilities.java?rev=1036939&r1=1036938&r2=1036939&view=diff
==============================================================================
--- cassandra/branches/cassandra-0.6/src/java/org/apache/cassandra/utils/FBUtilities.java (original)
+++ cassandra/branches/cassandra-0.6/src/java/org/apache/cassandra/utils/FBUtilities.java Fri Nov 19 16:57:45 2010
@@ -233,22 +233,22 @@ public class FBUtilities
         return hash.abs();        
     }
 
-    public static byte[] hash(String type, byte[]... data)
+    public static byte[] hash(String type, byte[] data)
     {
-    	byte[] result = null;
-    	try
+        return createDigest(type).digest(data);
+    }
+
+    public static MessageDigest createDigest(String type)
+    {
+        try
         {
-            MessageDigest messageDigest = MessageDigest.getInstance(type);
-            for(byte[] block : data)
-                messageDigest.update(block);
-            result = messageDigest.digest();
-    	}
-    	catch (Exception e)
+            return MessageDigest.getInstance(type);
+        }
+        catch (Exception e)
         {
             throw new RuntimeException(e);
-    	}
-    	return result;
-	}
+        }
+    }
 
     // The given byte array is compressed onto the specified stream.
     // The method does not close the stream. The caller will have to do it.