/** * Calculate the average percentage used. * @see NormalizedResources#calculateAveragePercentageUsedBy(org.apache.storm.scheduler.resource.normalization.NormalizedResources, * double, double) */ public double calculateAveragePercentageUsedBy(NormalizedResourceOffer used) { return normalizedResources.calculateAveragePercentageUsedBy( used.getNormalizedResources(), getTotalMemoryMb(), used.getTotalMemoryMb()); }
@Test public void testCalculateAvgWithUnusedResource() { Map<String, Double> allResourcesMap = new HashMap<>(); allResourcesMap.put(Constants.COMMON_CPU_RESOURCE_NAME, 2.0); allResourcesMap.put(gpuResourceName, 10.0); NormalizedResources resources = new NormalizedResources(normalize(allResourcesMap)); Map<String, Double> usedResourcesMap = new HashMap<>(); usedResourcesMap.put(Constants.COMMON_CPU_RESOURCE_NAME, 1.0); NormalizedResources usedResources = new NormalizedResources(normalize(usedResourcesMap)); double avg = resources.calculateAveragePercentageUsedBy(usedResources, 4, 1); //The resource that is not used should count as if it is being used 0% assertThat(avg, is((50.0 + 25.0)/3)); }
@Test public void testCalculateAvgWithCpuMemAndGenericResource() { Map<String, Double> allResourcesMap = new HashMap<>(); allResourcesMap.put(Constants.COMMON_CPU_RESOURCE_NAME, 2.0); allResourcesMap.put(gpuResourceName, 10.0); NormalizedResources resources = new NormalizedResources(normalize(allResourcesMap)); Map<String, Double> usedResourcesMap = new HashMap<>(); usedResourcesMap.put(Constants.COMMON_CPU_RESOURCE_NAME, 1.0); usedResourcesMap.put(gpuResourceName, 1.0); NormalizedResources usedResources = new NormalizedResources(normalize(usedResourcesMap)); double avg = resources.calculateAveragePercentageUsedBy(usedResources, 4, 1); assertThat(avg, is((50.0 + 25.0 + 10.0)/3)); }
@Test public void testCalculateAvgWithTooLittleResourceInTotal() { Map<String, Double> allResourcesMap = new HashMap<>(); allResourcesMap.put(Constants.COMMON_CPU_RESOURCE_NAME, 2.0); allResourcesMap.put(gpuResourceName, 1.0); NormalizedResources resources = new NormalizedResources(normalize(allResourcesMap)); Map<String, Double> usedResourcesMap = new HashMap<>(); usedResourcesMap.put(Constants.COMMON_CPU_RESOURCE_NAME, 1.0); usedResourcesMap.put(gpuResourceName, 5.0); NormalizedResources usedResources = new NormalizedResources(normalize(usedResourcesMap)); expectedException.expect(IllegalArgumentException.class); resources.calculateAveragePercentageUsedBy(usedResources, 4, 1); }
@Test public void testCalculateAvgWithResourceMissingFromTotal() { Map<String, Double> allResourcesMap = new HashMap<>(); allResourcesMap.put(Constants.COMMON_CPU_RESOURCE_NAME, 2.0); NormalizedResources resources = new NormalizedResources(normalize(allResourcesMap)); Map<String, Double> usedResourcesMap = new HashMap<>(); usedResourcesMap.put(Constants.COMMON_CPU_RESOURCE_NAME, 1.0); usedResourcesMap.put(gpuResourceName, 1.0); NormalizedResources usedResources = new NormalizedResources(normalize(usedResourcesMap)); expectedException.expect(IllegalArgumentException.class); resources.calculateAveragePercentageUsedBy(usedResources, 4, 1); }
@Test public void testCalculateAvgWithOnlyCpu() { NormalizedResources resources = new NormalizedResources(normalize(Collections.singletonMap(Constants.COMMON_CPU_RESOURCE_NAME, 2))); NormalizedResources usedResources = new NormalizedResources(normalize(Collections.singletonMap(Constants.COMMON_CPU_RESOURCE_NAME, 1))); double avg = resources.calculateAveragePercentageUsedBy(usedResources, 0, 0); assertThat(avg, is(50.0)); }
@Test public void testCalculateAvgUsageWithNoResourcesInTotal() { NormalizedResources resources = new NormalizedResources(normalize(Collections.emptyMap())); NormalizedResources usedResources = new NormalizedResources(normalize(Collections.emptyMap())); double avg = resources.calculateAveragePercentageUsedBy(usedResources, 0, 0); assertThat(avg, is(100.0)); }
@Test public void testCalculateAvgWithCpuAndMem() { NormalizedResources resources = new NormalizedResources(normalize(Collections.singletonMap(Constants.COMMON_CPU_RESOURCE_NAME, 2))); NormalizedResources usedResources = new NormalizedResources(normalize(Collections.singletonMap(Constants.COMMON_CPU_RESOURCE_NAME, 1))); double avg = resources.calculateAveragePercentageUsedBy(usedResources, 4, 1); assertThat(avg, is((50.0 + 25.0)/2)); }
@Test public void testCalculateAvgThrowsIfTotalIsMissingCpu() { NormalizedResources resources = new NormalizedResources(normalize(Collections.singletonMap(Constants.COMMON_CPU_RESOURCE_NAME, 2))); NormalizedResources usedResources = new NormalizedResources(normalize(Collections.singletonMap(Constants.COMMON_CPU_RESOURCE_NAME, 5))); expectedException.expect(IllegalArgumentException.class); resources.calculateAveragePercentageUsedBy(usedResources, 0, 0); }
@Test public void testCalculateAvgThrowsIfTotalIsMissingMemory() { NormalizedResources resources = new NormalizedResources(normalize(Collections.singletonMap(Constants.COMMON_CPU_RESOURCE_NAME, 2))); NormalizedResources usedResources = new NormalizedResources(normalize(Collections.singletonMap(Constants.COMMON_CPU_RESOURCE_NAME, 1))); expectedException.expect(IllegalArgumentException.class); resources.calculateAveragePercentageUsedBy(usedResources, 100, 500); }