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) {