/** * Calculate the min percentage used of the resource. * @see NormalizedResources#calculateMinPercentageUsedBy(org.apache.storm.scheduler.resource.normalization.NormalizedResources, double, * double) */ public double calculateMinPercentageUsedBy(NormalizedResourceOffer used) { return normalizedResources.calculateMinPercentageUsedBy(used.getNormalizedResources(), getTotalMemoryMb(), used.getTotalMemoryMb()); }
@Test public void testCalculateMinWithCpuMemAndGenericResource() { 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 min = resources.calculateMinPercentageUsedBy(usedResources, 4, 1); assertThat(min, is(10.0)); }
@Test public void testCalculateMinWithTooLittleResourceInTotal() { 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.calculateMinPercentageUsedBy(usedResources, 4, 1); } }
@Test public void testCalculateMinWithUnusedResource() { 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 min = resources.calculateMinPercentageUsedBy(usedResources, 4, 1); //The resource that is not used should count as if it is being used 0% assertThat(min, is(0.0)); }
@Test public void testCalculateMinWithResourceMissingFromTotal() { 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.calculateMinPercentageUsedBy(usedResources, 4, 1); }
@Test public void testCalculateMinUsageWithNoResourcesInTotal() { NormalizedResources resources = new NormalizedResources(normalize(Collections.emptyMap())); NormalizedResources usedResources = new NormalizedResources(normalize(Collections.emptyMap())); double min = resources.calculateMinPercentageUsedBy(usedResources, 0, 0); assertThat(min, is(100.0)); }
@Test public void testCalculateMinWithOnlyCpu() { 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 min = resources.calculateMinPercentageUsedBy(usedResources, 0, 0); assertThat(min, is(50.0)); }
@Test public void testCalculateMinWithCpuAndMem() { 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 min = resources.calculateMinPercentageUsedBy(usedResources, 4, 1); assertThat(min, is(25.0)); }
@Test public void testCalculateMinThrowsIfTotalIsMissingMemory() { 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.calculateMinPercentageUsedBy(usedResources, 100, 500); }
@Test public void testCalculateMinThrowsIfTotalIsMissingCpu() { 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.calculateMinPercentageUsedBy(usedResources, 0, 0); }