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
This commit is contained in:
parent
0cb2fdc3b4
commit
cb7c15cd37
|
@ -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
|
||||
|
|
|
@ -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,17 +54,27 @@ public class ClientId {
|
|||
}
|
||||
// otherwise should be 16 bytes
|
||||
Preconditions.checkArgument(clientId.length == BYTE_LENGTH);
|
||||
long msb = 0;
|
||||
long lsb = 0;
|
||||
for (int i = 0; i < 8; i++) {
|
||||
msb = (msb << 8) | (clientId[i] & 0xff);
|
||||
}
|
||||
for (int i = 8; i < 16; i++) {
|
||||
lsb = (lsb << 8) | (clientId[i] & 0xff);
|
||||
}
|
||||
long msb = getMsb(clientId);
|
||||
long lsb = getLsb(clientId);
|
||||
return (new UUID(msb, lsb)).toString();
|
||||
}
|
||||
|
||||
public static long getMsb(byte[] clientId) {
|
||||
long msb = 0;
|
||||
for (int i = 0; i < BYTE_LENGTH/2; i++) {
|
||||
msb = (msb << shiftWidth) | (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 lsb;
|
||||
}
|
||||
|
||||
/** Convert from clientId string byte[] representation of clientId */
|
||||
public static byte[] toBytes(String id) {
|
||||
if (id == null || "".equals(id)) {
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue