@Test public void testEvenRackPlacement() { // Set up 3 active racks sms.resourceOffers(Arrays.asList(createOffer(1, 128, 1024, "slave1", "host1", Optional.of("rack1")))); sms.resourceOffers(Arrays.asList(createOffer(1, 128, 1024, "slave2", "host2", Optional.of("rack2")))); sms.resourceOffers(Arrays.asList(createOffer(1, 128, 1024, "slave3", "host3", Optional.of("rack3")))); initRequest(); initFirstDeploy(); saveAndSchedule(request.toBuilder().setInstances(Optional.of(7)).setRackSensitive(Optional.of(true))); // rack1 -> 1, rack2 -> 2, rack3 -> 3 sms.resourceOffers(Arrays.asList(createOffer(1, 128, 1024, "slave1", "host1", Optional.of("rack1")))); sms.resourceOffers(Arrays.asList(createOffer(1, 128, 1024, "slave2", "host2", Optional.of("rack2")))); sms.resourceOffers(Arrays.asList(createOffer(1, 128, 1024, "slave3", "host3", Optional.of("rack3")))); Assert.assertEquals(3, taskManager.getActiveTaskIds().size()); sms.resourceOffers(Arrays.asList(createOffer(1, 128, 1024, "slave1", "host1", Optional.of("rack1")))); Assert.assertEquals(4, taskManager.getActiveTaskIds().size()); sms.resourceOffers(Arrays.asList(createOffer(1, 128, 1024, "slave1", "host1", Optional.of("rack1")))); Assert.assertEquals(4, taskManager.getActiveTaskIds().size()); sms.resourceOffers(Arrays.asList(createOffer(1, 128, 1024, "slave2", "host2", Optional.of("rack2")))); Assert.assertEquals(5, taskManager.getActiveTaskIds().size()); // rack1 should not get a third instance until rack3 has a second sms.resourceOffers(Arrays.asList(createOffer(1, 128, 1024, "slave1", "host1", Optional.of("rack1")))); Assert.assertEquals(5, taskManager.getActiveTaskIds().size()); sms.resourceOffers(Arrays.asList(createOffer(1, 128, 1024, "slave3", "host3", Optional.of("rack3")))); Assert.assertEquals(6, taskManager.getActiveTaskIds().size()); sms.resourceOffers(Arrays.asList(createOffer(1, 128, 1024, "slave1", "host1", Optional.of("rack1")))); Assert.assertEquals(7, taskManager.getActiveTaskIds().size()); }
@Test public void testRackPlacementOnScaleDown() { try { configuration.setRebalanceRacksOnScaleDown(true); // Set up 3 active racks sms.resourceOffers(Arrays.asList(createOffer(1, 128, 1024, "slave1", "host1", Optional.of("rack1")))); sms.resourceOffers(Arrays.asList(createOffer(1, 128, 1024, "slave2", "host2", Optional.of("rack2")))); sms.resourceOffers(Arrays.asList(createOffer(1, 128, 1024, "slave3", "host3", Optional.of("rack3")))); initRequest(); initFirstDeploy(); saveAndSchedule(request.toBuilder().setInstances(Optional.of(7)).setRackSensitive(Optional.of(true))); sms.resourceOffers(Arrays.asList(createOffer(2, 256, 2048, "slave1", "host1", Optional.of("rack1")))); sms.resourceOffers(Arrays.asList(createOffer(2, 256, 2048, "slave2", "host2", Optional.of("rack2")))); sms.resourceOffers(Arrays.asList(createOffer(3, 384, 3072, "slave3", "host3", Optional.of("rack3")))); Assert.assertEquals(7, taskManager.getActiveTaskIds().size()); requestResource.postRequest(request.toBuilder().setInstances(Optional.of(4)).setRackSensitive(Optional.of(true)).build(), singularityUser); scheduler.drainPendingQueue(); Assert.assertEquals(4, taskManager.getNumCleanupTasks()); int rebalanceRackCleanups = 0; for (SingularityTaskCleanup cleanup : taskManager.getCleanupTasks()) { if (cleanup.getCleanupType() == TaskCleanupType.REBALANCE_RACKS) { rebalanceRackCleanups++; } } Assert.assertEquals(1, rebalanceRackCleanups); Assert.assertEquals(1, taskManager.getPendingTaskIds().size()); } finally { configuration.setRebalanceRacksOnScaleDown(false); } }
SingularityRequest newRequest = request.toBuilder() .setInstances(Optional.of(2)) .setRackSensitive(Optional.of(true)) .setSlavePlacement(Optional.of(SlavePlacement.SEPARATE)) .setAllowBounceToSameHost(Optional.of(true))
.setNumRetriesOnFailure(numRetriesOnFailure) .setOwners(copyOfList(owners)) .setRackSensitive(rackSensitive) .setSchedule(schedule) .setKillOldNonLongRunningTasksAfterMillis(killOldNonLongRunningTasksAfterMillis)
@Test public void testEvenRackPlacement() { // Set up 3 active racks sms.resourceOffers(Arrays.asList(createOffer(1, 128, 1024, "slave1", "host1", Optional.of("rack1")))); sms.resourceOffers(Arrays.asList(createOffer(1, 128, 1024, "slave2", "host2", Optional.of("rack2")))); sms.resourceOffers(Arrays.asList(createOffer(1, 128, 1024, "slave3", "host3", Optional.of("rack3")))); initRequest(); initFirstDeploy(); saveAndSchedule(request.toBuilder().setInstances(Optional.of(7)).setRackSensitive(Optional.of(true))); // rack1 -> 1, rack2 -> 2, rack3 -> 3 sms.resourceOffers(Arrays.asList(createOffer(1, 128, 1024, "slave1", "host1", Optional.of("rack1")))); sms.resourceOffers(Arrays.asList(createOffer(1, 128, 1024, "slave2", "host2", Optional.of("rack2")))); sms.resourceOffers(Arrays.asList(createOffer(1, 128, 1024, "slave3", "host3", Optional.of("rack3")))); Assert.assertEquals(3, taskManager.getActiveTaskIds().size()); sms.resourceOffers(Arrays.asList(createOffer(1, 128, 1024, "slave1", "host1", Optional.of("rack1")))); Assert.assertEquals(4, taskManager.getActiveTaskIds().size()); sms.resourceOffers(Arrays.asList(createOffer(1, 128, 1024, "slave1", "host1", Optional.of("rack1")))); Assert.assertEquals(4, taskManager.getActiveTaskIds().size()); sms.resourceOffers(Arrays.asList(createOffer(1, 128, 1024, "slave2", "host2", Optional.of("rack2")))); Assert.assertEquals(5, taskManager.getActiveTaskIds().size()); // rack1 should not get a third instance until rack3 has a second sms.resourceOffers(Arrays.asList(createOffer(1, 128, 1024, "slave1", "host1", Optional.of("rack1")))); Assert.assertEquals(5, taskManager.getActiveTaskIds().size()); sms.resourceOffers(Arrays.asList(createOffer(1, 128, 1024, "slave3", "host3", Optional.of("rack3")))); Assert.assertEquals(6, taskManager.getActiveTaskIds().size()); sms.resourceOffers(Arrays.asList(createOffer(1, 128, 1024, "slave1", "host1", Optional.of("rack1")))); Assert.assertEquals(7, taskManager.getActiveTaskIds().size()); }
@Test public void testRackPlacementOnScaleDown() { try { configuration.setRebalanceRacksOnScaleDown(true); // Set up 3 active racks sms.resourceOffers(Arrays.asList(createOffer(1, 128, 1024, "slave1", "host1", Optional.of("rack1")))); sms.resourceOffers(Arrays.asList(createOffer(1, 128, 1024, "slave2", "host2", Optional.of("rack2")))); sms.resourceOffers(Arrays.asList(createOffer(1, 128, 1024, "slave3", "host3", Optional.of("rack3")))); initRequest(); initFirstDeploy(); saveAndSchedule(request.toBuilder().setInstances(Optional.of(7)).setRackSensitive(Optional.of(true))); sms.resourceOffers(Arrays.asList(createOffer(2, 256, 2048, "slave1", "host1", Optional.of("rack1")))); sms.resourceOffers(Arrays.asList(createOffer(2, 256, 2048, "slave2", "host2", Optional.of("rack2")))); sms.resourceOffers(Arrays.asList(createOffer(3, 384, 3072, "slave3", "host3", Optional.of("rack3")))); Assert.assertEquals(7, taskManager.getActiveTaskIds().size()); requestResource.postRequest(request.toBuilder().setInstances(Optional.of(4)).setRackSensitive(Optional.of(true)).build(), singularityUser); scheduler.drainPendingQueue(); Assert.assertEquals(4, taskManager.getNumCleanupTasks()); int rebalanceRackCleanups = 0; for (SingularityTaskCleanup cleanup : taskManager.getCleanupTasks()) { if (cleanup.getCleanupType() == TaskCleanupType.REBALANCE_RACKS) { rebalanceRackCleanups++; } } Assert.assertEquals(1, rebalanceRackCleanups); Assert.assertEquals(1, taskManager.getPendingTaskIds().size()); } finally { configuration.setRebalanceRacksOnScaleDown(false); } }
SingularityRequest newRequest = request.toBuilder() .setInstances(Optional.of(2)) .setRackSensitive(Optional.of(true)) .setSlavePlacement(Optional.of(SlavePlacement.SEPARATE)) .setAllowBounceToSameHost(Optional.of(true))