/** * Determine if a datanode should be chosen based on current workload. * * @param node The target datanode * @return Return true if the datanode should be excluded, otherwise false */ boolean excludeNodeByLoad(DatanodeDescriptor node){ final double maxLoad = considerLoadFactor * stats.getInServiceXceiverAverage(); final int nodeLoad = node.getXceiverCount(); if ((nodeLoad > maxLoad) && (maxLoad > 0)) { logNodeIsNotChosen(node, NodeNotChosenReason.NODE_TOO_BUSY, "(load: " + nodeLoad + " > " + maxLoad + ")"); return true; } return false; }
Node localNode = null; boolean avoidStaleNodes = (stats != null && stats.isAvoidingStaleDataNodesForWrite()); boolean avoidLocalNode = (addBlockFlags != null && addBlockFlags.contains(AddBlockFlag.NO_LOCAL_WRITE)
private static int getNumDNInService(FSNamesystem fsn) { return fsn.getBlockManager().getDatanodeManager().getFSClusterStats() .getNumDatanodesInService(); }
private static double getInServiceXceiverAverage(FSNamesystem fsn) { return fsn.getBlockManager().getDatanodeManager().getFSClusterStats() .getInServiceXceiverAverage(); }
.getInServiceXceiverAverage(), EPSILON); .getInServiceXceiverAverage(), EPSILON);
&& stats.isAvoidingStaleDataNodesForWrite()); final Node localNode = chooseTarget(numOfReplicas, writer, excludedNodes, blocksize, maxNodesPerRack, results, avoidStaleNodes, storagePolicy,
final double maxLoad = 2.0 * stats.getInServiceXceiverAverage(); final int nodeLoad = node.getXceiverCount(); if (nodeLoad > maxLoad) {
&& stats.isAvoidingStaleDataNodesForWrite()); final Node localNode = chooseTarget(numOfReplicas, writer, excludedNodes, blocksize, maxNodesPerRack, results, avoidStaleNodes, storagePolicy,
final double maxLoad = 2.0 * stats.getInServiceXceiverAverage(); final int nodeLoad = node.getXceiverCount(); if (nodeLoad > maxLoad) {