private DatanodeDescriptor select( DatanodeDescriptor a, DatanodeDescriptor b) { if (a != null && b != null){ int ret = compareDataNode(a, b); if (ret == 0) { return a; } else if (ret < 0) { return (RAND.nextInt(100) < balancedPreference) ? a : b; } else { return (RAND.nextInt(100) < balancedPreference) ? b : a; } } else { return a == null ? b : a; } }
@Override protected DatanodeDescriptor chooseDataNode(final String scope, final Collection<Node> excludedNode, StorageType type) { // only the code that uses DFSNetworkTopology should trigger this code path. Preconditions.checkArgument(clusterMap instanceof DFSNetworkTopology); DFSNetworkTopology dfsClusterMap = (DFSNetworkTopology)clusterMap; DatanodeDescriptor a = (DatanodeDescriptor) dfsClusterMap .chooseRandomWithStorageType(scope, excludedNode, type); DatanodeDescriptor b = (DatanodeDescriptor) dfsClusterMap .chooseRandomWithStorageType(scope, excludedNode, type); return select(a, b); }
@Test public void testChooseDataNode() { try { Collection<Node> allNodes = new ArrayList<>(dataNodes.length); Collections.addAll(allNodes, dataNodes); if (placementPolicy instanceof AvailableSpaceBlockPlacementPolicy){ // exclude all datanodes when chooseDataNode, no NPE should be thrown ((AvailableSpaceBlockPlacementPolicy)placementPolicy) .chooseDataNode("~"); } }catch (NullPointerException npe){ Assert.fail("NPE should not be thrown"); } }
@Override protected DatanodeDescriptor chooseDataNode(String scope) { DatanodeDescriptor a = (DatanodeDescriptor) clusterMap.chooseRandom(scope); DatanodeDescriptor b = (DatanodeDescriptor) clusterMap.chooseRandom(scope); if (a != null && b != null){ int ret = compareDataNode(a, b); if (ret == 0) { return a; } else if (ret < 0) { return (RAND.nextInt(100) < balancedPreference) ? a : b; } else { return (RAND.nextInt(100) < balancedPreference) ? b : a; } } else { return a == null ? b : a; } }
@Override protected DatanodeDescriptor chooseDataNode(final String scope, final Collection<Node> excludedNode) { DatanodeDescriptor a = (DatanodeDescriptor) clusterMap.chooseRandom(scope, excludedNode); DatanodeDescriptor b = (DatanodeDescriptor) clusterMap.chooseRandom(scope, excludedNode); return select(a, b); }
@Override protected DatanodeDescriptor chooseDataNode(String scope) { DatanodeDescriptor a = (DatanodeDescriptor) clusterMap.chooseRandom(scope); DatanodeDescriptor b = (DatanodeDescriptor) clusterMap.chooseRandom(scope); if (a != null && b != null){ int ret = compareDataNode(a, b); if (ret == 0) { return a; } else if (ret < 0) { return (RAND.nextInt(100) < balancedPreference) ? a : b; } else { return (RAND.nextInt(100) < balancedPreference) ? b : a; } } else { return a == null ? b : a; } }