@Override public void setStatus(final TaskStatus status) { Preconditions.checkNotNull(status, "status"); log.info("Updating task %s to status: %s", status.getId(), status); final boolean set = handler.setStatus( status.getId(), status.isRunnable(), status ); if (!set) { throw new ISE("Active task not found: %s", status.getId()); } }
@Override public int hashCode() { return java.util.Objects.hash(getId(), status, getDuration(), getErrorMsg()); } }
@Override public TaskStatus run(TaskToolbox toolbox) { return TaskStatus.failure("how?"); } }
@Override public void onSuccess(final TaskStatus status) { log.info("Received %s status for task: %s", status.getStatusCode(), status.getId()); handleStatus(status); }
private static BiFunction<TaskInfo<Task, TaskStatus>, RunnerTaskState, TaskStatusPlus> newTaskInfo2TaskStatusPlusFn() { return (taskInfo, runnerTaskState) -> new TaskStatusPlus( taskInfo.getId(), taskInfo.getTask() == null ? null : taskInfo.getTask().getType(), taskInfo.getCreatedTime(), // Would be nice to include the real queue insertion time, but the // TaskStorage API doesn't yet allow it. DateTimes.EPOCH, taskInfo.getStatus().getStatusCode(), runnerTaskState, taskInfo.getStatus().getDuration(), TaskLocation.unknown(), taskInfo.getDataSource(), taskInfo.getStatus().getErrorMsg() ); }
if (announcement.getTaskStatus().isRunnable()) { TaskStatus completionStatus = null; TaskAnnouncement completedAnnouncement = completedTasks.get(announcement.getTaskId()); if (completedAnnouncement != null) { completionStatus = completedAnnouncement.getTaskStatus(); } else if (!runningTasks.containsKey(announcement.getTaskStatus().getId())) { completionStatus = TaskStatus.failure(announcement.getTaskStatus().getId()); announcement.getTaskStatus().getId(), completionStatus.getStatusCode() ); workerCuratorCoordinator.updateTaskStatusAnnouncement( TaskAnnouncement.create( announcement.getTaskStatus().getId(), announcement.getTaskType(), announcement.getTaskResource(),
/** * Inverse of {@link #isRunnable}. * * @return whether the task is complete. */ @JsonIgnore public boolean isComplete() { return !isRunnable(); }
if (status.isComplete()) { IndexTaskUtils.setTaskStatusDimensions(metricBuilder, status); emitter.emit(metricBuilder.build("task/run/time", status.getDuration())); status.getStatusCode(), task, status.getDuration() ); if (status.isSuccess()) { totalSuccessfulTaskCount.computeIfAbsent(task.getDataSource(), k -> new AtomicLong()) .incrementAndGet(); log.makeAlert(e, "Failed to handle task status") .addData("task", task.getId()) .addData("statusCode", status.getStatusCode()) .emit();
Assert.assertEquals(TaskState.SUCCESS, taskStatus.getStatusCode()); Assert.assertTrue(status.getErrorMsg() .contains("java.lang.IllegalArgumentException\n\tat java.nio.Buffer.position"));
public TaskStatus success() { return TaskStatus.success(getId()); }
@JsonCreator private TaskAnnouncement( @JsonProperty("id") String taskId, @JsonProperty("type") String taskType, @JsonProperty("status") TaskState status, @JsonProperty("taskStatus") TaskStatus taskStatus, @JsonProperty("taskResource") TaskResource taskResource, @JsonProperty("taskLocation") TaskLocation taskLocation, @JsonProperty("taskDataSource") String taskDataSource ) { this.taskType = taskType; if (taskStatus != null) { this.taskStatus = taskStatus; } else { // Can be removed when backwards compat is no longer needed this.taskStatus = TaskStatus.fromCode(taskId, status); } this.taskResource = taskResource == null ? new TaskResource(this.taskStatus.getId(), 1) : taskResource; this.taskLocation = taskLocation == null ? TaskLocation.unknown() : taskLocation; this.taskDataSource = taskDataSource; }
@JsonProperty("id") public String getTaskId() { return taskStatus.getId(); }
if (!status.isComplete()) { log.warn( "WTF?! Got status notice for task [%s] that isn't complete (status = [%s])...", task.getId(), status.getStatusCode() ); return; details.status = status.withDuration(System.currentTimeMillis() - details.startTime); "Job's finished. Completed [%s] with status [%s]", task.getId(), status.getStatusCode() );
@Override public TaskStatus run(TaskToolbox toolbox) throws Exception { final List<DataSegment> segments = toolbox.getTaskActionClient().submit( new SegmentListUsedAction( getDataSource(), getInterval(), null ) ); SubTask mergeTask = new SubTask( getId(), getDataSource(), segments, aggregators, rollup, indexSpec, segmentWriteOutMediumFactory, getContext() ); final TaskStatus status = mergeTask.run(toolbox); if (!status.isSuccess()) { return TaskStatus.fromCode(getId(), status.getStatusCode()); } return success(); }
private void handleStatus(final TaskStatus status) { try { // If we're not supposed to be running anymore, don't do anything. Somewhat racey if the flag gets set // after we check and before we commit the database transaction, but better than nothing. if (!active) { log.info("Abandoning task due to shutdown: %s", task.getId()); return; } notifyStatus(task, status); // Emit event and log, if the task is done if (status.isComplete()) { IndexTaskUtils.setTaskStatusDimensions(metricBuilder, status); emitter.emit(metricBuilder.build("task/run/time", status.getDuration())); log.info( "Task %s: %s (%d run duration)", status.getStatusCode(), task, status.getDuration() ); } } catch (Exception e) { log.makeAlert(e, "Failed to handle task status") .addData("task", task.getId()) .addData("statusCode", status.getStatusCode()) .emit(); } } }
public static void checkTaskStatusErrorMsgForParseExceptionsExceeded(TaskStatus status) { // full stacktrace will be too long and make tests brittle (e.g. if line # changes), just match the main message Assert.assertTrue(status.getErrorMsg().contains("Max parse exceptions exceeded, terminating task...")); }
public static TaskStatus running(String taskId) { return new TaskStatus(taskId, TaskState.RUNNING, -1, null); }
@Override public Optional<TaskStatus> getTaskStatus(String id) { final TaskStatusResponse response = client.getTaskStatus(id); return response == null ? Optional.absent() : Optional.of(TaskStatus.fromCode(id, response.getStatus().getStatusCode())); } }
@JsonProperty("status") public TaskState getStatus() { return taskStatus.getStatusCode(); }