Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -27,6 +27,7 @@
import com.hubspot.singularity.LoadBalancerRequestType;
import com.hubspot.singularity.LoadBalancerRequestType.LoadBalancerRequestId;
import com.hubspot.singularity.RequestState;
import com.hubspot.singularity.RequestType;
import com.hubspot.singularity.SingularityDeleteResult;
import com.hubspot.singularity.SingularityDeploy;
import com.hubspot.singularity.SingularityDeployFailure;
Expand Down Expand Up @@ -153,7 +154,9 @@ private void checkDeploy(final SingularityPendingDeploy pendingDeploy, final Lis

if (deployResult.getDeployState() == DeployState.SUCCEEDED) {
if (saveNewDeployState(pendingDeployMarker, Optional.of(pendingDeployMarker))) {
deleteObsoletePendingTasks(pendingDeploy);
if (!(request.getRequestType() == RequestType.RUN_ONCE)) {
deleteObsoletePendingTasks(pendingDeploy);
}
finishDeploy(requestWithState, deploy, pendingDeploy, allOtherMatchingTasks, deployResult);
return;
} else {
Expand Down Expand Up @@ -230,7 +233,7 @@ private void finishDeploy(SingularityRequestWithState requestWithState, Optional
SingularityDeployResult deployResult) {
SingularityRequest request = requestWithState.getRequest();

if (!request.isOneOff()) {
if (!request.isOneOff() && !(request.getRequestType() == RequestType.RUN_ONCE)) {
cleanupTasks(pendingDeploy.getDeployMarker(), deployResult, tasksToKill);
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -279,6 +279,9 @@ private boolean shouldScheduleTasks(SingularityRequest request, SingularityPendi
if (request.isDeployable() && pendingRequest.getPendingType() == PendingType.NEW_DEPLOY && !maybePendingDeploy.isPresent()) {
return false;
}
if (request.getRequestType() == RequestType.RUN_ONCE && pendingRequest.getPendingType() == PendingType.NEW_DEPLOY) {
return true;
}

return isDeployInUse(maybeRequestDeployState, pendingRequest.getDeployId(), false);
}
Expand Down Expand Up @@ -325,7 +328,7 @@ private List<SingularityTaskRequest> checkForStaleScheduledTasks(List<Singularit
for (SingularityTaskRequest taskRequest : taskRequests) {
SingularityRequestDeployState requestDeployState = deployStates.get(taskRequest.getRequest().getId());

if (!matchesDeploy(requestDeployState, taskRequest)) {
if (!matchesDeploy(requestDeployState, taskRequest) && !(taskRequest.getRequest().getRequestType() == RequestType.RUN_ONCE)) {
LOG.info("Removing stale pending task {} because the deployId did not match active/pending deploys {}", taskRequest.getPendingTask().getPendingTaskId(), requestDeployState);
taskManager.deletePendingTask(taskRequest.getPendingTask().getPendingTaskId());
} else {
Expand Down Expand Up @@ -606,6 +609,8 @@ private int getNumMissingInstances(List<SingularityTaskId> matchingTaskIds, Sing
} else {
return 0;
}
} else if (request.getRequestType() == RequestType.RUN_ONCE && pendingRequest.getPendingType() == PendingType.NEW_DEPLOY) {
return 1;
}

return numInstancesExpected(request, pendingRequest, maybePendingDeploy) - matchingTaskIds.size();
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -1099,6 +1099,26 @@ public void testRunOnceRunOnlyOnce() {
Assert.assertTrue(taskManager.getActiveTaskIds().isEmpty());
}

@Test
public void testMultipleRunOnceTasks() {
SingularityRequestBuilder bldr = new SingularityRequestBuilder(requestId, RequestType.RUN_ONCE);
request = bldr.build();
saveRequest(request);

deployResource.deploy(new SingularityDeployRequest(new SingularityDeployBuilder(requestId, "d1").setCommand(Optional.of("cmd")).build(), Optional.<Boolean> absent(), Optional.<String> absent()));
deployChecker.checkDeploys();
Assert.assertEquals(1, requestManager.getSizeOfPendingQueue());

deployResource.deploy(new SingularityDeployRequest(new SingularityDeployBuilder(requestId, "d2").setCommand(Optional.of("cmd")).build(), Optional.<Boolean> absent(), Optional.<String> absent()));
deployChecker.checkDeploys();
Assert.assertEquals(2, requestManager.getSizeOfPendingQueue());

scheduler.drainPendingQueue(stateCacheProvider.get());

resourceOffers();
Assert.assertEquals(2, taskManager.getActiveTaskIds().size());
}

@Test
public void testRunOnceDontMoveDuringDecomission() {
SingularityRequestBuilder bldr = new SingularityRequestBuilder(requestId, RequestType.RUN_ONCE);
Expand Down