public ListenableFuture<QueryState> getStateChange(QueryState currentState) { return queryState.getStateChange(currentState); }
private static void assertStateChange(StateMachine<State> stateMachine, StateChanger stateChange, State expectedState) throws Exception { State initialState = stateMachine.get(); ListenableFuture<State> futureChange = stateMachine.getStateChange(initialState); SettableFuture<State> listenerChange = addTestListener(stateMachine); stateChange.run(); assertEquals(stateMachine.get(), expectedState); assertEquals(futureChange.get(10, SECONDS), expectedState); assertEquals(listenerChange.get(10, SECONDS), expectedState); // listeners should not be retained if we are in a terminal state boolean isTerminalState = stateMachine.isTerminalState(expectedState); if (isTerminalState) { assertEquals(stateMachine.getStateChangeListeners(), ImmutableSet.of()); } }
private static void assertNoStateChange(StateMachine<State> stateMachine, StateChanger stateChange) { State initialState = stateMachine.get(); ListenableFuture<State> futureChange = stateMachine.getStateChange(initialState); SettableFuture<State> listenerChange = addTestListener(stateMachine); // listeners should not be added if we are in a terminal state, but listener should fire boolean isTerminalState = stateMachine.isTerminalState(initialState); if (isTerminalState) { assertEquals(stateMachine.getStateChangeListeners(), ImmutableSet.of()); } stateChange.run(); assertEquals(stateMachine.get(), initialState); // the future change will trigger if the state machine is in a terminal state // this is to prevent waiting for state changes that will never occur assertEquals(futureChange.isDone(), isTerminalState); futureChange.cancel(true); // test listener future only completes if the state actually changed assertFalse(listenerChange.isDone()); listenerChange.cancel(true); }
public ListenableFuture<TaskState> getStateChange(TaskState currentState) { requireNonNull(currentState, "currentState is null"); checkArgument(!currentState.isDone(), "Current state is already done"); ListenableFuture<TaskState> future = taskState.getStateChange(currentState); TaskState state = taskState.get(); if (state.isDone()) { return immediateFuture(state); } return future; }
Future<State> futureChange = stateMachine.getStateChange(initialState);
@Override public CompletableFuture<TaskInfo> getStateChange(TaskInfo taskInfo) { return this.taskInfo.getStateChange(taskInfo); }
Future<State> futureChange = stateMachine.getStateChange(initialState);
public CompletableFuture<TaskState> getStateChange(TaskState currentState) { requireNonNull(currentState, "currentState is null"); checkArgument(!currentState.isDone(), "Current state is already done"); CompletableFuture<TaskState> future = taskState.getStateChange(currentState); TaskState state = taskState.get(); if (state.isDone()) { return CompletableFuture.completedFuture(state); } return future; }