## org.apache.hadoop.net
Class NetworkTopology

    java.lang.Object
      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