/// <exception cref="System.Exception"/> public static void TestRR(VolumeChoosingPolicy <FsVolumeSpi> policy) { IList <FsVolumeSpi> volumes = new AList <FsVolumeSpi>(); // First volume, with 100 bytes of space. volumes.AddItem(Org.Mockito.Mockito.Mock <FsVolumeSpi>()); Org.Mockito.Mockito.When(volumes[0].GetAvailable()).ThenReturn(100L); // Second volume, with 200 bytes of space. volumes.AddItem(Org.Mockito.Mockito.Mock <FsVolumeSpi>()); Org.Mockito.Mockito.When(volumes[1].GetAvailable()).ThenReturn(200L); // Test two rounds of round-robin choosing NUnit.Framework.Assert.AreEqual(volumes[0], policy.ChooseVolume(volumes, 0)); NUnit.Framework.Assert.AreEqual(volumes[1], policy.ChooseVolume(volumes, 0)); NUnit.Framework.Assert.AreEqual(volumes[0], policy.ChooseVolume(volumes, 0)); NUnit.Framework.Assert.AreEqual(volumes[1], policy.ChooseVolume(volumes, 0)); // The first volume has only 100L space, so the policy should // wisely choose the second one in case we ask for more. NUnit.Framework.Assert.AreEqual(volumes[1], policy.ChooseVolume(volumes, 150)); // Fail if no volume can be chosen? try { policy.ChooseVolume(volumes, long.MaxValue); NUnit.Framework.Assert.Fail(); } catch (IOException) { } }
internal FsVolumeList(IList <VolumeFailureInfo> initialVolumeFailureInfos, BlockScanner blockScanner, VolumeChoosingPolicy <FsVolumeImpl> blockChooser) { // Tracks volume failures, sorted by volume path. this.blockChooser = blockChooser; this.blockScanner = blockScanner; foreach (VolumeFailureInfo volumeFailureInfo in initialVolumeFailureInfos) { volumeFailureInfos[volumeFailureInfo.GetFailedStorageLocation()] = volumeFailureInfo; } }
private static void InitPolicy(VolumeChoosingPolicy <FsVolumeSpi> policy, float preferencePercent ) { Configuration conf = new Configuration(); // Set the threshold to consider volumes imbalanced to 1MB conf.SetLong(DFSConfigKeys.DfsDatanodeAvailableSpaceVolumeChoosingPolicyBalancedSpaceThresholdKey , 1024 * 1024); // 1MB conf.SetFloat(DFSConfigKeys.DfsDatanodeAvailableSpaceVolumeChoosingPolicyBalancedSpacePreferenceFractionKey , preferencePercent); ((Configurable)policy).SetConf(conf); }
/// <exception cref="System.Exception"/> public static void TestRRPolicyExceptionMessage(VolumeChoosingPolicy <FsVolumeSpi> policy) { IList <FsVolumeSpi> volumes = new AList <FsVolumeSpi>(); // First volume, with 500 bytes of space. volumes.AddItem(Org.Mockito.Mockito.Mock <FsVolumeSpi>()); Org.Mockito.Mockito.When(volumes[0].GetAvailable()).ThenReturn(500L); // Second volume, with 600 bytes of space. volumes.AddItem(Org.Mockito.Mockito.Mock <FsVolumeSpi>()); Org.Mockito.Mockito.When(volumes[1].GetAvailable()).ThenReturn(600L); int blockSize = 700; try { policy.ChooseVolume(volumes, blockSize); NUnit.Framework.Assert.Fail("expected to throw DiskOutOfSpaceException"); } catch (DiskChecker.DiskOutOfSpaceException e) { NUnit.Framework.Assert.AreEqual("Not returnig the expected message", "Out of space: The volume with the most available space (=" + 600 + " B) is less than the block size (=" + blockSize + " B).", e.Message); } }