private void relaunchTask(SingularityTask task) { SingularityPendingTask pendingTask = task.getTaskRequest().getPendingTask(); SingularityPendingRequest pendingRequest = new SingularityPendingRequestBuilder() .setRequestId(task.getTaskRequest().getRequest().getId()) .setDeployId(task.getTaskRequest().getDeploy().getId()) .setPendingType(PendingType.RETRY) .setUser(pendingTask.getUser()) .setRunId(pendingTask.getRunId()) .setCmdLineArgsList(pendingTask.getCmdLineArgsList()) .setSkipHealthchecks(pendingTask.getSkipHealthchecks()) .setMessage(pendingTask.getMessage()) .setResources(pendingTask.getResources()) .setS3UploaderAdditionalFiles(pendingTask.getS3UploaderAdditionalFiles()) .setRunAsUserOverride(pendingTask.getRunAsUserOverride()) .setEnvOverrides(pendingTask.getEnvOverrides()) .setExtraArtifacts(pendingTask.getExtraArtifacts()) .setActionId(pendingTask.getActionId()) .setRunAt(pendingTask.getPendingTaskId().getNextRunAt()) .setTimestamp(System.currentTimeMillis()) .build(); requestManager.addToPendingQueue(pendingRequest); }
public SingularityPendingTask build() { return new SingularityPendingTask( pendingTaskId, cmdLineArgsList, user, runId, skipHealthchecks, message, resources, s3UploaderAdditionalFiles, runAsUserOverride, envOverrides, extraArtifacts, actionId ); }
public static SingularityTaskState fromTaskHistory(SingularityTaskHistory taskHistory) { return new SingularityTaskState( Optional.of(taskHistory.getTask().getTaskId()), Optional.of(taskHistory.getTask().getTaskRequest().getPendingTask().getPendingTaskId()), taskHistory.getTask().getTaskRequest().getPendingTask().getRunId(), Optional.of(taskHistory.getLastTaskUpdate().get().getTaskState()), taskHistory.getTaskUpdates(), false ); }
private void prepareEnvironment(final SingularityTaskRequest task, SingularityTaskId taskId, CommandInfo.Builder commandBuilder, final SingularityOfferHolder offerHolder, final Optional<long[]> ports) { Map<String, Object> envVars = new HashMap<>(); envVars.put("INSTANCE_NO", task.getPendingTask().getPendingTaskId().getInstanceNo()); envVars.put("TASK_HOST", offerHolder.getHostname()); envVars.put("AVAILABILITY_ZONE", offerHolder.getRackId()); envVars.put("TASK_REQUEST_ID", task.getPendingTask().getPendingTaskId().getRequestId()); envVars.put("TASK_DEPLOY_ID", taskId.getDeployId()); envVars.put("TASK_ID", taskId.getId()); envVars.put("ESTIMATED_INSTANCE_COUNT", task.getRequest().getInstancesSafe()); if (task.getPendingTask().getUser().isPresent()) { envVars.put("STARTED_BY_USER", task.getPendingTask().getUser().get()); if (task.getPendingTask().getResources().isPresent()) { Resources override = task.getPendingTask().getResources().get(); for (Entry entry : task.getPendingTask().getEnvOverrides().entrySet()) { envVars.put(entry.getKey().toString(), entry.getValue());
@Override public int hashCode() { return Objects.hash(pendingTask.getPendingTaskId()); }
pendingType = PendingType.RETRY; if (task.isPresent()) { cmdLineArgsList = task.get().getTaskRequest().getPendingTask().getCmdLineArgsList(); resources = task.get().getTaskRequest().getPendingTask().getResources();
public Optional<SingularityTaskId> getTaskByRunId(String requestId, String runId) { Map<SingularityTaskId, SingularityTask> activeTasks = getTasks(getActiveTaskIdsForRequest(requestId)); for (Map.Entry<SingularityTaskId, SingularityTask> entry : activeTasks.entrySet()) { if (entry.getValue().getTaskRequest().getPendingTask().getRunId().isPresent() && entry.getValue().getTaskRequest().getPendingTask().getRunId().get().equals(runId)) { return Optional.of(entry.getKey()); } } Map<SingularityTaskId, SingularityTask> inactiveTasks = getTasks(getInactiveTaskIdsForRequest(requestId)); for (Map.Entry<SingularityTaskId, SingularityTask> entry : inactiveTasks.entrySet()) { if (entry.getValue().getTaskRequest().getPendingTask().getRunId().isPresent() && entry.getValue().getTaskRequest().getPendingTask().getRunId().get().equals(runId)) { return Optional.of(entry.getKey()); } } return Optional.absent(); }
private Optional<Integer> getCpuHardLimit(SingularityTaskRequest task) { if (configuration.getCpuHardLimit().isPresent()) { Optional<Resources> maybeResources = task.getPendingTask().getResources().or(task.getDeploy().getResources()); if (maybeResources.isPresent()) { double requestedCpus = maybeResources.get().getCpus(); int scaledLimit = (int) Math.ceil(requestedCpus * configuration.getCpuHardLimitScaleFactor()); return Optional.of(Math.max(scaledLimit, configuration.getCpuHardLimit().get())); } } return Optional.absent(); }
private void createTaskAndDeletePendingTaskPrivate(SingularityTask task) throws Exception { // TODO: Should more of the below be done within a transaction? deletePendingTask(task.getTaskRequest().getPendingTask().getPendingTaskId()); final long now = System.currentTimeMillis(); String msg = String.format("Task launched because of %s", task.getTaskRequest().getPendingTask().getPendingTaskId().getPendingType().name()); if (task.getTaskRequest().getPendingTask().getUser().isPresent()) { msg = String.format("%s by %s", msg, task.getTaskRequest().getPendingTask().getUser().get()); } if (task.getTaskRequest().getPendingTask().getMessage().isPresent()) { msg = String.format("%s (%s)", msg, task.getTaskRequest().getPendingTask().getMessage().get()); } saveTaskHistoryUpdate(new SingularityTaskHistoryUpdate(task.getTaskId(), now, ExtendedTaskState.TASK_LAUNCHED, Optional.of(msg), Optional.<String>absent())); saveLastActiveTaskStatus(new SingularityTaskStatusHolder(task.getTaskId(), Optional.absent(), now, serverId, Optional.of(task.getAgentId().getValue()))); try { final String path = getTaskPath(task.getTaskId()); CuratorTransactionFinal transaction = curator.inTransaction().create().forPath(path, taskTranscoder.toBytes(task)).and(); transaction.create().forPath(getActivePath(task.getTaskId().getId())).and().commit(); leaderCache.putActiveTask(task); taskCache.set(path, task); } catch (KeeperException.NodeExistsException nee) { LOG.error("Task or active path already existed for {}", task.getTaskId()); } }
prepareMesosUriDownloads(task.getPendingTask().getExtraArtifacts(), commandBuilder); if (task.getPendingTask().getCmdLineArgsList().isPresent() && !task.getPendingTask().getCmdLineArgsList().get().isEmpty()) { LOG.trace("Adding cmd line args {} to task {} executorData", task.getPendingTask().getCmdLineArgsList(), taskId.getId()); extraCmdLineArgsBuilder.addAll(executorDataBldr.getExtraCmdLineArgs()); extraCmdLineArgsBuilder.addAll(task.getPendingTask().getCmdLineArgsList().get()); executorDataBldr.setExtraCmdLineArgs(extraCmdLineArgsBuilder.build()); uploaderAdditionalFiles.addAll(configuration.getS3ConfigurationOptional().get().getS3UploaderAdditionalFiles()); uploaderAdditionalFiles.addAll(task.getPendingTask().getS3UploaderAdditionalFiles()); uploaderAdditionalFiles.addAll(task.getDeploy().getS3UploaderAdditionalFiles()); Optional<Long> maybeApplyAfterBytes = configuration.getS3ConfigurationOptional().isPresent() ? configuration.getS3ConfigurationOptional().get().getApplyS3StorageClassAfterBytes() : Optional.<Long>absent(); if (task.getPendingTask().getRunAsUserOverride().isPresent()) { executorDataBldr.setUser(task.getPendingTask().getRunAsUserOverride());
LOG.trace("Task {} requires a rack in {} (current rack {})", taskRequest.getPendingTask().getPendingTaskId(), taskRequest.getRequest().getRackAffinity().get(), rackId); return SlaveMatchState.RACK_AFFINITY_NOT_MATCHING; double numFromSameBounceOnSlave = 0; double numOtherDeploysOnSlave = 0; boolean taskLaunchedFromBounceWithActionId = taskRequest.getPendingTask().getPendingTaskId().getPendingType() == PendingType.BOUNCE && taskRequest.getPendingTask().getActionId().isPresent(); if (maybeTask.isPresent()) { SingularityPendingTask pendingTask = maybeTask.get().getTaskRequest().getPendingTask(); if (pendingTask.getPendingTaskId().getPendingType() == PendingType.BOUNCE) { if (pendingTask.getActionId().isPresent()) { if (pendingTask.getActionId().get().equals(taskRequest.getPendingTask().getActionId().get())) { numFromSameBounceOnSlave++;
CommandInfo.Builder commandBldr = CommandInfo.newBuilder(); Optional<String> specifiedUser = task.getPendingTask().getRunAsUserOverride().or(task.getDeploy().getUser()); if (specifiedUser.isPresent()) { commandBldr.setUser(specifiedUser.get()); if (task.getPendingTask().getCmdLineArgsList().isPresent()) { commandBldr.addAllArguments(task.getPendingTask().getCmdLineArgsList().get()); (task.getPendingTask().getCmdLineArgsList().isPresent() && !task.getPendingTask().getCmdLineArgsList().get().isEmpty())) { commandBldr.setShell(false); combinedArtifacts.addAll(task.getPendingTask().getExtraArtifacts());
for (SingularityPendingTask matchingTask : Iterables.filter(pendingTasks, SingularityPendingTask.matchingRequest(requestId))) { LOG.debug("Deleting scheduled task {} due to {}", matchingTask, requestCleanup); taskManager.deletePendingTask(matchingTask.getPendingTaskId()); numScheduledTasksRemoved.getAndIncrement();
@GET @Path("/request/{requestId}/command-line-args") @Operation(summary = "Get a list of recently used command line args for an on-demand or scheduled request") public Set<List<String>> getRecentCommandLineArgs( @Parameter(hidden = true) @Auth SingularityUser user, @Parameter(required = true, description = "Request ID to look up") @PathParam("requestId") String requestId, @Parameter(description = "Max number of recent args to return") @QueryParam("count") Optional<Integer> count) { authorizationHelper.checkForAuthorizationByRequestId(requestId, user, SingularityAuthorizationScope.READ); final int argCount = count.or(DEFAULT_ARGS_HISTORY_COUNT); List<SingularityTaskIdHistory> historiesToCheck = taskHistoryHelper.getBlendedHistory(new SingularityTaskHistoryQuery( Optional.of(requestId), Optional.<String>absent(), Optional.<String>absent(), Optional.<String>absent(), Optional.<ExtendedTaskState>absent(), Optional.<Long>absent(), Optional.<Long>absent(), Optional.<Long>absent(), Optional.<Long>absent(), Optional.<OrderDirection>absent()), 0, argCount); Collections.sort(historiesToCheck); Set<List<String>> args = new HashSet<>(); for (SingularityTaskIdHistory taskIdHistory : historiesToCheck) { Optional<SingularityTask> maybeTask = taskHistoryHelper.getTask(taskIdHistory.getTaskId()); if (maybeTask.isPresent() && maybeTask.get().getTaskRequest().getPendingTask().getCmdLineArgsList().isPresent()) { List<String> taskArgs = maybeTask.get().getTaskRequest().getPendingTask().getCmdLineArgsList().get(); if (!taskArgs.isEmpty()) { args.add(maybeTask.get().getTaskRequest().getPendingTask().getCmdLineArgsList().get()); } } } return args; }
Assert.assertEquals(taskManager.getCleanupTasks().get(0).getActionId().get(), taskManager.getPendingTasks().get(0).getActionId().get());
public void savePendingTask(SingularityPendingTask pendingTask) { if (!active) { LOG.warn("savePendingTask {}, but not active", pendingTask); return; } pendingTaskIdToPendingTask.put(pendingTask.getPendingTaskId(), pendingTask); }
if (pendingTask.getRunId().isPresent() && pendingTask.getRunId().get().equals(runId)) { return Optional.of(new SingularityTaskState( Optional.absent(), pendingTask.getPendingTaskId(), pendingTask.getRunId(), Optional.absent(), Collections.emptyList(),
private void prepareEnvironment(final SingularityTaskRequest task, SingularityTaskId taskId, CommandInfo.Builder commandBuilder, final SingularityOfferHolder offerHolder, final Optional<long[]> ports) { Map<String, Object> envVars = new HashMap<>(); envVars.put("INSTANCE_NO", task.getPendingTask().getPendingTaskId().getInstanceNo()); envVars.put("TASK_HOST", offerHolder.getHostname()); envVars.put("AVAILABILITY_ZONE", offerHolder.getRackId()); envVars.put("TASK_REQUEST_ID", task.getPendingTask().getPendingTaskId().getRequestId()); envVars.put("TASK_DEPLOY_ID", taskId.getDeployId()); envVars.put("TASK_ID", taskId.getId()); envVars.put("ESTIMATED_INSTANCE_COUNT", task.getRequest().getInstancesSafe()); if (task.getPendingTask().getUser().isPresent()) { envVars.put("STARTED_BY_USER", task.getPendingTask().getUser().get()); if (task.getPendingTask().getResources().isPresent()) { Resources override = task.getPendingTask().getResources().get(); for (Entry entry : task.getPendingTask().getEnvOverrides().entrySet()) { envVars.put(entry.getKey().toString(), entry.getValue());
Resources resourcesForRunningTask = taskManager.getActiveTasks().get(0).getTaskRequest().getPendingTask().getResources().get(); Assert.assertEquals(Optional.of(Collections.singletonList("extraFlag")), taskManager.getActiveTasks().get(0).getTaskRequest().getPendingTask().getCmdLineArgsList()); Assert.assertEquals(17, resourcesForRunningTask.getCpus(), 0.01); Assert.assertEquals(1337, resourcesForRunningTask.getMemoryMb(), 0.01); resourcesForRunningTask = taskManager.getActiveTasks().get(0).getTaskRequest().getPendingTask().getResources().get(); Assert.assertEquals(Optional.of(Collections.singletonList("extraFlag")), taskManager.getActiveTasks().get(0).getTaskRequest().getPendingTask().getCmdLineArgsList()); Assert.assertEquals(17, resourcesForRunningTask.getCpus(), 0.01); Assert.assertEquals(1337, resourcesForRunningTask.getMemoryMb(), 0.01); resourcesForRunningTask = taskManager.getActiveTasks().get(0).getTaskRequest().getPendingTask().getResources().get(); Assert.assertEquals(Optional.of(Collections.singletonList("extraFlag")), taskManager.getActiveTasks().get(0).getTaskRequest().getPendingTask().getCmdLineArgsList()); Assert.assertEquals(17, resourcesForRunningTask.getCpus(), 0.01); Assert.assertEquals(1337, resourcesForRunningTask.getMemoryMb(), 0.01);
public static SingularityTaskIdHistory fromTaskIdAndTaskAndUpdates(SingularityTaskId taskId, SingularityTask task, List<SingularityTaskHistoryUpdate> updates) { ExtendedTaskState lastTaskState = null; long updatedAt = taskId.getStartedAt(); if (updates != null && !updates.isEmpty()) { SingularityTaskHistoryUpdate lastUpdate = Collections.max(updates); lastTaskState = lastUpdate.getTaskState(); updatedAt = lastUpdate.getTimestamp(); } return new SingularityTaskIdHistory(taskId, updatedAt, Optional.fromNullable(lastTaskState), task.getTaskRequest().getPendingTask().getRunId()); }