You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cassandra.apache.org by br...@apache.org on 2011/01/18 22:34:04 UTC

svn commit: r1060587 - in /cassandra/branches/cassandra-0.7/src/java/org/apache/cassandra/utils: GuidGenerator.java SafeMessageDigest.java

Author: brandonwilliams
Date: Tue Jan 18 21:34:04 2011
New Revision: 1060587

URL: http://svn.apache.org/viewvc?rev=1060587&view=rev
Log:
Remove contention around MD5 generation in GuidGenerator.
Patch by brandonwilliams, reviewed by Pavel Yaskevich for CASSANDRA-1977

Removed:
    cassandra/branches/cassandra-0.7/src/java/org/apache/cassandra/utils/SafeMessageDigest.java
Modified:
    cassandra/branches/cassandra-0.7/src/java/org/apache/cassandra/utils/GuidGenerator.java

Modified: cassandra/branches/cassandra-0.7/src/java/org/apache/cassandra/utils/GuidGenerator.java
URL: http://svn.apache.org/viewvc/cassandra/branches/cassandra-0.7/src/java/org/apache/cassandra/utils/GuidGenerator.java?rev=1060587&r1=1060586&r2=1060587&view=diff
==============================================================================
--- cassandra/branches/cassandra-0.7/src/java/org/apache/cassandra/utils/GuidGenerator.java (original)
+++ cassandra/branches/cassandra-0.7/src/java/org/apache/cassandra/utils/GuidGenerator.java Tue Jan 18 21:34:04 2011
@@ -34,7 +34,21 @@ public class GuidGenerator {
     private static Random myRand;
     private static SecureRandom mySecureRand;
     private static String s_id;
-    private static SafeMessageDigest md5 = null;
+    private static final ThreadLocal<MessageDigest> localMessageDigest = new ThreadLocal<MessageDigest>()
+    {
+        @Override
+        protected MessageDigest initialValue()
+        {
+            try
+            {
+                return MessageDigest.getInstance("MD5");
+            }
+            catch (NoSuchAlgorithmException e)
+            {
+                throw new AssertionError(e);
+            }
+        }
+    };
 
     static {
         if (System.getProperty("java.security.egd") == null) {
@@ -49,17 +63,8 @@ public class GuidGenerator {
         catch (UnknownHostException e) {
             throw new AssertionError(e);
         }
-
-        try {
-            MessageDigest myMd5 = MessageDigest.getInstance("MD5");
-            md5 = new SafeMessageDigest(myMd5);
-        }
-        catch (NoSuchAlgorithmException e) {
-            throw new AssertionError(e);
-        }
     }
 
-
     public static String guid() {
         ByteBuffer array = guidAsBytes();
         
@@ -99,7 +104,8 @@ public class GuidGenerator {
         				.append(Long.toString(rand));
 
         String valueBeforeMD5 = sbValueBeforeMD5.toString();
-        return ByteBuffer.wrap(md5.digest(valueBeforeMD5.getBytes()));
+        localMessageDigest.get().reset();
+        return ByteBuffer.wrap(localMessageDigest.get().digest(valueBeforeMD5.getBytes()));
     }
 
     /*