package com.airbnb.airpal.api;
import com.google.common.base.Predicate;
public enum JobState {
/**
* Query has been accepted and is awaiting execution.
*/
QUEUED(false),
/**
* Query is being planned.
*/
PLANNING(false),
/**
* Query execution is being started.
*/
STARTING(false),
/**
* Query has at least one task in the output stage.
*/
RUNNING(false),
/**
* Query has finished executing and all output has been consumed.
*/
FINISHED_EXECUTION(false),
/**
* Job has finished forwarding all output to S3/Hive
*/
FINISHED(true),
/**
* Query was canceled by a user.
*/
CANCELED(true),
/**
* Query execution failed.
*/
FAILED(true);
private final boolean doneState;
private JobState(boolean doneState)
{
this.doneState = doneState;
}
/**
* Is this a terminal state.
*/
public boolean isDone()
{
return doneState;
}
public static Predicate<JobState> inDoneState()
{
return new Predicate<JobState>()
{
@Override
public boolean apply(JobState state)
{
return state.isDone();
}
};
}
public static JobState fromStatementState(String statementState) {
String state = statementState.equalsIgnoreCase("FINISHED") ? "FINISHED_EXECUTION" : statementState;
return JobState.valueOf(state);
}
}