/** * Creates a new pool of resources based on what's available in the provided {@link Offer}. */ public MesosResourcePool(Offer offer, Optional<String> role) { this.offer = offer; final Collection<MesosResource> mesosResources = getMesosResources(offer, role); this.unreservedAtomicPool = getUnreservedAtomicPool(mesosResources); this.dynamicallyReservedPoolByResourceId = getDynamicallyReservedPool(mesosResources); this.reservableMergedPoolByRole = getReservableMergedPool(mesosResources); }
@Test public void testMultipleUnreservedAtomicPool() { Resource resource = ResourceTestUtils.getUnreservedMountVolume(1000, Optional.empty()); Offer offer = OfferTestUtils.getOffer(Arrays.asList(resource, resource)); MesosResourcePool pool = new MesosResourcePool(offer, Optional.of(Constants.ANY_ROLE)); Assert.assertEquals(1, pool.getUnreservedAtomicPool().size()); Assert.assertEquals(2, pool.getUnreservedAtomicPool().get("disk").size()); }
@Test public void testCreateSingleUnreservedAtomicPool() { Offer offer = OfferTestUtils.getOffer(ResourceTestUtils.getUnreservedMountVolume(1000, Optional.empty())); MesosResourcePool pool = new MesosResourcePool(offer, Optional.of(Constants.ANY_ROLE)); Assert.assertEquals(1, pool.getUnreservedAtomicPool().size()); Assert.assertEquals(1, pool.getUnreservedAtomicPool().get("disk").size()); }
@Test public void testEmptyUnreservedAtomicPool() { Offer offer = OfferTestUtils.getOffer(ResourceTestUtils.getUnreservedCpus(1.0)); MesosResourcePool pool = new MesosResourcePool(offer, Optional.of(Constants.ANY_ROLE)); Assert.assertEquals(0, pool.getUnreservedAtomicPool().size()); }
@Test public void testCreateSingleReservedAtomicPool() { Resource resource = ResourceTestUtils.getReservedMountVolume(1000, Optional.empty()); Offer offer = OfferTestUtils.getOffer(resource); MesosResourcePool pool = new MesosResourcePool(offer, Optional.of(Constants.ANY_ROLE)); String resourceId = new MesosResource(resource).getResourceId().get(); Assert.assertEquals(0, pool.getUnreservedAtomicPool().size()); Assert.assertEquals(1, pool.getDynamicallyReservedPoolByResourceId().size()); Assert.assertEquals(resource, pool.getDynamicallyReservedPoolByResourceId().get(resourceId).getResource()); }
@Test public void testConsumeUnreservedAtomicResource() { Resource offerResource = ResourceTestUtils.getUnreservedMountVolume(1000, Optional.empty()); VolumeSpec spec = DefaultVolumeSpec.createMountVolume( ValueUtils.getValue(offerResource).getScalar().getValue(), TestConstants.CONTAINER_PATH, Collections.emptyList(), TestConstants.ROLE, Constants.ANY_ROLE, TestConstants.PRINCIPAL); Offer offer = OfferTestUtils.getOffer(offerResource); MesosResourcePool pool = new MesosResourcePool(offer, Optional.of(Constants.ANY_ROLE)); Assert.assertEquals(1, pool.getUnreservedAtomicPool().size()); MesosResource resourceToConsume = pool.consumeAtomic(offerResource.getName(), spec).get(); Assert.assertEquals(offerResource, resourceToConsume.getResource()); Assert.assertEquals(0, pool.getUnreservedAtomicPool().size()); }
@Test public void testConsumeUnreservedAtomicResourceMatchedProfile() { Resource offerResource = ResourceTestUtils.getUnreservedMountVolume(1000, Optional.of("bar")); VolumeSpec spec = DefaultVolumeSpec.createMountVolume( ValueUtils.getValue(offerResource).getScalar().getValue(), TestConstants.CONTAINER_PATH, Arrays.asList("foo", "bar"), TestConstants.ROLE, Constants.ANY_ROLE, TestConstants.PRINCIPAL); Offer offer = OfferTestUtils.getOffer(offerResource); MesosResourcePool pool = new MesosResourcePool(offer, Optional.of(Constants.ANY_ROLE)); Assert.assertEquals(1, pool.getUnreservedAtomicPool().size()); MesosResource resourceToConsume = pool.consumeAtomic(offerResource.getName(), spec).get(); Assert.assertEquals(offerResource, resourceToConsume.getResource()); Assert.assertEquals(0, pool.getUnreservedAtomicPool().size()); }
@Test public void testConsumeUnreservedAtomicResourceUnmatchedProfile1() { Resource offerResource = ResourceTestUtils.getUnreservedMountVolume(1000, Optional.of("bar")); VolumeSpec spec = DefaultVolumeSpec.createMountVolume( ValueUtils.getValue(offerResource).getScalar().getValue(), TestConstants.CONTAINER_PATH, Arrays.asList("foo"), TestConstants.ROLE, Constants.ANY_ROLE, TestConstants.PRINCIPAL); Offer offer = OfferTestUtils.getOffer(offerResource); MesosResourcePool pool = new MesosResourcePool(offer, Optional.of(Constants.ANY_ROLE)); Assert.assertEquals(1, pool.getUnreservedAtomicPool().size()); Assert.assertFalse(pool.consumeAtomic(offerResource.getName(), spec).isPresent()); }
@Test public void testConsumeUnreservedAtomicResourceUnmatchedProfile3() { Resource offerResource = ResourceTestUtils.getUnreservedMountVolume(1000, Optional.of("bar")); VolumeSpec spec = DefaultVolumeSpec.createMountVolume( ValueUtils.getValue(offerResource).getScalar().getValue(), TestConstants.CONTAINER_PATH, Collections.emptyList(), TestConstants.ROLE, Constants.ANY_ROLE, TestConstants.PRINCIPAL); Offer offer = OfferTestUtils.getOffer(offerResource); MesosResourcePool pool = new MesosResourcePool(offer, Optional.of(Constants.ANY_ROLE)); Assert.assertEquals(1, pool.getUnreservedAtomicPool().size()); Assert.assertFalse(pool.consumeAtomic(offerResource.getName(), spec).isPresent()); }
@Test public void testConsumeUnreservedAtomicResourceUnmatchedProfile2() { Resource offerResource = ResourceTestUtils.getUnreservedMountVolume(1000, Optional.empty()); VolumeSpec spec = DefaultVolumeSpec.createMountVolume( ValueUtils.getValue(offerResource).getScalar().getValue(), TestConstants.CONTAINER_PATH, Arrays.asList("foo", "bar"), TestConstants.ROLE, Constants.ANY_ROLE, TestConstants.PRINCIPAL); Offer offer = OfferTestUtils.getOffer(offerResource); MesosResourcePool pool = new MesosResourcePool(offer, Optional.of(Constants.ANY_ROLE)); Assert.assertEquals(1, pool.getUnreservedAtomicPool().size()); Assert.assertFalse(pool.consumeAtomic(offerResource.getName(), spec).isPresent()); }