Browse Source

HADOOP-9821. ClientId should have getMsb/getLsb methods. Contributed by Tsuyoshi OZAWA.

git-svn-id: https://svn.apache.org/repos/asf/hadoop/common/trunk@1511058 13f79535-47bb-0310-9956-ffa450edef68
Jing Zhao 11 years ago
parent
commit
cb7c15cd37

+ 3 - 0
hadoop-common-project/hadoop-common/CHANGES.txt

@@ -331,6 +331,9 @@ Release 2.1.1-beta - UNRELEASED
     HADOOP-9803. Add a generic type parameter to RetryInvocationHandler.
     (szetszwo)
 
+    HADOOP-9821. ClientId should have getMsb/getLsb methods. 
+    (Tsuyoshi OZAWA via jing9)
+
   OPTIMIZATIONS
 
   BUG FIXES

+ 17 - 6
hadoop-common-project/hadoop-common/src/main/java/org/apache/hadoop/ipc/ClientId.java

@@ -33,6 +33,7 @@ public class ClientId {
   
   /** The byte array of a UUID should be 16 */ 
   public static final int BYTE_LENGTH = 16;
+  private static final int shiftWidth = 8;
   
   /**
    * Return clientId as byte[]
@@ -53,15 +54,25 @@ public class ClientId {
     }
     // otherwise should be 16 bytes
     Preconditions.checkArgument(clientId.length == BYTE_LENGTH);
+    long msb = getMsb(clientId);
+    long lsb = getLsb(clientId);
+    return (new UUID(msb, lsb)).toString();
+  }
+  
+  public static long getMsb(byte[] clientId) {
     long msb = 0;
-    long lsb = 0;
-    for (int i = 0; i < 8; i++) {
-      msb = (msb << 8) | (clientId[i] & 0xff);
+    for (int i = 0; i < BYTE_LENGTH/2; i++) {
+      msb = (msb << shiftWidth) | (clientId[i] & 0xff);
     }
-    for (int i = 8; i < 16; i++) {
-      lsb = (lsb << 8) | (clientId[i] & 0xff);
+    return msb;
+  }
+  
+  public static long getLsb(byte[] clientId) {
+    long lsb = 0;
+    for (int i = BYTE_LENGTH/2; i < BYTE_LENGTH; i++) {
+      lsb = (lsb << shiftWidth) | (clientId[i] & 0xff);
     }
-    return (new UUID(msb, lsb)).toString();
+    return lsb;
   }
   
   /** Convert from clientId string byte[] representation of clientId */

+ 2 - 10
hadoop-common-project/hadoop-common/src/main/java/org/apache/hadoop/ipc/RetryCache.java

@@ -70,16 +70,8 @@ public class RetryCache {
           "Invalid clientId - length is " + clientId.length
               + " expected length " + ClientId.BYTE_LENGTH);
       // Convert UUID bytes to two longs
-      long tmp = 0;
-      for (int i=0; i<8; i++) {
-        tmp = (tmp << 8) | (clientId[i] & 0xff);
-      }
-      clientIdMsb = tmp;
-      tmp = 0;
-      for (int i=8; i<16; i++) {
-        tmp = (tmp << 8) | (clientId[i] & 0xff);
-      }
-      clientIdLsb = tmp;
+      clientIdMsb = ClientId.getMsb(clientId);
+      clientIdLsb = ClientId.getLsb(clientId);
       this.callId = callId;
       this.expirationTime = expirationTime;
     }