0001
0002
0003
0004
0005
0006
0007
0008
0009
0010
0011
0012
0013
0014
0015
0016
0017
0018
0019 package org.apache.hive.service.cli;
0020
0021 import org.apache.hive.service.cli.thrift.TOperationState;
0022
0023
0024
0025
0026
0027 public enum OperationState {
0028 INITIALIZED(TOperationState.INITIALIZED_STATE, false),
0029 RUNNING(TOperationState.RUNNING_STATE, false),
0030 FINISHED(TOperationState.FINISHED_STATE, true),
0031 CANCELED(TOperationState.CANCELED_STATE, true),
0032 CLOSED(TOperationState.CLOSED_STATE, true),
0033 ERROR(TOperationState.ERROR_STATE, true),
0034 UNKNOWN(TOperationState.UKNOWN_STATE, false),
0035 PENDING(TOperationState.PENDING_STATE, false);
0036
0037 private final TOperationState tOperationState;
0038 private final boolean terminal;
0039
0040 OperationState(TOperationState tOperationState, boolean terminal) {
0041 this.tOperationState = tOperationState;
0042 this.terminal = terminal;
0043 }
0044
0045
0046 public static OperationState getOperationState(TOperationState tOperationState) {
0047 return OperationState.values()[tOperationState.getValue()];
0048 }
0049
0050 public static void validateTransition(OperationState oldState,
0051 OperationState newState)
0052 throws HiveSQLException {
0053 switch (oldState) {
0054 case INITIALIZED:
0055 switch (newState) {
0056 case PENDING:
0057 case RUNNING:
0058 case CANCELED:
0059 case CLOSED:
0060 return;
0061 }
0062 break;
0063 case PENDING:
0064 switch (newState) {
0065 case RUNNING:
0066 case FINISHED:
0067 case CANCELED:
0068 case ERROR:
0069 case CLOSED:
0070 return;
0071 }
0072 break;
0073 case RUNNING:
0074 switch (newState) {
0075 case FINISHED:
0076 case CANCELED:
0077 case ERROR:
0078 case CLOSED:
0079 return;
0080 }
0081 break;
0082 case FINISHED:
0083 case CANCELED:
0084 case ERROR:
0085 if (OperationState.CLOSED.equals(newState)) {
0086 return;
0087 }
0088 break;
0089 default:
0090
0091 }
0092 throw new HiveSQLException("Illegal Operation state transition " +
0093 "from " + oldState + " to " + newState);
0094 }
0095
0096 public void validateTransition(OperationState newState)
0097 throws HiveSQLException {
0098 validateTransition(this, newState);
0099 }
0100
0101 public TOperationState toTOperationState() {
0102 return tOperationState;
0103 }
0104
0105 public boolean isTerminal() {
0106 return terminal;
0107 }
0108 }