Author: szetszwo
Date: Thu Jul 5 01:31:57 2012
New Revision: 1357442
URL: http://svn.apache.org/viewvc?rev=1357442&view=rev
Log:
HDFS-3601. Add BlockPlacementPolicyWithNodeGroup to support block placement
with 4-layer network topology. Contributed by Junping Du
Modified:
hadoop/common/trunk/hadoop-common-project/hadoop-common/src/main/java/org/apache/hadoop/net/NetworkTopology.java
hadoop/common/trunk/hadoop-common-project/hadoop-common/src/main/java/org/apache/hadoop/net/NetworkTopologyWithNodeGroup.java
Modified:
hadoop/common/trunk/hadoop-common-project/hadoop-common/src/main/java/org/apache/hadoop/net/NetworkTopology.java
URL:
http://svn.apache.org/viewvc/hadoop/common/trunk/hadoop-common-project/hadoop-common/src/main/java/org/apache/hadoop/net/NetworkTopology.java?rev=1357442&r1=1357441&r2=1357442&view=diff
==============================================================================
---
hadoop/common/trunk/hadoop-common-project/hadoop-common/src/main/java/org/apache/hadoop/net/NetworkTopology.java
(original)
+++
hadoop/common/trunk/hadoop-common-project/hadoop-common/src/main/java/org/apache/hadoop/net/NetworkTopology.java
Thu Jul 5 01:31:57 2012
@@ -170,8 +170,7 @@ public class NetworkTopology {
}
if (parentNode == null) {
// create a new InnerNode
- parentNode = new InnerNode(parentName, getPath(this),
- this, this.getLevel()+1);
+ parentNode = createParentNode(parentName);
children.add(parentNode);
}
// add n to the subtree of the next ancestor node
@@ -288,7 +287,7 @@ public class NetworkTopology {
// calculate the total number of excluded leaf nodes
int numOfExcludedLeaves =
isLeaf ? 1 : ((InnerNode)excludedNode).getNumOfLeaves();
- if (isRack()) { // children are leaves
+ if (isLeafParent()) { // children are leaves
if (isLeaf) { // excluded node is a leaf node
int excludedIndex = children.indexOf(excludedNode);
if (excludedIndex != -1 && leafIndex >= 0) {
@@ -326,6 +325,10 @@ public class NetworkTopology {
}
}
+ protected boolean isLeafParent() {
+ return isRack();
+ }
+
/**
* Determine if children a leaves, default implementation calls {@link
#isRack()}
* <p>To be overridden in subclasses for specific InnerNode
implementations,
@@ -752,6 +755,30 @@ public class NetworkTopology {
}
return tree.toString();
}
+
+ /**
+ * Divide networklocation string into two parts by last separator, and get
+ * the first part here.
+ *
+ * @param networkLocation
+ * @return
+ */
+ public static String getFirstHalf(String networkLocation) {
+ int index = networkLocation.lastIndexOf(NodeBase.PATH_SEPARATOR_STR);
+ return networkLocation.substring(0, index);
+ }
+
+ /**
+ * Divide networklocation string into two parts by last separator, and get
+ * the second part here.
+ *
+ * @param networkLocation
+ * @return
+ */
+ public static String getLastHalf(String networkLocation) {
+ int index = networkLocation.lastIndexOf(NodeBase.PATH_SEPARATOR_STR);
+ return networkLocation.substring(index);
+ }
/** swap two array items */
static protected void swap(Node[] nodes, int i, int j) {
Modified:
hadoop/common/trunk/hadoop-common-project/hadoop-common/src/main/java/org/apache/hadoop/net/NetworkTopologyWithNodeGroup.java
URL:
http://svn.apache.org/viewvc/hadoop/common/trunk/hadoop-common-project/hadoop-common/src/main/java/org/apache/hadoop/net/NetworkTopologyWithNodeGroup.java?rev=1357442&r1=1357441&r2=1357442&view=diff
==============================================================================
---
hadoop/common/trunk/hadoop-common-project/hadoop-common/src/main/java/org/apache/hadoop/net/NetworkTopologyWithNodeGroup.java
(original)
+++
hadoop/common/trunk/hadoop-common-project/hadoop-common/src/main/java/org/apache/hadoop/net/NetworkTopologyWithNodeGroup.java
Thu Jul 5 01:31:57 2012
@@ -49,7 +49,7 @@ public class NetworkTopologyWithNodeGrou
}
Node nodeGroup = getNode(node.getNetworkLocation());
if (nodeGroup == null) {
- nodeGroup = new InnerNode(node.getNetworkLocation());
+ nodeGroup = new InnerNodeWithNodeGroup(node.getNetworkLocation());
}
return getNode(nodeGroup.getNetworkLocation());
}
@@ -383,6 +383,11 @@ public class NetworkTopologyWithNodeGrou
}
return true;
}
+
+ @Override
+ protected boolean isLeafParent() {
+ return isNodeGroup();
+ }
@Override
protected InnerNode createParentNode(String parentName) {