availableNodes = countNumOfAvailableNodes(scope, excludedNodes); } else { availableNodes = countNumOfAvailableNodes("~" + excludedScope, excludedNodes);
private DatanodeDescriptor[] chooseRandom(int numOfReplicas, String nodes, List<Node> excludedNodes) { List<DatanodeDescriptor> results = new ArrayList<DatanodeDescriptor>(); int numOfAvailableNodes = clusterMap.countNumOfAvailableNodes(nodes, excludedNodes); numOfReplicas = (numOfAvailableNodes<numOfReplicas)? numOfAvailableNodes:numOfReplicas; while(numOfReplicas > 0) { DatanodeDescriptor choosenNode = (DatanodeDescriptor)(clusterMap.chooseRandom(nodes)); if (!excludedNodes.contains(choosenNode)) { results.add(choosenNode); excludedNodes.add(choosenNode); numOfReplicas--; } } return (DatanodeDescriptor[])results.toArray( new DatanodeDescriptor[results.size()]); }
private DatanodeDescriptor chooseRandom( String nodes, HashMap<Node, Node> excludedNodes, long blocksize, int maxNodesPerRack, List<DatanodeDescriptor> results) throws NotEnoughReplicasException { int numOfAvailableNodes = clusterMap.countNumOfAvailableNodes(nodes, excludedNodes.keySet()); while(numOfAvailableNodes > 0) { DatanodeDescriptor chosenNode = (DatanodeDescriptor)(clusterMap.chooseRandom(nodes)); Node oldNode = excludedNodes.put(chosenNode, chosenNode); if (oldNode == null) { // choosendNode was not in the excluded list numOfAvailableNodes--; if (isGoodTarget(chosenNode, blocksize, maxNodesPerRack, results)) { results.add(chosenNode); return chosenNode; } } } throw new NotEnoughReplicasException( "Not able to place enough replicas"); }
void chooseRandom(int numOfReplicas, String nodes, HashMap<Node, Node> excludedNodes, long blocksize, int maxNodesPerRack, List<DatanodeDescriptor> results) throws NotEnoughReplicasException { int numOfAvailableNodes = clusterMap.countNumOfAvailableNodes(nodes, excludedNodes.keySet()); int numAttempts = numOfAvailableNodes * this.attemptMultiplier; while(numOfReplicas > 0 && numOfAvailableNodes > 0 && --numAttempts > 0) { DatanodeDescriptor chosenNode = (DatanodeDescriptor)(clusterMap.chooseRandom(nodes)); Node oldNode = excludedNodes.put(chosenNode, chosenNode); if (oldNode == null) { numOfAvailableNodes--; if (isGoodTarget(chosenNode, blocksize, maxNodesPerRack, results)) { numOfReplicas--; results.add(chosenNode); } } } if (numOfReplicas>0) { throw new NotEnoughReplicasException( "Not able to place enough replicas"); } }
throws NotEnoughReplicasException { int numOfAvailableNodes = clusterMap.countNumOfAvailableNodes( scope, excludedNodes); int refreshCounter = numOfAvailableNodes; numOfAvailableNodes = clusterMap.countNumOfAvailableNodes(scope, excludedNodes); refreshCounter = numOfAvailableNodes;
throws NotEnoughReplicasException { int numOfAvailableNodes = clusterMap.countNumOfAvailableNodes( scope, excludedNodes); int refreshCounter = numOfAvailableNodes; numOfAvailableNodes = clusterMap.countNumOfAvailableNodes(scope, excludedNodes); refreshCounter = numOfAvailableNodes;
cluster.countNumOfAvailableNodes(NodeBase.ROOT, excludedNodes)); NodeElement deadNode = getNewNode("node5", "/d1/r2"); excludedNodes.add(deadNode); assertEquals("4 nodes should be available with extra excluded Node", 4, cluster.countNumOfAvailableNodes(NodeBase.ROOT, excludedNodes)); cluster.countNumOfAvailableNodes(NodeBase.ROOT, excludedNodes)); assertEquals("excluded nodes without ~ scope should be considered", 2, cluster.countNumOfAvailableNodes("~" + deadNode.getNetworkLocation(), excludedNodes)); assertEquals("excluded nodes with rack scope should be considered", 1, cluster.countNumOfAvailableNodes(deadNode.getNetworkLocation(), excludedNodes)); cluster.countNumOfAvailableNodes("~" + deadNode.getNetworkLocation(), excludedNodes)); cluster.countNumOfAvailableNodes("/non-exist", excludedNodes));
cluster.countNumOfAvailableNodes(NodeBase.ROOT, excludedNodes)); NodeElement deadNode = getNewNode("node5", "/d1/r2"); excludedNodes.add(deadNode); assertEquals("4 nodes should be available with extra excluded Node", 4, cluster.countNumOfAvailableNodes(NodeBase.ROOT, excludedNodes)); cluster.countNumOfAvailableNodes(NodeBase.ROOT, excludedNodes)); assertEquals("excluded nodes without ~ scope should be considered", 2, cluster.countNumOfAvailableNodes("~" + deadNode.getNetworkLocation(), excludedNodes)); assertEquals("excluded nodes with rack scope should be considered", 1, cluster.countNumOfAvailableNodes(deadNode.getNetworkLocation(), excludedNodes)); cluster.countNumOfAvailableNodes("~" + deadNode.getNetworkLocation(), excludedNodes)); cluster.countNumOfAvailableNodes("/non-exist", excludedNodes));