Class NetworkTopologyImpl
- All Implemented Interfaces:
NetworkTopology
-
Nested Class Summary
Nested ClassesModifier and TypeClassDescription(package private) static classInnerNode represents a switch/router of a data center or rack.static classA marker for an InvalidTopology Exception. -
Field Summary
FieldsModifier and TypeFieldDescription(package private) NetworkTopologyImpl.InnerNodeThe root cluster map.static final intstatic final Stringstatic final org.slf4j.Loggerprotected ReadWriteLockThe lock used to manage access.static final Stringprotected intRack counter.Fields inherited from interface org.apache.bookkeeper.net.NetworkTopology
DEFAULT_RACK, DEFAULT_REGION, DEFAULT_REGION_AND_RACK, DEFAULT_UPGRADEDOMAIN, DEFAULT_ZONE, DEFAULT_ZONE_AND_UPGRADEDOMAIN -
Constructor Summary
Constructors -
Method Summary
Modifier and TypeMethodDescriptionvoidAdd a leaf node.chooseRandom(String scope) Randomly choose one node from scope.booleanCheck if the tree contains node node.intcountNumOfAvailableNodes(String scope, Collection<Node> excludedNodes) Return the number of leaves in scope but not in excludedNodes.getDatanodesInRack(String loc) Given a string representation of a rack, return its children.intgetDistance(Node node1, Node node2) Return the distance between two nodes.static StringgetFirstHalf(String networkLocation) Divide networklocation string into two parts by last separator, and get the first part here.static StringgetLastHalf(String networkLocation) Divide networklocation string into two parts by last separator, and get the second part here.Returns the nodes under a location.Given a string representation of a node, return its reference.protected NodeReturn a reference to the node given its string representation.intintReturns number of racks in the network topology.Given a string representation of a rack for a specific network location.booleanCheck if network topology is aware of NodeGroup.booleanisOnSameNodeGroup(Node node1, Node node2) Return false directly as not aware of NodeGroup, to be override in sub-class.booleanisOnSameRack(Node node1, Node node2) Check if two nodes are on the same rack.protected booleanisSameParents(Node node1, Node node2) Compare the parents of each node for equality.voidpseudoSortByDistance(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.voidRemove a node.protected static voidSwap two array items.toString()Convert a network tree to a string.
-
Field Details
-
DEFAULT_HOST_LEVEL
public static final int DEFAULT_HOST_LEVEL- See Also:
-
LOG
public static final org.slf4j.Logger LOG -
NODE_SEPARATOR
- See Also:
-
INVERSE
- See Also:
-
clusterMap
NetworkTopologyImpl.InnerNode clusterMapThe root cluster map. -
numOfRacks
protected int numOfRacksRack counter. -
netlock
The lock used to manage access.
-
-
Constructor Details
-
NetworkTopologyImpl
public NetworkTopologyImpl()
-
-
Method Details
-
add
Add a leaf node. Update node counter and rack counter if necessary- Specified by:
addin interfaceNetworkTopology- Parameters:
node- node to be added; can be null- Throws:
IllegalArgumentException- if add a node to a leave or node to be added is not a leaf
-
getNodeForNetworkLocation
Return a reference to the node given its string representation. Default implementation delegates togetNode(String).To be overridden in subclasses for specific NetworkTopology implementations, as alternative to overriding the full
add(Node)method.- Parameters:
node- The string representation of this node's network location is used to retrieve a Node object.- Returns:
- a reference to the node; null if the node is not in the tree
- See Also:
-
getDatanodesInRack
Given a string representation of a rack, return its children.- Parameters:
loc- a path-like string representation of a rack- Returns:
- a newly allocated list with all the node's children
-
remove
Remove a node. Update node counter and rack counter if necessary.- Specified by:
removein interfaceNetworkTopology- Parameters:
node- node to be removed; can be null
-
contains
Check if the tree contains node node.- Specified by:
containsin interfaceNetworkTopology- Parameters:
node- a node- Returns:
- true if node is already in the tree; false otherwise
-
getNode
Given a string representation of a node, return its reference.- Specified by:
getNodein interfaceNetworkTopology- 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
-
getRack
Given a string representation of a rack for a specific network location.To be overridden in subclasses for specific NetworkTopology implementations, as alternative to overriding the full
getRack(String)method.- Parameters:
loc- a path-like string representation of a network location- Returns:
- a rack string
-
getNumOfRacks
public int getNumOfRacks()Description copied from interface:NetworkTopologyReturns number of racks in the network topology.- Specified by:
getNumOfRacksin interfaceNetworkTopology- Returns:
- the total number of racks
-
getNumOfLeaves
public int getNumOfLeaves()- Returns:
- the total number of leaf nodes
-
getDistance
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 nodenode2- another node- Returns:
- the distance between node1 and node2 which is zero if they are the same
or
Integer.MAX_VALUEif node1 or node2 do not belong to the cluster
-
isOnSameRack
Check if two nodes are on the same rack.- Parameters:
node1- one node (can be null)node2- another node (can be null)- Returns:
- true if node1 and node2 are on the same rack; false otherwise
- Throws:
IllegalArgumentException- when either node1 or node2 is null, or node1 or node2 do not belong to the cluster
-
isNodeGroupAware
public boolean isNodeGroupAware()Check if network topology is aware of NodeGroup. -
isOnSameNodeGroup
Return false directly as not aware of NodeGroup, to be override in sub-class. -
isSameParents
Compare the parents of each node for equality.To be overridden in subclasses for specific NetworkTopology implementations, as alternative to overriding the full
isOnSameRack(Node, Node)method.- Parameters:
node1- the first node to comparenode2- the second node to compare- Returns:
- true if their parents are equal, false otherwise
- See Also:
-
chooseRandom
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 chosen- Returns:
- the chosen node
-
getLeaves
Description copied from interface:NetworkTopologyReturns the nodes under a location.- Specified by:
getLeavesin interfaceNetworkTopology- Parameters:
scope- network location- Returns:
- nodes under a location
-
countNumOfAvailableNodes
Description copied from interface:NetworkTopologyReturn 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;
- Specified by:
countNumOfAvailableNodesin interfaceNetworkTopology- Parameters:
scope- a path string that may start with ~excludedNodes- a list of nodes- Returns:
- number of available nodes
-
toString
Convert a network tree to a string. -
getFirstHalf
Divide networklocation string into two parts by last separator, and get the first part here.- Parameters:
networkLocation-- Returns:
-
getLastHalf
Divide networklocation string into two parts by last separator, and get the second part here.- Parameters:
networkLocation-- Returns:
-
swap
Swap two array items. -
pseudoSortByDistance
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 position 0. It leaves the rest nodes untouched.- Parameters:
reader- the node that wishes to read a block from one of the nodesnodes- the list of nodes containing data for the reader
-