@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; }
private void populateTaskEmailProperties(Map<String, Object> templateProperties, SingularityTaskId taskId, Collection<SingularityTaskHistoryUpdate> taskHistory, ExtendedTaskState taskState, List<SingularityTaskMetadata> taskMetadata, SingularityEmailType emailType) { Optional<SingularityTask> task = taskManager.getTask(taskId); Optional<String> directory = taskManager.getDirectory(taskId); templateProperties.put("singularityTaskLink", mailTemplateHelpers.getSingularityTaskLink(taskId.getId())); // Grab the tails of log files from remote mesos slaves. templateProperties.put("logTails", mailTemplateHelpers.getTaskLogs(taskId, task, directory)); templateProperties.put("taskId", taskId.getId()); templateProperties.put("deployId", taskId.getDeployId()); templateProperties.put("taskDirectory", directory.or("directory missing")); templateProperties.put("color", emailType.getColor()); if (task.isPresent()) { templateProperties.put("slaveHostname", task.get().getHostname()); if (task.get().getTaskRequest().getPendingTask().getCmdLineArgsList().isPresent()) { templateProperties.put("extraCmdLineArguments", task.get().getTaskRequest().getPendingTask().getCmdLineArgsList().get()); } } boolean needsBeenPrefix = taskState == ExtendedTaskState.TASK_LOST || taskState == ExtendedTaskState.TASK_KILLED; templateProperties.put("status", String.format("%s%s", needsBeenPrefix ? "has been " : "has ", taskState.getDisplayName())); templateProperties.put("taskStateLost", taskState == ExtendedTaskState.TASK_LOST); templateProperties.put("taskStateFailed", taskState == ExtendedTaskState.TASK_FAILED); templateProperties.put("taskStateFinished", taskState == ExtendedTaskState.TASK_FINISHED); templateProperties.put("taskStateKilled", taskState == ExtendedTaskState.TASK_KILLED); templateProperties.put("taskStateRunning", taskState == ExtendedTaskState.TASK_RUNNING); templateProperties.put("taskHasMetadata", !taskMetadata.isEmpty()); templateProperties.put("taskMetadata", mailTemplateHelpers.getJadeTaskMetadata(taskMetadata)); templateProperties.put("taskUpdates", mailTemplateHelpers.getJadeTaskHistory(taskHistory)); templateProperties.put("taskRan", mailTemplateHelpers.didTaskRun(taskHistory)); }
if (task.getPendingTask().getCmdLineArgsList().isPresent()) { commandBldr.addAllArguments(task.getPendingTask().getCmdLineArgsList().get()); (task.getPendingTask().getCmdLineArgsList().isPresent() && !task.getPendingTask().getCmdLineArgsList().get().isEmpty())) { commandBldr.setShell(false);
pendingType = PendingType.RETRY; if (task.isPresent()) { cmdLineArgsList = task.get().getTaskRequest().getPendingTask().getCmdLineArgsList(); resources = task.get().getTaskRequest().getPendingTask().getResources();
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());
Assert.assertTrue(!taskManager.getPendingTask(pt1).get().getCmdLineArgsList().isPresent()); Assert.assertTrue(taskManager.getPendingTask(pt2).get().getCmdLineArgsList().get().get(0).equals("cmd line args")); Assert.assertTrue(taskManager.getPendingTask(pt2).get().getCmdLineArgsList().get().size() == 1);
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); 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); 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);
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); }
@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; }
private void populateTaskEmailProperties(Map<String, Object> templateProperties, SingularityTaskId taskId, Collection<SingularityTaskHistoryUpdate> taskHistory, ExtendedTaskState taskState, List<SingularityTaskMetadata> taskMetadata, SingularityEmailType emailType) { Optional<SingularityTask> task = taskManager.getTask(taskId); Optional<String> directory = taskManager.getDirectory(taskId); templateProperties.put("singularityTaskLink", mailTemplateHelpers.getSingularityTaskLink(taskId.getId())); // Grab the tails of log files from remote mesos slaves. templateProperties.put("logTails", mailTemplateHelpers.getTaskLogs(taskId, task, directory)); templateProperties.put("taskId", taskId.getId()); templateProperties.put("deployId", taskId.getDeployId()); templateProperties.put("taskDirectory", directory.or("directory missing")); templateProperties.put("color", emailType.getColor()); if (task.isPresent()) { templateProperties.put("slaveHostname", task.get().getHostname()); if (task.get().getTaskRequest().getPendingTask().getCmdLineArgsList().isPresent()) { templateProperties.put("extraCmdLineArguments", task.get().getTaskRequest().getPendingTask().getCmdLineArgsList().get()); } } boolean needsBeenPrefix = taskState == ExtendedTaskState.TASK_LOST || taskState == ExtendedTaskState.TASK_KILLED; templateProperties.put("status", String.format("%s%s", needsBeenPrefix ? "has been " : "has ", taskState.getDisplayName())); templateProperties.put("taskStateLost", taskState == ExtendedTaskState.TASK_LOST); templateProperties.put("taskStateFailed", taskState == ExtendedTaskState.TASK_FAILED); templateProperties.put("taskStateFinished", taskState == ExtendedTaskState.TASK_FINISHED); templateProperties.put("taskStateKilled", taskState == ExtendedTaskState.TASK_KILLED); templateProperties.put("taskStateRunning", taskState == ExtendedTaskState.TASK_RUNNING); templateProperties.put("taskHasMetadata", !taskMetadata.isEmpty()); templateProperties.put("taskMetadata", mailTemplateHelpers.getJadeTaskMetadata(taskMetadata)); templateProperties.put("taskUpdates", mailTemplateHelpers.getJadeTaskHistory(taskHistory)); templateProperties.put("taskRan", mailTemplateHelpers.didTaskRun(taskHistory)); }
if (task.getPendingTask().getCmdLineArgsList().isPresent()) { commandBldr.addAllArguments(task.getPendingTask().getCmdLineArgsList().get()); (task.getPendingTask().getCmdLineArgsList().isPresent() && !task.getPendingTask().getCmdLineArgsList().get().isEmpty())) { commandBldr.setShell(false);
pendingType = PendingType.RETRY; if (task.isPresent()) { cmdLineArgsList = task.get().getTaskRequest().getPendingTask().getCmdLineArgsList(); resources = task.get().getTaskRequest().getPendingTask().getResources();
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());
Assert.assertTrue(!taskManager.getPendingTask(pt1).get().getCmdLineArgsList().isPresent()); Assert.assertTrue(taskManager.getPendingTask(pt2).get().getCmdLineArgsList().get().get(0).equals("cmd line args")); Assert.assertTrue(taskManager.getPendingTask(pt2).get().getCmdLineArgsList().get().size() == 1);
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); 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); 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);
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); }