@Override boolean useDelHint(DatanodeStorageInfo delHint, DatanodeStorageInfo added, List<DatanodeStorageInfo> moreThanOne, Collection<DatanodeStorageInfo> exactlyOne, List<StorageType> excessTypes) { if (!super.useDelHint(delHint, added, moreThanOne, exactlyOne, excessTypes)) { // If BlockPlacementPolicyDefault doesn't allow useDelHint, there is no // point checking with upgrade domain policy. return false; } return isMovableBasedOnUpgradeDomain(combine(moreThanOne, exactlyOne), delHint, added); }
if (firstOne && useDelHint(delNodeHintStorage, addedNodeStorage, moreThanOne, exactlyOne, excessTypes)) { cur = delNodeHintStorage;
if (useDelHint(firstOne, delNodeHintStorage, addedNodeStorage, moreThanOne, excessTypes)) { cur = delNodeHintStorage;
if (useDelHint(firstOne, delNodeHintStorage, addedNodeStorage, moreThanOne, excessTypes)) { cur = delNodeHintStorage;
@Test public void testUseDelHint() throws Exception { List<StorageType> excessTypes = new ArrayList<StorageType>(); excessTypes.add(StorageType.ARCHIVE); // only consider delHint for the first case assertFalse(BlockPlacementPolicyDefault.useDelHint(false, null, null, null, null)); // no delHint assertFalse(BlockPlacementPolicyDefault.useDelHint(true, null, null, null, null)); // delHint storage type is not an excess type assertFalse(BlockPlacementPolicyDefault.useDelHint(true, storages[0], null, null, excessTypes)); // check if removing delHint reduces the number of racks List<DatanodeStorageInfo> chosenNodes = new ArrayList<DatanodeStorageInfo>(); chosenNodes.add(storages[0]); chosenNodes.add(storages[2]); excessTypes.add(StorageType.DEFAULT); assertTrue(BlockPlacementPolicyDefault.useDelHint(true, storages[0], null, chosenNodes, excessTypes)); // the added node adds a new rack assertTrue(BlockPlacementPolicyDefault.useDelHint(true, storages[3], storages[5], chosenNodes, excessTypes)); // removing delHint reduces the number of racks; assertFalse(BlockPlacementPolicyDefault.useDelHint(true, storages[3], storages[0], chosenNodes, excessTypes)); assertFalse(BlockPlacementPolicyDefault.useDelHint(true, storages[3], null, chosenNodes, excessTypes)); }
@Test public void testUseDelHint() { DatanodeStorageInfo delHint = new DatanodeStorageInfo( DFSTestUtil.getLocalDatanodeDescriptor(), new DatanodeStorage("id")); List<DatanodeStorageInfo> moreThan1Racks = Arrays.asList(delHint); List<StorageType> excessTypes = new ArrayList<StorageType>(); excessTypes.add(StorageType.DEFAULT); Assert.assertTrue(BlockPlacementPolicyDefault.useDelHint(true, delHint, null, moreThan1Racks, excessTypes)); excessTypes.remove(0); excessTypes.add(StorageType.SSD); Assert.assertFalse(BlockPlacementPolicyDefault.useDelHint(true, delHint, null, moreThan1Racks, excessTypes)); }