public boolean shouldKillTaskInstantly(SingularityRequest request) { if (request.isLongRunning()) { return killLongRunningTaskInstantly; } else { return killNonLongRunningTaskInstantly; } } }
private List<SingularityTaskId> getMatchingTaskIds(SingularityRequest request, SingularityDeployKey deployKey) { List<SingularityTaskId> activeTaskIdsForRequest = leaderCache.getActiveTaskIdsForRequest(deployKey.getRequestId()); if (request.isLongRunning()) { Set<SingularityTaskId> killedTaskIds = leaderCache.getKilledTasks().stream() .map(SingularityKilledTaskIdRecord::getTaskId) .collect(Collectors.toSet()); List<SingularityTaskId> matchingTaskIds = new ArrayList<>(); for (SingularityTaskId taskId : activeTaskIdsForRequest) { if (!taskId.getDeployId().equals(deployKey.getDeployId())) { continue; } if (leaderCache.getCleanupTaskIds().contains(taskId)) { continue; } if (killedTaskIds.contains(taskId)) { continue; } matchingTaskIds.add(taskId); } return matchingTaskIds; } else { return new ArrayList<>(activeTaskIdsForRequest); } }
@Override public void runActionOnPoll() { final long now = System.currentTimeMillis(); final List<SingularityTaskId> activeTaskIds = taskManager.getActiveTaskIds(); final Set<String> requestIdsToLookup = Sets.newHashSetWithExpectedSize(activeTaskIds.size()); for (SingularityTaskId taskId : activeTaskIds) { requestIdsToLookup.add(taskId.getRequestId()); } final Map<String, SingularityRequestWithState> idToRequest = Maps.uniqueIndex(requestManager.getRequests(requestIdsToLookup), SingularityRequestWithState.REQUEST_STATE_TO_REQUEST_ID); for (SingularityTaskId taskId : activeTaskIds) { SingularityRequestWithState requestWithState = idToRequest.get(taskId.getRequestId()); if (requestWithState == null) { LOG.warn("Active request not found for task ID {}", taskId); continue; } SingularityRequest request = requestWithState.getRequest(); if (!request.isLongRunning()) { checkForOverdueScheduledJob(now - taskId.getStartedAt(), taskId, request); checkTaskExecutionTimeLimit(now, taskId, request); } } }
if (!request.isLongRunning() && pendingRequest.getRunAt().isPresent()) { nextRunAt = Math.max(nextRunAt, pendingRequest.getRunAt().get());
validator.checkActionEnabled(SingularityAction.BOUNCE_REQUEST); checkBadRequest(requestWithState.getRequest().isLongRunning(), "Can not bounce a %s request (%s)", requestWithState.getRequest().getRequestType(), requestWithState);
private boolean shouldHealthcheck(final SingularityTask task, final Optional<SingularityRequestWithState> request, Optional<SingularityPendingDeploy> pendingDeploy) { if (disasterManager.isDisabled(SingularityAction.RUN_HEALTH_CHECKS)) { return false; } if (!task.getTaskRequest().getRequest().isLongRunning() || !task.getTaskRequest().getDeploy().getHealthcheck().isPresent() || task.getTaskRequest().getDeploy().getHealthcheck().get().getHealthcheckResultFilePath().isPresent()) { return false; } if (task.getTaskRequest().getPendingTask().getSkipHealthchecks().or(false)) { return false; } if (pendingDeploy.isPresent() && pendingDeploy.get().getDeployMarker().getDeployId().equals(task.getTaskId().getDeployId()) && task.getTaskRequest().getDeploy().getSkipHealthchecksOnDeploy().or(false)) { return false; } if (request.isPresent() && request.get().getRequest().getSkipHealthchecks().or(false)) { return false; } Optional<SingularityTaskHealthcheckResult> lastHealthcheck = taskManager.getLastHealthcheck(task.getTaskId()); if (lastHealthcheck.isPresent() && !lastHealthcheck.get().isFailed()) { LOG.debug("Not submitting a new healthcheck for {} because it already passed a healthcheck", task.getTaskId()); return false; } return true; }
(!(taskCleanup.getCleanupType() == TaskCleanupType.PAUSING) || request.isLongRunning())) { LOG.debug("Killing a task {} immediately because the request was paused", taskCleanup); return true; if (!request.isLongRunning()) { final long timeSinceCleanup = System.currentTimeMillis() - taskCleanup.getTimestamp(); final long maxWaitTime = request.getKillOldNonLongRunningTasksAfterMillis().or(killNonLongRunningTasksInCleanupAfterMillis);
validator.checkActionEnabled(SingularityAction.BOUNCE_REQUEST); checkBadRequest(newRequest.isLongRunning(), "Can not bounce a %s request (%s)", newRequest.getRequestType(), newRequest); checkConflict(oldRequestWithState.getState() != RequestState.PAUSED, "Request %s is paused. Unable to bounce (it must be manually unpaused first)", newRequest.getId()); checkConflict(!requestManager.cleanupRequestExists(newRequest.getId(), RequestCleanupType.BOUNCE), "Request %s is already bouncing cannot bounce again", newRequest.getId());
if (!request.isLongRunning()) { checkBadRequest(!request.isLoadBalanced(), "non-longRunning (scheduled/oneoff) requests can not be load balanced"); checkBadRequest(!request.isRackSensitive(), "non-longRunning (scheduled/oneoff) requests can not be rack sensitive");
if (request.isLongRunning()) { deployProgress = Optional.of(new SingularityDeployProgress( Math.min(deploy.getDeployInstanceCountPerStep().or(request.getInstancesSafe()), request.getInstancesSafe()),
} else if (!request.isLongRunning()) { if (request.getInstances().isPresent() && (activeTasks.size() + pendingTasks.size() < request.getInstances().get())) {
private List<SingularityTaskId> getMatchingTaskIds(SingularityRequest request, SingularityDeployKey deployKey) { List<SingularityTaskId> activeTaskIdsForRequest = leaderCache.getActiveTaskIdsForRequest(deployKey.getRequestId()); if (request.isLongRunning()) { Set<SingularityTaskId> killedTaskIds = leaderCache.getKilledTasks().stream() .map(SingularityKilledTaskIdRecord::getTaskId) .collect(Collectors.toSet()); List<SingularityTaskId> matchingTaskIds = new ArrayList<>(); for (SingularityTaskId taskId : activeTaskIdsForRequest) { if (!taskId.getDeployId().equals(deployKey.getDeployId())) { continue; } if (leaderCache.getCleanupTaskIds().contains(taskId)) { continue; } if (killedTaskIds.contains(taskId)) { continue; } matchingTaskIds.add(taskId); } return matchingTaskIds; } else { return new ArrayList<>(activeTaskIdsForRequest); } }
@Override public void runActionOnPoll() { final long now = System.currentTimeMillis(); final List<SingularityTaskId> activeTaskIds = taskManager.getActiveTaskIds(); final Set<String> requestIdsToLookup = Sets.newHashSetWithExpectedSize(activeTaskIds.size()); for (SingularityTaskId taskId : activeTaskIds) { requestIdsToLookup.add(taskId.getRequestId()); } final Map<String, SingularityRequestWithState> idToRequest = Maps.uniqueIndex(requestManager.getRequests(requestIdsToLookup), SingularityRequestWithState.REQUEST_STATE_TO_REQUEST_ID); for (SingularityTaskId taskId : activeTaskIds) { SingularityRequestWithState requestWithState = idToRequest.get(taskId.getRequestId()); if (requestWithState == null) { LOG.warn("Active request not found for task ID {}", taskId); continue; } SingularityRequest request = requestWithState.getRequest(); if (!request.isLongRunning()) { checkForOverdueScheduledJob(now - taskId.getStartedAt(), taskId, request); checkTaskExecutionTimeLimit(now, taskId, request); } } }
if (!request.isLongRunning() && pendingRequest.getRunAt().isPresent()) { nextRunAt = Math.max(nextRunAt, pendingRequest.getRunAt().get());
validator.checkActionEnabled(SingularityAction.BOUNCE_REQUEST); checkBadRequest(requestWithState.getRequest().isLongRunning(), "Can not bounce a %s request (%s)", requestWithState.getRequest().getRequestType(), requestWithState);
private boolean shouldHealthcheck(final SingularityTask task, final Optional<SingularityRequestWithState> request, Optional<SingularityPendingDeploy> pendingDeploy) { if (disasterManager.isDisabled(SingularityAction.RUN_HEALTH_CHECKS)) { return false; } if (!task.getTaskRequest().getRequest().isLongRunning() || !task.getTaskRequest().getDeploy().getHealthcheck().isPresent() || task.getTaskRequest().getDeploy().getHealthcheck().get().getHealthcheckResultFilePath().isPresent()) { return false; } if (task.getTaskRequest().getPendingTask().getSkipHealthchecks().or(false)) { return false; } if (pendingDeploy.isPresent() && pendingDeploy.get().getDeployMarker().getDeployId().equals(task.getTaskId().getDeployId()) && task.getTaskRequest().getDeploy().getSkipHealthchecksOnDeploy().or(false)) { return false; } if (request.isPresent() && request.get().getRequest().getSkipHealthchecks().or(false)) { return false; } Optional<SingularityTaskHealthcheckResult> lastHealthcheck = taskManager.getLastHealthcheck(task.getTaskId()); if (lastHealthcheck.isPresent() && !lastHealthcheck.get().isFailed()) { LOG.debug("Not submitting a new healthcheck for {} because it already passed a healthcheck", task.getTaskId()); return false; } return true; }
validator.checkActionEnabled(SingularityAction.BOUNCE_REQUEST); checkBadRequest(newRequest.isLongRunning(), "Can not bounce a %s request (%s)", newRequest.getRequestType(), newRequest); checkConflict(oldRequestWithState.getState() != RequestState.PAUSED, "Request %s is paused. Unable to bounce (it must be manually unpaused first)", newRequest.getId()); checkConflict(!requestManager.cleanupRequestExists(newRequest.getId(), RequestCleanupType.BOUNCE), "Request %s is already bouncing cannot bounce again", newRequest.getId());
(!(taskCleanup.getCleanupType() == TaskCleanupType.PAUSING) || request.isLongRunning())) { LOG.debug("Killing a task {} immediately because the request was paused", taskCleanup); return true; if (!request.isLongRunning()) { final long timeSinceCleanup = System.currentTimeMillis() - taskCleanup.getTimestamp(); final long maxWaitTime = request.getKillOldNonLongRunningTasksAfterMillis().or(killNonLongRunningTasksInCleanupAfterMillis);
if (!request.isLongRunning()) { checkBadRequest(!request.isLoadBalanced(), "non-longRunning (scheduled/oneoff) requests can not be load balanced"); checkBadRequest(!request.isRackSensitive(), "non-longRunning (scheduled/oneoff) requests can not be rack sensitive");
if (request.isLongRunning()) { deployProgress = Optional.of(new SingularityDeployProgress( Math.min(deploy.getDeployInstanceCountPerStep().or(request.getInstancesSafe()), request.getInstancesSafe()),