/** * Create an offer with all resources set to 0. */ public NormalizedResourceOffer() { normalizedResources = new NormalizedResources(); totalMemoryMb = 0.0; }
/** * Copy Constructor. * @param other what to copy. */ public NormalizedResourceOffer(NormalizedResourceOffer other) { this.totalMemoryMb = other.totalMemoryMb; this.normalizedResources = new NormalizedResources(other.normalizedResources); }
/** * Create a new normalized resource offer. * * @param resources the resources to be normalized. */ public NormalizedResourceOffer(Map<String, ? extends Number> resources) { Map<String, Double> normalizedResourceMap = NormalizedResources.RESOURCE_NAME_NORMALIZER.normalizedResourceMap(resources); totalMemoryMb = normalizedResourceMap.getOrDefault(Constants.COMMON_TOTAL_MEMORY_RESOURCE_NAME, 0.0); this.normalizedResources = new NormalizedResources(normalizedResourceMap); }
@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 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 testCouldHoldWithTooLittleMemory() { NormalizedResources resources = new NormalizedResources(normalize(Collections.singletonMap(gpuResourceName, 1))); NormalizedResources resourcesToCheck = new NormalizedResources(normalize(Collections.singletonMap(gpuResourceName, 1))); boolean couldHold = resources.couldHoldIgnoringSharedMemory(resourcesToCheck, 100, 200); assertThat(couldHold, is(false)); }
@Test public void testCouldHoldWithMissingResource() { NormalizedResources resources = new NormalizedResources(normalize(Collections.emptyMap())); NormalizedResources resourcesToCheck = new NormalizedResources(normalize(Collections.singletonMap(gpuResourceName, 1))); boolean couldHold = resources.couldHoldIgnoringSharedMemory(resourcesToCheck, 100, 1); assertThat(couldHold, is(false)); }
@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 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 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 testCouldHoldWithTooFewCpus() { NormalizedResources resources = new NormalizedResources(normalize(Collections.singletonMap(Constants.COMMON_CPU_RESOURCE_NAME, 1))); NormalizedResources resourcesToCheck = new NormalizedResources(normalize(Collections.singletonMap(Constants.COMMON_CPU_RESOURCE_NAME, 2))); boolean couldHold = resources.couldHoldIgnoringSharedMemory(resourcesToCheck, 100, 1); assertThat(couldHold, is(false)); }
@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); }
@Test public void testAddToExistingResource() { NormalizedResources resources = new NormalizedResources(normalize(Collections.singletonMap(gpuResourceName, 1))); NormalizedResources addedResources = new NormalizedResources(normalize(Collections.singletonMap(gpuResourceName, 1))); resources.add(addedResources); Map<String, Double> normalizedMap = resources.toNormalizedMap(); assertThat(normalizedMap.get(gpuResourceName), is(2.0)); }
@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 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); }
@Test public void testAddCpu() { NormalizedResources resources = new NormalizedResources(normalize(Collections.singletonMap(Constants.COMMON_CPU_RESOURCE_NAME, 1))); NormalizedResources addedResources = new NormalizedResources(normalize(Collections.singletonMap(Constants.COMMON_CPU_RESOURCE_NAME, 1))); resources.add(addedResources); Map<String, Double> normalizedMap = resources.toNormalizedMap(); assertThat(normalizedMap.get(Constants.COMMON_CPU_RESOURCE_NAME), is(2.0)); assertThat(resources.getTotalCpu(), is(2.0)); }
@Test public void testRemoveZeroesWhenResourcesBecomeNegative() { NormalizedResources resources = new NormalizedResources(normalize(Collections.singletonMap(gpuResourceName, 1))); NormalizedResources removedResources = new NormalizedResources(normalize(Collections.singletonMap(gpuResourceName, 2))); resources.remove(removedResources, new ResourceMetrics(new StormMetricsRegistry())); Map<String, Double> normalizedMap = resources.toNormalizedMap(); assertThat(normalizedMap.get(gpuResourceName), is(0.0)); }
@Test public void testRemoveFromExistingResources() { NormalizedResources resources = new NormalizedResources(normalize(Collections.singletonMap(gpuResourceName, 15))); NormalizedResources removedResources = new NormalizedResources(normalize(Collections.singletonMap(gpuResourceName, 1))); resources.remove(removedResources, new ResourceMetrics(new StormMetricsRegistry())); Map<String, Double> normalizedMap = resources.toNormalizedMap(); assertThat(normalizedMap.get(gpuResourceName), is(14.0)); }
@Test public void testRemoveZeroesWhenCpuBecomesNegative() { NormalizedResources resources = new NormalizedResources(normalize(Collections.singletonMap(Constants.COMMON_CPU_RESOURCE_NAME, 1))); NormalizedResources removedResources = new NormalizedResources(normalize(Collections.singletonMap(Constants.COMMON_CPU_RESOURCE_NAME, 2))); resources.remove(removedResources, new ResourceMetrics(new StormMetricsRegistry())); assertThat(resources.getTotalCpu(), is(0.0)); }