You are viewing a plain text version of this content. The canonical link for it is here.
Posted to common-commits@hadoop.apache.org by ki...@apache.org on 2015/01/15 23:45:22 UTC
hadoop git commit: HDFS-7457. DatanodeID generates excessive garbage.
Contributed by Daryn Sharp. (cherry picked from commit
780a6bf14562fd9d1070a7c8e756fa1c3bc65d32)
Repository: hadoop
Updated Branches:
refs/heads/branch-2 0090157ff -> 6f792fc19
HDFS-7457. DatanodeID generates excessive garbage. Contributed by Daryn Sharp.
(cherry picked from commit 780a6bf14562fd9d1070a7c8e756fa1c3bc65d32)
Project: http://git-wip-us.apache.org/repos/asf/hadoop/repo
Commit: http://git-wip-us.apache.org/repos/asf/hadoop/commit/6f792fc1
Tree: http://git-wip-us.apache.org/repos/asf/hadoop/tree/6f792fc1
Diff: http://git-wip-us.apache.org/repos/asf/hadoop/diff/6f792fc1
Branch: refs/heads/branch-2
Commit: 6f792fc198131136f34b5f339a1271713871e616
Parents: 0090157
Author: Kihwal Lee <ki...@apache.org>
Authored: Thu Jan 15 16:45:06 2015 -0600
Committer: Kihwal Lee <ki...@apache.org>
Committed: Thu Jan 15 16:45:06 2015 -0600
----------------------------------------------------------------------
hadoop-hdfs-project/hadoop-hdfs/CHANGES.txt | 2 ++
.../apache/hadoop/hdfs/protocol/DatanodeID.java | 23 ++++++++++++++++++--
2 files changed, 23 insertions(+), 2 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/hadoop/blob/6f792fc1/hadoop-hdfs-project/hadoop-hdfs/CHANGES.txt
----------------------------------------------------------------------
diff --git a/hadoop-hdfs-project/hadoop-hdfs/CHANGES.txt b/hadoop-hdfs-project/hadoop-hdfs/CHANGES.txt
index 51c2c1f..5a2a2cd 100644
--- a/hadoop-hdfs-project/hadoop-hdfs/CHANGES.txt
+++ b/hadoop-hdfs-project/hadoop-hdfs/CHANGES.txt
@@ -245,6 +245,8 @@ Release 2.7.0 - UNRELEASED
particular namenode in a federated cluster with multiple namenodes
can be specified in the path parameter. (szetszwo)
+ HDFS-7457. DatanodeID generates excessive garbage. (daryn via kihwal)
+
OPTIMIZATIONS
HDFS-7454. Reduce memory footprint for AclEntries in NameNode.
http://git-wip-us.apache.org/repos/asf/hadoop/blob/6f792fc1/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/protocol/DatanodeID.java
----------------------------------------------------------------------
diff --git a/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/protocol/DatanodeID.java b/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/protocol/DatanodeID.java
index c781e5b..779e3b9 100644
--- a/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/protocol/DatanodeID.java
+++ b/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/protocol/DatanodeID.java
@@ -46,6 +46,8 @@ public class DatanodeID implements Comparable<DatanodeID> {
private int infoPort; // info server port
private int infoSecurePort; // info server port
private int ipcPort; // IPC server port
+ private String xferAddr;
+ private int hashCode = -1;
/**
* UUID identifying a given datanode. For upgraded Datanodes this is the
@@ -86,10 +88,12 @@ public class DatanodeID implements Comparable<DatanodeID> {
this.infoPort = infoPort;
this.infoSecurePort = infoSecurePort;
this.ipcPort = ipcPort;
+ updateXferAddrAndInvalidateHashCode();
}
public void setIpAddr(String ipAddr) {
this.ipAddr = ipAddr;
+ updateXferAddrAndInvalidateHashCode();
}
public void setPeerHostName(String peerHostName) {
@@ -106,6 +110,7 @@ public class DatanodeID implements Comparable<DatanodeID> {
@VisibleForTesting
public void setDatanodeUuidForTesting(String datanodeUuid) {
this.datanodeUuid = datanodeUuid;
+ updateXferAddrAndInvalidateHashCode();
}
private String checkDatanodeUuid(String uuid) {
@@ -141,7 +146,7 @@ public class DatanodeID implements Comparable<DatanodeID> {
* @return IP:xferPort string
*/
public String getXferAddr() {
- return ipAddr + ":" + xferPort;
+ return xferAddr;
}
/**
@@ -237,7 +242,11 @@ public class DatanodeID implements Comparable<DatanodeID> {
@Override
public int hashCode() {
- return getXferAddr().hashCode()^ datanodeUuid.hashCode();
+ if (hashCode == -1) {
+ int newHashCode = xferAddr.hashCode() ^ datanodeUuid.hashCode();
+ hashCode = newHashCode & Integer.MAX_VALUE;
+ }
+ return hashCode;
}
@Override
@@ -257,6 +266,7 @@ public class DatanodeID implements Comparable<DatanodeID> {
infoPort = nodeReg.getInfoPort();
infoSecurePort = nodeReg.getInfoSecurePort();
ipcPort = nodeReg.getIpcPort();
+ updateXferAddrAndInvalidateHashCode();
}
/**
@@ -269,4 +279,13 @@ public class DatanodeID implements Comparable<DatanodeID> {
public int compareTo(DatanodeID that) {
return getXferAddr().compareTo(that.getXferAddr());
}
+
+ // NOTE: mutable hash codes are dangerous, however this class chooses to
+ // use them. this method must be called when a value mutates that is used
+ // to compute the hash, equality, or comparison of instances.
+ private void updateXferAddrAndInvalidateHashCode() {
+ xferAddr = ipAddr + ":" + xferPort;
+ // can't compute new hash yet because uuid might still null...
+ hashCode = -1;
+ }
}