org.apache.hadoop.net
Class NetworkTopology

java.lang.Object
  extended by org.apache.hadoop.net.NetworkTopology

public class NetworkTopology
extends Object

The class represents a cluster of computer with a tree hierarchical network topology. For example, a cluster may be consists of many data centers filled with racks of computers. In a network topology, leaves represent data nodes (computers) and inner nodes represent switches/routers that manage traffic in/out of data centers or racks.


Field Summary
static int DEFAULT_HOST_LEVEL
           
static String DEFAULT_RACK
           
static org.apache.commons.logging.Log LOG
           
 
Constructor Summary
NetworkTopology()
           
 
Method Summary
 void add(Node node)
          Add a leaf node Update node counter & rack counter if neccessary
 Node chooseRandom(String scope)
          randomly choose one node from scope if scope starts with ~, choose one from the all nodes except for the ones in scope; otherwise, choose one from scope
 boolean contains(Node node)
          Check if the tree contains node node
 int countNumOfAvailableNodes(String scope, List<Node> excludedNodes)
          return the number of leaves in scope but not in excludedNodes if scope starts with ~, return the number of nodes that are not in scope and excludedNodes;
 int getDistance(Node node1, Node node2)
          Return the distance between two nodes It is assumed that the distance from one node to its parent is 1 The distance between two nodes is calculated by summing up their distances to their closest common ancestor.
 Node getNode(String loc)
          Given a string representation of a node, return its reference
 int getNumOfLeaves()
          Return the total number of nodes
 int getNumOfRacks()
          Return the total number of racks
 boolean isOnSameRack(Node node1, Node node2)
          Check if two nodes are on the same rack
 void pseudoSortByDistance(Node reader, Node[] nodes)
          Sort nodes array by their distances to reader It linearly scans the array, if a local node is found, swap it with the first element of the array.
 void remove(Node node)
          Remove a node Update node counter & rack counter if neccessary
 String toString()
          convert a network tree to a string
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait
 

Field Detail

DEFAULT_RACK

public static final String DEFAULT_RACK
See Also:
Constant Field Values

DEFAULT_HOST_LEVEL

public static final int DEFAULT_HOST_LEVEL
See Also:
Constant Field Values

LOG

public static final org.apache.commons.logging.Log LOG
Constructor Detail

NetworkTopology

public NetworkTopology()
Method Detail

add

public void add(Node node)
Add a leaf node Update node counter & rack counter if neccessary

Parameters:
node - node to be added
Throws:
IllegalArgumentException - if add a node to a leave or node to be added is not a leaf

remove

public void remove(Node node)
Remove a node Update node counter & rack counter if neccessary

Parameters:
node - node to be removed

contains

public boolean contains(Node node)
Check if the tree contains node node

Parameters:
node - a node
Returns:
true if node is already in the tree; false otherwise

getNode

public Node getNode(String loc)
Given a string representation of a node, return its reference

Parameters:
loc - a path-like string representation of a node
Returns:
a reference to the node; null if the node is not in the tree

getNumOfRacks

public int getNumOfRacks()
Return the total number of racks


getNumOfLeaves

public int getNumOfLeaves()
Return the total number of nodes


getDistance

public int getDistance(Node node1,
                       Node node2)
Return the distance between two nodes It is assumed that the distance from one node to its parent is 1 The distance between two nodes is calculated by summing up their distances to their closest common ancestor.

Parameters:
node1 - one node
node2 - another node
Returns:
the distance between node1 and node2 node1 or node2 do not belong to the cluster

isOnSameRack

public boolean isOnSameRack(Node node1,
                            Node node2)
Check if two nodes are on the same rack

Parameters:
node1 - one node
node2 - another node
Returns:
true if node1 and node2 are pm the same rack; false otherwise
Throws:
IllegalArgumentException - when either node1 or node2 is null, or node1 or node2 do not belong to the cluster

chooseRandom

public Node chooseRandom(String scope)
randomly choose one node from scope if scope starts with ~, choose one from the all nodes except for the ones in scope; otherwise, choose one from scope

Parameters:
scope - range of nodes from which a node will be choosen
Returns:
the choosen node

countNumOfAvailableNodes

public int countNumOfAvailableNodes(String scope,
                                    List<Node> excludedNodes)
return the number of leaves in scope but not in excludedNodes if scope starts with ~, return the number of nodes that are not in scope and excludedNodes;

Parameters:
scope - a path string that may start with ~
excludedNodes - a list of nodes
Returns:
number of available nodes

toString

public String toString()
convert a network tree to a string

Overrides:
toString in class Object

pseudoSortByDistance

public void pseudoSortByDistance(Node reader,
                                 Node[] nodes)
Sort nodes array by their distances to reader It linearly scans the array, if a local node is found, swap it with the first element of the array. If a local rack node is found, swap it with the first element following the local node. If neither local node or local rack node is found, put a random replica location at postion 0. It leaves the rest nodes untouched.



Copyright © 2009 The Apache Software Foundation