Return-Path: X-Original-To: apmail-cassandra-commits-archive@www.apache.org Delivered-To: apmail-cassandra-commits-archive@www.apache.org Received: from mail.apache.org (hermes.apache.org [140.211.11.3]) by minotaur.apache.org (Postfix) with SMTP id 4CCCE9175 for ; Sat, 28 Jan 2012 04:28:37 +0000 (UTC) Received: (qmail 77334 invoked by uid 500); 28 Jan 2012 04:28:37 -0000 Delivered-To: apmail-cassandra-commits-archive@cassandra.apache.org Received: (qmail 77168 invoked by uid 500); 28 Jan 2012 04:28:35 -0000 Mailing-List: contact commits-help@cassandra.apache.org; run by ezmlm Precedence: bulk List-Help: List-Unsubscribe: List-Post: List-Id: Reply-To: dev@cassandra.apache.org Delivered-To: mailing list commits@cassandra.apache.org Received: (qmail 77123 invoked by uid 99); 28 Jan 2012 04:28:33 -0000 Received: from athena.apache.org (HELO athena.apache.org) (140.211.11.136) by apache.org (qpsmtpd/0.29) with ESMTP; Sat, 28 Jan 2012 04:28:33 +0000 X-ASF-Spam-Status: No, hits=-2000.0 required=5.0 tests=ALL_TRUSTED X-Spam-Check-By: apache.org Received: from [140.211.11.114] (HELO tyr.zones.apache.org) (140.211.11.114) by apache.org (qpsmtpd/0.29) with ESMTP; Sat, 28 Jan 2012 04:28:31 +0000 Received: by tyr.zones.apache.org (Postfix, from userid 65534) id CE8DC320200; Sat, 28 Jan 2012 04:28:10 +0000 (UTC) Content-Type: text/plain; charset="us-ascii" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit From: jbellis@apache.org To: commits@cassandra.apache.org X-Mailer: ASF-Git Admin Mailer Subject: [4/5] git commit: eliminate dependency on FBUtilities Message-Id: <20120128042810.CE8DC320200@tyr.zones.apache.org> Date: Sat, 28 Jan 2012 04:28:10 +0000 (UTC) eliminate dependency on FBUtilities Patch by eevans; reviewed by Dave Brosius for CASSANDRA-3665 Project: http://git-wip-us.apache.org/repos/asf/cassandra/repo Commit: http://git-wip-us.apache.org/repos/asf/cassandra/commit/89ed0b6e Tree: http://git-wip-us.apache.org/repos/asf/cassandra/tree/89ed0b6e Diff: http://git-wip-us.apache.org/repos/asf/cassandra/diff/89ed0b6e Branch: refs/heads/trunk Commit: 89ed0b6ecdde8a7fd64f2139c02223ae4c040e8c Parents: 32075c4 Author: Eric Evans Authored: Thu Jan 26 16:04:11 2012 -0600 Committer: Eric Evans Committed: Fri Jan 27 13:53:07 2012 -0600 ---------------------------------------------------------------------- src/java/org/apache/cassandra/utils/UUIDGen.java | 39 ++++++++++++++++- 1 files changed, 37 insertions(+), 2 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/cassandra/blob/89ed0b6e/src/java/org/apache/cassandra/utils/UUIDGen.java ---------------------------------------------------------------------- diff --git a/src/java/org/apache/cassandra/utils/UUIDGen.java b/src/java/org/apache/cassandra/utils/UUIDGen.java index f1969fe..75828f0 100644 --- a/src/java/org/apache/cassandra/utils/UUIDGen.java +++ b/src/java/org/apache/cassandra/utils/UUIDGen.java @@ -23,6 +23,8 @@ package org.apache.cassandra.utils; import java.io.*; import java.net.InetAddress; import java.nio.ByteBuffer; +import java.security.MessageDigest; +import java.security.NoSuchAlgorithmException; import java.util.HashMap; import java.util.Map; import java.util.Random; @@ -42,7 +44,31 @@ public class UUIDGen private long lastNanos; private final Map nodeCache = new HashMap(); - + + private static final ThreadLocal localMD5Digest = new ThreadLocal() + { + @Override + protected MessageDigest initialValue() + { + try + { + return MessageDigest.getInstance("MD5"); + } + catch (NoSuchAlgorithmException nsae) + { + throw new RuntimeException("MD5 digest algorithm is not available", nsae); + } + } + + @Override + public MessageDigest get() + { + MessageDigest digest = super.get(); + digest.reset(); + return digest; + } + }; + private UUIDGen() { // make sure someone didn't whack the clock by changing the order of instantiation. @@ -195,7 +221,7 @@ public class UUIDGen return nodeCache.get(addr); // ideally, we'd use the MAC address, but java doesn't expose that. - byte[] hash = FBUtilities.hash(ByteBuffer.wrap(addr.toString().getBytes())); + byte[] hash = hash(addr.toString()); long node = 0; for (int i = 0; i < Math.min(6, hash.length); i++) node |= (0x00000000000000ff & (long)hash[i]) << (5-i)*8; @@ -205,6 +231,15 @@ public class UUIDGen return node; } + + private static byte[] hash(String... data) + { + MessageDigest messageDigest = localMD5Digest.get(); + for(String block : data) + messageDigest.update(block.getBytes()); + + return messageDigest.digest(); + } } // for the curious, here is how I generated START_EPOCH