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()));
}
/*