package com.hubspot.singularity; import java.util.Map; import org.apache.mesos.Protos.TaskState; import com.google.common.base.Optional; import com.google.common.base.Preconditions; import com.google.common.collect.Maps; public enum ExtendedTaskState { TASK_LAUNCHED("launched", false, Optional.<TaskState> absent()), TASK_STAGING("staging", false, Optional.of(TaskState.TASK_STAGING)), TASK_STARTING("starting", false, Optional.of(TaskState.TASK_STARTING)), TASK_RUNNING("running", false, Optional.of(TaskState.TASK_RUNNING)), TASK_CLEANING("cleaning", false, Optional.<TaskState> absent()), TASK_KILLING("killing", false, Optional.of(TaskState.TASK_KILLING)), TASK_FINISHED("finished", true, Optional.of(TaskState.TASK_FINISHED)), TASK_FAILED("failed", true, Optional.of(TaskState.TASK_FAILED)), TASK_KILLED("killed", true, Optional.of(TaskState.TASK_KILLED)), TASK_LOST("lost", true, Optional.of(TaskState.TASK_LOST)), TASK_LOST_WHILE_DOWN("lost", true, Optional.<TaskState> absent()), TASK_ERROR("error", true, Optional.of(TaskState.TASK_ERROR)); private static final Map<TaskState, ExtendedTaskState> map; static { map = Maps.newHashMapWithExpectedSize(ExtendedTaskState.values().length); for (ExtendedTaskState extendedTaskState : ExtendedTaskState.values()) { if (extendedTaskState.toTaskState().isPresent()) { map.put(extendedTaskState.toTaskState().get(), extendedTaskState); } } for (TaskState t : TaskState.values()) { if (map.get(t) == null) { throw new IllegalStateException("No ExtendedTaskState provided for TaskState " + t + ", you probably have incompatible versions of Mesos and Singularity."); } } } private final String displayName; private final boolean isDone; private final Optional<TaskState> taskState; ExtendedTaskState(String displayName, boolean isDone, Optional<TaskState> taskState) { this.displayName = displayName; this.isDone = isDone; this.taskState = taskState; } public String getDisplayName() { return displayName; } public boolean isDone() { return isDone; } public boolean isFailed() { return this == TASK_FAILED; } public boolean isSuccess() { return this == TASK_FINISHED; } public Optional<TaskState> toTaskState() { return taskState; } public static ExtendedTaskState fromTaskState(TaskState taskState) { ExtendedTaskState extendedTaskState = map.get(taskState); Preconditions.checkArgument(extendedTaskState != null, "No ExtendedTaskState for TaskState %s", taskState); return extendedTaskState; } }