use of io.pravega.controller.store.stream.tables.State in project pravega by pravega.
the class InMemoryStream method handleStreamMetadataExists.
private void handleStreamMetadataExists(final long timestamp, CompletableFuture<CreateStreamResponse> result, final long time, final StreamConfiguration config, Data<Integer> currentState) {
if (currentState != null) {
State stateVal = (State) SerializationUtils.deserialize(currentState.getData());
if (stateVal.equals(State.UNKNOWN) || stateVal.equals(State.CREATING)) {
CreateStreamResponse.CreateStatus status;
status = (time == timestamp) ? CreateStreamResponse.CreateStatus.NEW : CreateStreamResponse.CreateStatus.EXISTS_CREATING;
result.complete(new CreateStreamResponse(status, config, time));
} else {
result.complete(new CreateStreamResponse(CreateStreamResponse.CreateStatus.EXISTS_ACTIVE, config, time));
}
} else {
CreateStreamResponse.CreateStatus status = (time == timestamp) ? CreateStreamResponse.CreateStatus.NEW : CreateStreamResponse.CreateStatus.EXISTS_CREATING;
result.complete(new CreateStreamResponse(status, config, time));
}
}
use of io.pravega.controller.store.stream.tables.State in project pravega by pravega.
the class StreamMetadataTasks method sealStream.
/**
* Seal a stream.
*
* @param scope scope.
* @param stream stream name.
* @param contextOpt optional context
* @return update status.
*/
public CompletableFuture<UpdateStreamStatus.Status> sealStream(String scope, String stream, OperationContext contextOpt) {
final OperationContext context = contextOpt == null ? streamMetadataStore.createContext(scope, stream) : contextOpt;
// 1. post event for seal.
SealStreamEvent event = new SealStreamEvent(scope, stream);
return writeEvent(event).thenCompose(x -> streamMetadataStore.getState(scope, stream, false, context, executor)).thenCompose(state -> {
if (state.equals(State.SEALED)) {
return CompletableFuture.completedFuture(true);
} else {
return streamMetadataStore.setState(scope, stream, State.SEALING, context, executor);
}
}).thenCompose(result -> {
if (result) {
return checkDone(() -> isSealed(scope, stream, context)).thenApply(x -> UpdateStreamStatus.Status.SUCCESS);
} else {
return CompletableFuture.completedFuture(UpdateStreamStatus.Status.FAILURE);
}
}).exceptionally(ex -> {
log.warn("Exception thrown in trying to notify sealed segments {}", ex.getMessage());
return handleUpdateStreamError(ex);
});
}
Aggregations