Author: jbellis
Date: Thu Oct 20 16:36:36 2011
New Revision: 1186902
URL: http://svn.apache.org/viewvc?rev=1186902&view=rev
Log:
optimize UUIDGen to avoid lock contention on InetAddress.getLocalHost
patch by Yang Yang; reviewed by jbellis for CASSANDRA-3387
Modified:
cassandra/branches/cassandra-1.0/CHANGES.txt
cassandra/branches/cassandra-1.0/src/java/org/apache/cassandra/utils/UUIDGen.java
Modified: cassandra/branches/cassandra-1.0/CHANGES.txt
URL:
http://svn.apache.org/viewvc/cassandra/branches/cassandra-1.0/CHANGES.txt?rev=1186902&r1=1186901&r2=1186902&view=diff
==============================================================================
--- cassandra/branches/cassandra-1.0/CHANGES.txt (original)
+++ cassandra/branches/cassandra-1.0/CHANGES.txt Thu Oct 20 16:36:36 2011
@@ -43,6 +43,8 @@
* fix Deflate compression when compression actually makes the data bigger
(CASSANDRA-3370)
* avoid locking on update when no indexes are involved (CASSANDRA-3386)
+ * optimize UUIDGen to avoid lock contention on InetAddress.getLocalHost
+ (CASSANDRA-3387)
1.0.0-final
Modified:
cassandra/branches/cassandra-1.0/src/java/org/apache/cassandra/utils/UUIDGen.java
URL:
http://svn.apache.org/viewvc/cassandra/branches/cassandra-1.0/src/java/org/apache/cassandra/utils/UUIDGen.java?rev=1186902&r1=1186901&r2=1186902&view=diff
==============================================================================
---
cassandra/branches/cassandra-1.0/src/java/org/apache/cassandra/utils/UUIDGen.java
(original)
+++
cassandra/branches/cassandra-1.0/src/java/org/apache/cassandra/utils/UUIDGen.java
Thu Oct 20 16:36:36 2011
@@ -22,7 +22,6 @@ package org.apache.cassandra.utils;
import java.io.*;
import java.net.InetAddress;
-import java.net.UnknownHostException;
import java.nio.ByteBuffer;
import java.util.HashMap;
import java.util.Map;
@@ -123,7 +122,7 @@ public class UUIDGen
private static byte[] createTimeUUIDBytes(long msb)
{
- long lsb = instance.getClockSeqAndNode();
+ long lsb = instance.getClockSeqAndNode(FBUtilities.getLocalAddress());
byte[] uuidBytes = new byte[16];
for (int i = 0; i < 8; i++)
@@ -148,19 +147,7 @@ public class UUIDGen
throw new IllegalArgumentException("incompatible with uuid
version: "+uuid.version());
return (uuid.timestamp() / 10000) - START_EPOCH;
}
-
- private long getClockSeqAndNode()
- {
- try
- {
- return getClockSeqAndNode(InetAddress.getLocalHost());
- }
- catch (UnknownHostException e)
- {
- throw new RuntimeException(e);
- }
- }
-
+
// todo: could cache value if we assume node doesn't change.
private long getClockSeqAndNode(InetAddress addr)
{