use of io.pravega.controller.stream.api.grpc.v1.Controller.SegmentsAtTime in project pravega by pravega.
the class ControllerImpl method getSegmentsAtTime.
@Override
public CompletableFuture<Map<Segment, Long>> getSegmentsAtTime(final Stream stream, final long timestamp) {
Exceptions.checkNotClosed(closed.get(), this);
Preconditions.checkNotNull(stream, "stream");
long traceId = LoggerHelpers.traceEnter(log, "getSegmentsAtTime", stream, timestamp);
final CompletableFuture<SegmentsAtTime> result = this.retryConfig.runAsync(() -> {
RPCAsyncCallback<SegmentsAtTime> callback = new RPCAsyncCallback<>();
StreamInfo streamInfo = ModelHelper.createStreamInfo(stream.getScope(), stream.getStreamName());
GetSegmentsRequest request = GetSegmentsRequest.newBuilder().setStreamInfo(streamInfo).setTimestamp(timestamp).build();
client.getSegments(request, callback);
return callback.getFuture();
}, this.executor);
return result.thenApply(segments -> {
log.debug("Received the following data from the controller {}", segments.getSegmentsList());
return segments.getSegmentsList().stream().collect(Collectors.toMap(location -> ModelHelper.encode(location.getSegmentId()), location -> location.getOffset()));
}).whenComplete((x, e) -> {
if (e != null) {
log.warn("getSegmentsAtTime failed: ", e);
}
LoggerHelpers.traceLeave(log, "getSegmentsAtTime", traceId);
});
}
use of io.pravega.controller.stream.api.grpc.v1.Controller.SegmentsAtTime in project pravega by pravega.
the class ControllerImplTest method setup.
@Before
public void setup() throws IOException {
// Setup test server generating different success and failure responses.
testServerImpl = new ControllerServiceImplBase() {
@Override
public void createStream(StreamConfig request, StreamObserver<CreateStreamStatus> responseObserver) {
if (request.getStreamInfo().getStream().equals("stream1") || request.getStreamInfo().getStream().equals("stream8")) {
responseObserver.onNext(CreateStreamStatus.newBuilder().setStatus(CreateStreamStatus.Status.SUCCESS).build());
responseObserver.onCompleted();
} else if (request.getStreamInfo().getStream().equals("stream2")) {
responseObserver.onNext(CreateStreamStatus.newBuilder().setStatus(CreateStreamStatus.Status.FAILURE).build());
responseObserver.onCompleted();
} else if (request.getStreamInfo().getStream().equals("stream3")) {
responseObserver.onNext(CreateStreamStatus.newBuilder().setStatus(CreateStreamStatus.Status.SCOPE_NOT_FOUND).build());
responseObserver.onCompleted();
} else if (request.getStreamInfo().getStream().equals("stream4")) {
responseObserver.onNext(CreateStreamStatus.newBuilder().setStatus(CreateStreamStatus.Status.STREAM_EXISTS).build());
responseObserver.onCompleted();
} else if (request.getStreamInfo().getStream().equals("stream5")) {
responseObserver.onNext(CreateStreamStatus.newBuilder().setStatus(CreateStreamStatus.Status.INVALID_STREAM_NAME).build());
responseObserver.onCompleted();
} else if (request.getStreamInfo().getStream().equals("streamparallel")) {
// Simulating delay in sending response.
Exceptions.handleInterrupted(() -> Thread.sleep(500));
responseObserver.onNext(CreateStreamStatus.newBuilder().setStatus(CreateStreamStatus.Status.SUCCESS).build());
responseObserver.onCompleted();
} else if (request.getStreamInfo().getStream().equals("streamdelayed")) {
// Simulating delay in sending response. This is used for the keepalive test,
// where response time > 30 seconds is required to simulate a failure.
Exceptions.handleInterrupted(() -> Thread.sleep(40000));
responseObserver.onNext(CreateStreamStatus.newBuilder().setStatus(CreateStreamStatus.Status.SUCCESS).build());
responseObserver.onCompleted();
} else if (request.getStreamInfo().getStream().equals("streamretryfailure")) {
responseObserver.onError(Status.UNKNOWN.withDescription("Transport error").asRuntimeException());
} else if (request.getStreamInfo().getStream().equals("streamretrysuccess")) {
if (retryAttempts.incrementAndGet() > 3) {
responseObserver.onNext(CreateStreamStatus.newBuilder().setStatus(CreateStreamStatus.Status.SUCCESS).build());
responseObserver.onCompleted();
} else {
responseObserver.onError(Status.INTERNAL.withDescription("Server error").asRuntimeException());
}
} else {
responseObserver.onError(Status.INTERNAL.withDescription("Server error").asRuntimeException());
}
}
@Override
public void updateStream(StreamConfig request, StreamObserver<UpdateStreamStatus> responseObserver) {
if (request.getStreamInfo().getStream().equals("stream1")) {
responseObserver.onNext(UpdateStreamStatus.newBuilder().setStatus(UpdateStreamStatus.Status.SUCCESS).build());
responseObserver.onCompleted();
} else if (request.getStreamInfo().getStream().equals("stream2")) {
responseObserver.onNext(UpdateStreamStatus.newBuilder().setStatus(UpdateStreamStatus.Status.FAILURE).build());
responseObserver.onCompleted();
} else if (request.getStreamInfo().getStream().equals("stream3")) {
responseObserver.onNext(UpdateStreamStatus.newBuilder().setStatus(UpdateStreamStatus.Status.SCOPE_NOT_FOUND).build());
responseObserver.onCompleted();
} else if (request.getStreamInfo().getStream().equals("stream4")) {
responseObserver.onNext(UpdateStreamStatus.newBuilder().setStatus(UpdateStreamStatus.Status.STREAM_NOT_FOUND).build());
responseObserver.onCompleted();
} else if (request.getStreamInfo().getStream().equals("stream5")) {
responseObserver.onNext(UpdateStreamStatus.newBuilder().setStatus(UpdateStreamStatus.Status.UNRECOGNIZED).build());
responseObserver.onCompleted();
} else {
responseObserver.onError(Status.INTERNAL.withDescription("Server error").asRuntimeException());
}
}
@Override
public void truncateStream(Controller.StreamCut request, StreamObserver<UpdateStreamStatus> responseObserver) {
if (request.getStreamInfo().getStream().equals("stream1")) {
responseObserver.onNext(UpdateStreamStatus.newBuilder().setStatus(UpdateStreamStatus.Status.SUCCESS).build());
responseObserver.onCompleted();
} else if (request.getStreamInfo().getStream().equals("stream2")) {
responseObserver.onNext(UpdateStreamStatus.newBuilder().setStatus(UpdateStreamStatus.Status.FAILURE).build());
responseObserver.onCompleted();
} else if (request.getStreamInfo().getStream().equals("stream3")) {
responseObserver.onNext(UpdateStreamStatus.newBuilder().setStatus(UpdateStreamStatus.Status.SCOPE_NOT_FOUND).build());
responseObserver.onCompleted();
} else if (request.getStreamInfo().getStream().equals("stream4")) {
responseObserver.onNext(UpdateStreamStatus.newBuilder().setStatus(UpdateStreamStatus.Status.STREAM_NOT_FOUND).build());
responseObserver.onCompleted();
} else if (request.getStreamInfo().getStream().equals("stream5")) {
responseObserver.onNext(UpdateStreamStatus.newBuilder().setStatus(UpdateStreamStatus.Status.UNRECOGNIZED).build());
responseObserver.onCompleted();
} else {
responseObserver.onError(Status.INTERNAL.withDescription("Server error").asRuntimeException());
}
}
@Override
public void sealStream(StreamInfo request, StreamObserver<UpdateStreamStatus> responseObserver) {
if (request.getStream().equals("stream1")) {
responseObserver.onNext(UpdateStreamStatus.newBuilder().setStatus(UpdateStreamStatus.Status.SUCCESS).build());
responseObserver.onCompleted();
} else if (request.getStream().equals("stream2")) {
responseObserver.onNext(UpdateStreamStatus.newBuilder().setStatus(UpdateStreamStatus.Status.FAILURE).build());
responseObserver.onCompleted();
} else if (request.getStream().equals("stream3")) {
responseObserver.onNext(UpdateStreamStatus.newBuilder().setStatus(UpdateStreamStatus.Status.SCOPE_NOT_FOUND).build());
responseObserver.onCompleted();
} else if (request.getStream().equals("stream4")) {
responseObserver.onNext(UpdateStreamStatus.newBuilder().setStatus(UpdateStreamStatus.Status.STREAM_NOT_FOUND).build());
responseObserver.onCompleted();
} else {
responseObserver.onError(Status.INTERNAL.withDescription("Server error").asRuntimeException());
}
}
@Override
public void deleteStream(StreamInfo request, StreamObserver<DeleteStreamStatus> responseObserver) {
if (request.getStream().equals("stream1")) {
responseObserver.onNext(DeleteStreamStatus.newBuilder().setStatus(DeleteStreamStatus.Status.SUCCESS).build());
responseObserver.onCompleted();
} else if (request.getStream().equals("stream2")) {
responseObserver.onNext(DeleteStreamStatus.newBuilder().setStatus(DeleteStreamStatus.Status.FAILURE).build());
responseObserver.onCompleted();
} else if (request.getStream().equals("stream3")) {
responseObserver.onNext(DeleteStreamStatus.newBuilder().setStatus(DeleteStreamStatus.Status.STREAM_NOT_FOUND).build());
responseObserver.onCompleted();
} else if (request.getStream().equals("stream4")) {
responseObserver.onNext(DeleteStreamStatus.newBuilder().setStatus(DeleteStreamStatus.Status.STREAM_NOT_SEALED).build());
responseObserver.onCompleted();
} else {
responseObserver.onError(Status.INTERNAL.withDescription("Server error").asRuntimeException());
}
}
@Override
public void getCurrentSegments(StreamInfo request, StreamObserver<SegmentRanges> responseObserver) {
if (request.getStream().equals("stream1")) {
responseObserver.onNext(SegmentRanges.newBuilder().addSegmentRanges(ModelHelper.createSegmentRange("scope1", "stream1", 6, 0.0, 0.4)).addSegmentRanges(ModelHelper.createSegmentRange("scope1", "stream1", 7, 0.4, 1.0)).build());
responseObserver.onCompleted();
} else if (request.getStream().equals("stream8")) {
responseObserver.onNext(SegmentRanges.newBuilder().addSegmentRanges(ModelHelper.createSegmentRange("scope1", "stream8", 9, 0.0, 0.5)).addSegmentRanges(ModelHelper.createSegmentRange("scope1", "stream8", 10, 0.5, 1.0)).build());
responseObserver.onCompleted();
} else if (request.getStream().equals("streamparallel")) {
Exceptions.handleInterrupted(() -> Thread.sleep(500));
responseObserver.onNext(SegmentRanges.newBuilder().addSegmentRanges(ModelHelper.createSegmentRange("scope1", "streamparallel", 0, 0.0, 0.4)).addSegmentRanges(ModelHelper.createSegmentRange("scope1", "streamparallel", 1, 0.4, 1.0)).build());
responseObserver.onCompleted();
} else {
responseObserver.onError(Status.INTERNAL.withDescription("Server error").asRuntimeException());
}
}
@Override
public void getSegments(GetSegmentsRequest request, StreamObserver<SegmentsAtTime> responseObserver) {
if (request.getStreamInfo().getStream().equals("stream1")) {
SegmentId segment1 = ModelHelper.createSegmentId("scope1", "stream1", 0);
SegmentId segment2 = ModelHelper.createSegmentId("scope1", "stream1", 1);
responseObserver.onNext(SegmentsAtTime.newBuilder().addSegments(SegmentLocation.newBuilder().setSegmentId(segment1).setOffset(10).build()).addSegments(SegmentLocation.newBuilder().setSegmentId(segment2).setOffset(20).build()).build());
responseObserver.onCompleted();
} else if (request.getStreamInfo().getStream().equals("stream8")) {
SegmentId segment1 = ModelHelper.createSegmentId("scope1", "stream8", 0);
SegmentId segment2 = ModelHelper.createSegmentId("scope1", "stream8", 1);
SegmentId segment3 = ModelHelper.createSegmentId("scope1", "stream8", 2);
responseObserver.onNext(SegmentsAtTime.newBuilder().addSegments(SegmentLocation.newBuilder().setSegmentId(segment1).setOffset(10).build()).addSegments(SegmentLocation.newBuilder().setSegmentId(segment2).setOffset(20).build()).build());
responseObserver.onCompleted();
} else {
responseObserver.onError(Status.INTERNAL.withDescription("Server error").asRuntimeException());
}
}
@Override
public void getSegmentsImmediatlyFollowing(SegmentId request, StreamObserver<SuccessorResponse> responseObserver) {
if (request.getStreamInfo().getStream().equals("stream1")) {
Map<SegmentId, Pair<Double, Double>> result = new HashMap<>();
if (request.getSegmentNumber() == 0) {
result.put(ModelHelper.createSegmentId("scope1", "stream1", 2), Pair.of(0.0, 0.25));
result.put(ModelHelper.createSegmentId("scope1", "stream1", 3), Pair.of(0.25, 0.5));
} else if (request.getSegmentNumber() == 1) {
result.put(ModelHelper.createSegmentId("scope1", "stream1", 4), Pair.of(0.5, 0.75));
result.put(ModelHelper.createSegmentId("scope1", "stream1", 5), Pair.of(0.75, 1.0));
} else if (request.getSegmentNumber() == 2 || request.getSegmentNumber() == 3) {
result.put(ModelHelper.createSegmentId("scope1", "stream1", 6), Pair.of(0.0, 0.5));
} else if (request.getSegmentNumber() == 4 || request.getSegmentNumber() == 5) {
result.put(ModelHelper.createSegmentId("scope1", "stream1", 7), Pair.of(0.5, 0.25));
}
val builder = SuccessorResponse.newBuilder();
for (Entry<SegmentId, Pair<Double, Double>> entry : result.entrySet()) {
builder.addSegments(SuccessorResponse.SegmentEntry.newBuilder().setSegment(Controller.SegmentRange.newBuilder().setSegmentId(entry.getKey()).setMinKey(entry.getValue().getLeft()).setMaxKey(entry.getValue().getRight()).build()).addValue(10 * entry.getKey().getSegmentNumber()).build());
}
responseObserver.onNext(builder.build());
responseObserver.onCompleted();
} else if (request.getStreamInfo().getStream().equals("stream8")) {
Map<SegmentId, Pair<Double, Double>> result = new HashMap<>();
if (request.getSegmentNumber() == 0) {
result.put(ModelHelper.createSegmentId("scope1", "stream8", 3), Pair.of(0.0, 0.2));
result.put(ModelHelper.createSegmentId("scope1", "stream8", 4), Pair.of(0.2, 0.33));
} else if (request.getSegmentNumber() == 1) {
result.put(ModelHelper.createSegmentId("scope1", "stream8", 5), Pair.of(0.33, 0.5));
result.put(ModelHelper.createSegmentId("scope1", "stream8", 6), Pair.of(0.5, 0.66));
} else if (request.getSegmentNumber() == 2) {
result.put(ModelHelper.createSegmentId("scope1", "stream8", 7), Pair.of(0.66, 0.8));
result.put(ModelHelper.createSegmentId("scope1", "stream8", 8), Pair.of(0.8, 1.0));
} else if (request.getSegmentNumber() == 3 || request.getSegmentNumber() == 4 || request.getSegmentNumber() == 5) {
result.put(ModelHelper.createSegmentId("scope1", "stream8", 9), Pair.of(0.0, 0.5));
} else if (request.getSegmentNumber() == 6 || request.getSegmentNumber() == 7 || request.getSegmentNumber() == 8) {
result.put(ModelHelper.createSegmentId("scope1", "stream8", 10), Pair.of(0.5, 1.0));
}
val builder = SuccessorResponse.newBuilder();
for (Entry<SegmentId, Pair<Double, Double>> entry : result.entrySet()) {
builder.addSegments(SuccessorResponse.SegmentEntry.newBuilder().setSegment(Controller.SegmentRange.newBuilder().setSegmentId(entry.getKey()).setMinKey(entry.getValue().getLeft()).setMaxKey(entry.getValue().getRight()).build()).addValue(10 * entry.getKey().getSegmentNumber()).build());
}
responseObserver.onNext(builder.build());
responseObserver.onCompleted();
} else {
responseObserver.onError(Status.INTERNAL.withDescription("Server error").asRuntimeException());
}
}
@Override
public void scale(ScaleRequest request, StreamObserver<ScaleResponse> responseObserver) {
if (request.getStreamInfo().getStream().equals("stream1")) {
responseObserver.onNext(ScaleResponse.newBuilder().setStatus(ScaleResponse.ScaleStreamStatus.STARTED).addSegments(ModelHelper.createSegmentRange("scope1", "stream1", 0, 0.0, 0.5)).addSegments(ModelHelper.createSegmentRange("scope1", "stream1", 1, 0.5, 1.0)).setEpoch(0).build());
responseObserver.onCompleted();
} else {
responseObserver.onError(Status.INTERNAL.withDescription("Server error").asRuntimeException());
}
}
@Override
public void checkScale(ScaleStatusRequest request, StreamObserver<ScaleStatusResponse> responseObserver) {
if (request.getStreamInfo().getStream().equals("stream1")) {
responseObserver.onNext(ScaleStatusResponse.newBuilder().setStatus(ScaleStatusResponse.ScaleStatus.SUCCESS).build());
responseObserver.onCompleted();
} else {
responseObserver.onError(Status.INTERNAL.withDescription("Server error").asRuntimeException());
}
}
@Override
public void getURI(SegmentId request, StreamObserver<NodeUri> responseObserver) {
if (request.getStreamInfo().getStream().equals("stream1")) {
responseObserver.onNext(NodeUri.newBuilder().setEndpoint("localhost").setPort(SERVICE_PORT).build());
responseObserver.onCompleted();
} else {
responseObserver.onError(Status.INTERNAL.withDescription("Server error").asRuntimeException());
}
}
@Override
public void isSegmentValid(SegmentId request, StreamObserver<SegmentValidityResponse> responseObserver) {
if (request.getStreamInfo().getStream().equals("stream1")) {
responseObserver.onNext(SegmentValidityResponse.newBuilder().setResponse(true).build());
responseObserver.onCompleted();
} else if (request.getStreamInfo().getStream().equals("stream2")) {
responseObserver.onNext(SegmentValidityResponse.newBuilder().setResponse(false).build());
responseObserver.onCompleted();
} else {
responseObserver.onError(Status.INTERNAL.withDescription("Server error").asRuntimeException());
}
}
@Override
public void createTransaction(CreateTxnRequest request, StreamObserver<Controller.CreateTxnResponse> responseObserver) {
Controller.CreateTxnResponse.Builder builder = Controller.CreateTxnResponse.newBuilder();
if (request.getStreamInfo().getStream().equals("stream1")) {
builder.setTxnId(TxnId.newBuilder().setHighBits(11L).setLowBits(22L).build());
builder.addActiveSegments(ModelHelper.createSegmentRange("scope1", "stream1", 0, 0.0, 0.5));
builder.addActiveSegments(ModelHelper.createSegmentRange("scope1", "stream1", 1, 0.5, 1.0));
responseObserver.onNext(builder.build());
responseObserver.onCompleted();
} else if (request.getStreamInfo().getStream().equals("stream2")) {
builder.addActiveSegments(ModelHelper.createSegmentRange("scope1", "stream2", 0, 0.0, 1.0));
builder.setTxnId(TxnId.newBuilder().setHighBits(33L).setLowBits(44L).build());
responseObserver.onNext(builder.build());
responseObserver.onCompleted();
} else {
responseObserver.onError(Status.INTERNAL.withDescription("Server error").asRuntimeException());
}
}
@Override
public void commitTransaction(TxnRequest request, StreamObserver<Controller.TxnStatus> responseObserver) {
if (request.getStreamInfo().getStream().equals("stream1")) {
responseObserver.onNext(Controller.TxnStatus.newBuilder().setStatus(Controller.TxnStatus.Status.SUCCESS).build());
responseObserver.onCompleted();
} else if (request.getStreamInfo().getStream().equals("stream2")) {
responseObserver.onNext(Controller.TxnStatus.newBuilder().setStatus(Controller.TxnStatus.Status.FAILURE).build());
responseObserver.onCompleted();
} else if (request.getStreamInfo().getStream().equals("stream3")) {
responseObserver.onNext(Controller.TxnStatus.newBuilder().setStatus(Controller.TxnStatus.Status.STREAM_NOT_FOUND).build());
responseObserver.onCompleted();
} else if (request.getStreamInfo().getStream().equals("stream4")) {
responseObserver.onNext(Controller.TxnStatus.newBuilder().setStatus(Controller.TxnStatus.Status.TRANSACTION_NOT_FOUND).build());
responseObserver.onCompleted();
} else {
responseObserver.onError(Status.INTERNAL.withDescription("Server error").asRuntimeException());
}
}
@Override
public void abortTransaction(TxnRequest request, StreamObserver<Controller.TxnStatus> responseObserver) {
if (request.getStreamInfo().getStream().equals("stream1")) {
responseObserver.onNext(Controller.TxnStatus.newBuilder().setStatus(Controller.TxnStatus.Status.SUCCESS).build());
responseObserver.onCompleted();
} else if (request.getStreamInfo().getStream().equals("stream2")) {
responseObserver.onNext(Controller.TxnStatus.newBuilder().setStatus(Controller.TxnStatus.Status.FAILURE).build());
responseObserver.onCompleted();
} else if (request.getStreamInfo().getStream().equals("stream3")) {
responseObserver.onNext(Controller.TxnStatus.newBuilder().setStatus(Controller.TxnStatus.Status.STREAM_NOT_FOUND).build());
responseObserver.onCompleted();
} else if (request.getStreamInfo().getStream().equals("stream4")) {
responseObserver.onNext(Controller.TxnStatus.newBuilder().setStatus(Controller.TxnStatus.Status.TRANSACTION_NOT_FOUND).build());
responseObserver.onCompleted();
} else {
responseObserver.onError(Status.INTERNAL.withDescription("Server error").asRuntimeException());
}
}
@Override
public void pingTransaction(PingTxnRequest request, StreamObserver<PingTxnStatus> responseObserver) {
if (request.getStreamInfo().getStream().equals("stream1")) {
responseObserver.onNext(PingTxnStatus.newBuilder().setStatus(PingTxnStatus.Status.OK).build());
responseObserver.onCompleted();
} else {
responseObserver.onError(Status.INTERNAL.withDescription("Server error").asRuntimeException());
}
}
@Override
public void checkTransactionState(TxnRequest request, StreamObserver<TxnState> responseObserver) {
if (request.getStreamInfo().getStream().equals("stream1")) {
responseObserver.onNext(TxnState.newBuilder().setState(TxnState.State.OPEN).build());
responseObserver.onCompleted();
} else if (request.getStreamInfo().getStream().equals("stream2")) {
responseObserver.onNext(TxnState.newBuilder().setState(TxnState.State.UNKNOWN).build());
responseObserver.onCompleted();
} else if (request.getStreamInfo().getStream().equals("stream3")) {
responseObserver.onNext(TxnState.newBuilder().setState(TxnState.State.COMMITTING).build());
responseObserver.onCompleted();
} else if (request.getStreamInfo().getStream().equals("stream4")) {
responseObserver.onNext(TxnState.newBuilder().setState(TxnState.State.COMMITTED).build());
responseObserver.onCompleted();
} else if (request.getStreamInfo().getStream().equals("stream5")) {
responseObserver.onNext(TxnState.newBuilder().setState(TxnState.State.ABORTING).build());
responseObserver.onCompleted();
} else if (request.getStreamInfo().getStream().equals("stream6")) {
responseObserver.onNext(TxnState.newBuilder().setState(TxnState.State.ABORTED).build());
responseObserver.onCompleted();
} else {
responseObserver.onError(Status.INTERNAL.withDescription("Server error").asRuntimeException());
}
}
@Override
public void createScope(ScopeInfo request, StreamObserver<CreateScopeStatus> responseObserver) {
if (request.getScope().equals("scope1")) {
responseObserver.onNext(CreateScopeStatus.newBuilder().setStatus(CreateScopeStatus.Status.SUCCESS).build());
responseObserver.onCompleted();
} else if (request.getScope().equals("scope2")) {
responseObserver.onNext(CreateScopeStatus.newBuilder().setStatus(CreateScopeStatus.Status.FAILURE).build());
responseObserver.onCompleted();
} else if (request.getScope().equals("scope3")) {
responseObserver.onNext(CreateScopeStatus.newBuilder().setStatus(CreateScopeStatus.Status.INVALID_SCOPE_NAME).build());
responseObserver.onCompleted();
} else if (request.getScope().equals("scope4")) {
responseObserver.onNext(CreateScopeStatus.newBuilder().setStatus(CreateScopeStatus.Status.SCOPE_EXISTS).build());
responseObserver.onCompleted();
} else {
responseObserver.onError(Status.INTERNAL.withDescription("Server error").asRuntimeException());
}
}
@Override
public void getDelegationToken(io.pravega.controller.stream.api.grpc.v1.Controller.StreamInfo request, io.grpc.stub.StreamObserver<io.pravega.controller.stream.api.grpc.v1.Controller.DelegationToken> responseObserver) {
responseObserver.onNext(Controller.DelegationToken.newBuilder().setDelegationToken("token").build());
responseObserver.onCompleted();
}
@Override
public void deleteScope(ScopeInfo request, StreamObserver<DeleteScopeStatus> responseObserver) {
if (request.getScope().equals("scope1")) {
responseObserver.onNext(DeleteScopeStatus.newBuilder().setStatus(DeleteScopeStatus.Status.SUCCESS).build());
responseObserver.onCompleted();
} else if (request.getScope().equals("scope2")) {
responseObserver.onNext(DeleteScopeStatus.newBuilder().setStatus(DeleteScopeStatus.Status.FAILURE).build());
responseObserver.onCompleted();
} else if (request.getScope().equals("scope3")) {
responseObserver.onNext(DeleteScopeStatus.newBuilder().setStatus(DeleteScopeStatus.Status.SCOPE_NOT_EMPTY).build());
responseObserver.onCompleted();
} else if (request.getScope().equals("scope4")) {
responseObserver.onNext(DeleteScopeStatus.newBuilder().setStatus(DeleteScopeStatus.Status.SCOPE_NOT_FOUND).build());
responseObserver.onCompleted();
} else {
responseObserver.onError(Status.INTERNAL.withDescription("Server error").asRuntimeException());
}
}
};
serverPort = TestUtils.getAvailableListenPort();
serverBuilder = NettyServerBuilder.forPort(serverPort).addService(testServerImpl);
if (testSecure) {
serverBuilder = serverBuilder.useTransportSecurity(new File("../config/cert.pem"), new File("../config/key.pem"));
creds = new DefaultCredentials("1111_aaaa", "admin");
}
testGRPCServer = serverBuilder.build().start();
executor = Executors.newSingleThreadScheduledExecutor();
controllerClient = new ControllerImpl(ControllerImplConfig.builder().clientConfig(ClientConfig.builder().controllerURI(URI.create((testSecure ? "tls://" : "tcp://") + "localhost:" + serverPort)).credentials(new DefaultCredentials("1111_aaaa", "admin")).trustStore("../config/cert.pem").build()).retryAttempts(1).build(), executor);
}
use of io.pravega.controller.stream.api.grpc.v1.Controller.SegmentsAtTime in project pravega by pravega.
the class ControllerImplTest method setup.
@Before
public void setup() throws IOException {
// Setup test server generating different success and failure responses.
testServerImpl = new ControllerServiceImplBase() {
@Override
public void listScopes(Controller.ScopesRequest request, StreamObserver<Controller.ScopesResponse> responseObserver) {
if (Strings.isNullOrEmpty(request.getContinuationToken().getToken())) {
List<String> list1 = new LinkedList<>();
list1.add("scope1");
list1.add("scope2");
responseObserver.onNext(Controller.ScopesResponse.newBuilder().addAllScopes(list1).setContinuationToken(Controller.ContinuationToken.newBuilder().setToken("myToken").build()).build());
responseObserver.onCompleted();
} else if (request.getContinuationToken().getToken().equals("myToken")) {
List<String> list2 = new LinkedList<>();
list2.add("scope3");
responseObserver.onNext(Controller.ScopesResponse.newBuilder().addAllScopes(list2).setContinuationToken(Controller.ContinuationToken.newBuilder().setToken("myToken2").build()).build());
responseObserver.onCompleted();
} else if (request.getContinuationToken().getToken().equals("myToken2")) {
List<String> list3 = new LinkedList<>();
responseObserver.onNext(Controller.ScopesResponse.newBuilder().addAllScopes(list3).setContinuationToken(Controller.ContinuationToken.newBuilder().setToken("myToken2").build()).build());
responseObserver.onCompleted();
} else {
responseObserver.onError(Status.INTERNAL.withDescription("Server error").asRuntimeException());
}
}
@Override
public void checkScopeExists(ScopeInfo request, StreamObserver<Controller.ExistsResponse> responseObserver) {
if (!request.getScope().equals("throwing")) {
responseObserver.onNext(Controller.ExistsResponse.newBuilder().setExists(request.getScope().equals("scope1")).build());
responseObserver.onCompleted();
} else {
responseObserver.onError(Status.INTERNAL.withDescription("Server error").asRuntimeException());
}
}
@Override
public void checkStreamExists(StreamInfo request, StreamObserver<Controller.ExistsResponse> responseObserver) {
if (!request.getScope().equals("throwing")) {
responseObserver.onNext(Controller.ExistsResponse.newBuilder().setExists(request.getStream().equals("stream1")).build());
responseObserver.onCompleted();
} else {
responseObserver.onError(Status.INTERNAL.withDescription("Server error").asRuntimeException());
}
}
@Override
public void createStream(StreamConfig request, StreamObserver<CreateStreamStatus> responseObserver) {
if (request.getStreamInfo().getStream().equals("stream1") || request.getStreamInfo().getStream().equals("stream8")) {
responseObserver.onNext(CreateStreamStatus.newBuilder().setStatus(CreateStreamStatus.Status.SUCCESS).build());
responseObserver.onCompleted();
} else if (request.getStreamInfo().getStream().equals("stream2")) {
responseObserver.onNext(CreateStreamStatus.newBuilder().setStatus(CreateStreamStatus.Status.FAILURE).build());
responseObserver.onCompleted();
} else if (request.getStreamInfo().getStream().equals("stream3")) {
responseObserver.onNext(CreateStreamStatus.newBuilder().setStatus(CreateStreamStatus.Status.SCOPE_NOT_FOUND).build());
responseObserver.onCompleted();
} else if (request.getStreamInfo().getStream().equals("stream4")) {
responseObserver.onNext(CreateStreamStatus.newBuilder().setStatus(CreateStreamStatus.Status.STREAM_EXISTS).build());
responseObserver.onCompleted();
} else if (request.getStreamInfo().getStream().equals("stream5")) {
responseObserver.onNext(CreateStreamStatus.newBuilder().setStatus(CreateStreamStatus.Status.INVALID_STREAM_NAME).build());
responseObserver.onCompleted();
} else if (request.getStreamInfo().getStream().equals("streamparallel")) {
// Simulating delay in sending response.
Exceptions.handleInterrupted(() -> Thread.sleep(500));
responseObserver.onNext(CreateStreamStatus.newBuilder().setStatus(CreateStreamStatus.Status.SUCCESS).build());
responseObserver.onCompleted();
} else if (request.getStreamInfo().getStream().equals("streamdelayed")) {
// Simulating delay in sending response. This is used for the keepalive test,
// where response time > 30 seconds is required to simulate a failure.
Exceptions.handleInterrupted(() -> Thread.sleep(KEEP_ALIVE_TEST_STREAM_CREATE_DELAY_MILLIS));
responseObserver.onNext(CreateStreamStatus.newBuilder().setStatus(CreateStreamStatus.Status.SUCCESS).build());
responseObserver.onCompleted();
} else if (request.getStreamInfo().getStream().equals("streamretryfailure")) {
responseObserver.onError(Status.UNKNOWN.withDescription("Transport error").asRuntimeException());
} else if (request.getStreamInfo().getStream().equals("streamretrysuccess")) {
if (retryAttempts.incrementAndGet() > 3) {
responseObserver.onNext(CreateStreamStatus.newBuilder().setStatus(CreateStreamStatus.Status.SUCCESS).build());
responseObserver.onCompleted();
} else {
responseObserver.onError(Status.INTERNAL.withDescription("Server error").asRuntimeException());
}
} else if (request.getStreamInfo().getStream().equals("deadline")) {
// dont send any response
} else {
responseObserver.onError(Status.INTERNAL.withDescription("Server error").asRuntimeException());
}
}
@Override
public void getStreamConfiguration(StreamInfo request, StreamObserver<StreamConfig> responseObserver) {
StreamConfiguration cfg = StreamConfiguration.builder().scalingPolicy(ScalingPolicy.fixed(3)).tag("tx").build();
if (request.getStream().equals("stream1")) {
responseObserver.onNext(decode(request.getScope(), request.getStream(), cfg));
responseObserver.onCompleted();
} else if (request.getStream().equals("stream2")) {
responseObserver.onNext(decode(request.getScope(), request.getStream(), cfg.toBuilder().clearTags().build()));
responseObserver.onCompleted();
} else if (request.getStream().equals("stream3")) {
responseObserver.onError(Status.NOT_FOUND.asRuntimeException());
} else if (request.getStream().equals("deadline")) {
// do not send any response.
} else {
responseObserver.onError(Status.INTERNAL.withDescription("Server error").asRuntimeException());
}
}
@Override
public void updateStream(StreamConfig request, StreamObserver<UpdateStreamStatus> responseObserver) {
if (request.getStreamInfo().getStream().equals("stream1")) {
responseObserver.onNext(UpdateStreamStatus.newBuilder().setStatus(UpdateStreamStatus.Status.SUCCESS).build());
responseObserver.onCompleted();
} else if (request.getStreamInfo().getStream().equals("stream2")) {
responseObserver.onNext(UpdateStreamStatus.newBuilder().setStatus(UpdateStreamStatus.Status.FAILURE).build());
responseObserver.onCompleted();
} else if (request.getStreamInfo().getStream().equals("stream3")) {
responseObserver.onNext(UpdateStreamStatus.newBuilder().setStatus(UpdateStreamStatus.Status.SCOPE_NOT_FOUND).build());
responseObserver.onCompleted();
} else if (request.getStreamInfo().getStream().equals("stream4")) {
responseObserver.onNext(UpdateStreamStatus.newBuilder().setStatus(UpdateStreamStatus.Status.STREAM_NOT_FOUND).build());
responseObserver.onCompleted();
} else if (request.getStreamInfo().getStream().equals("stream5")) {
responseObserver.onNext(UpdateStreamStatus.newBuilder().setStatus(UpdateStreamStatus.Status.UNRECOGNIZED).build());
responseObserver.onCompleted();
} else if (request.getStreamInfo().getStream().equals("deadline")) {
// dont send any response
} else {
responseObserver.onError(Status.INTERNAL.withDescription("Server error").asRuntimeException());
}
}
@Override
public void listSubscribers(StreamInfo request, StreamObserver<SubscribersResponse> responseObserver) {
if (request.getStream().equals("stream1")) {
responseObserver.onNext(SubscribersResponse.newBuilder().setStatus(SubscribersResponse.Status.SUCCESS).addSubscribers("sub1").addSubscribers("sub2").addSubscribers("sub3").build());
responseObserver.onCompleted();
} else if (request.getStream().equals("stream2")) {
responseObserver.onNext(SubscribersResponse.newBuilder().setStatus(SubscribersResponse.Status.STREAM_NOT_FOUND).build());
responseObserver.onCompleted();
} else if (request.getStream().equals("deadline")) {
// dont send any response
} else {
responseObserver.onError(Status.INTERNAL.withDescription("Server error").asRuntimeException());
}
}
@Override
public void createReaderGroup(ReaderGroupConfiguration request, StreamObserver<CreateReaderGroupResponse> responseObserver) {
if (request.getReaderGroupName().equals("rg1")) {
responseObserver.onNext(CreateReaderGroupResponse.newBuilder().setConfig(request).setStatus(CreateReaderGroupResponse.Status.SUCCESS).build());
responseObserver.onCompleted();
} else if (request.getReaderGroupName().equals("rg2")) {
responseObserver.onNext(CreateReaderGroupResponse.newBuilder().setConfig(request).setStatus(CreateReaderGroupResponse.Status.FAILURE).build());
responseObserver.onCompleted();
} else if (request.getReaderGroupName().equals("rg3")) {
responseObserver.onNext(CreateReaderGroupResponse.newBuilder().setConfig(request).setStatus(CreateReaderGroupResponse.Status.SCOPE_NOT_FOUND).build());
responseObserver.onCompleted();
} else if (request.getReaderGroupName().equals("rg4")) {
responseObserver.onNext(CreateReaderGroupResponse.newBuilder().setConfig(request).setStatus(CreateReaderGroupResponse.Status.INVALID_RG_NAME).build());
responseObserver.onCompleted();
}
}
@Override
public void updateReaderGroup(ReaderGroupConfiguration request, StreamObserver<UpdateReaderGroupResponse> responseObserver) {
if (request.getReaderGroupName().equals("rg1")) {
responseObserver.onNext(UpdateReaderGroupResponse.newBuilder().setStatus(UpdateReaderGroupResponse.Status.SUCCESS).build());
responseObserver.onCompleted();
} else if (request.getReaderGroupName().equals("rg2")) {
responseObserver.onNext(UpdateReaderGroupResponse.newBuilder().setStatus(UpdateReaderGroupResponse.Status.FAILURE).build());
responseObserver.onCompleted();
} else if (request.getReaderGroupName().equals("rg3")) {
responseObserver.onNext(UpdateReaderGroupResponse.newBuilder().setStatus(UpdateReaderGroupResponse.Status.RG_NOT_FOUND).build());
responseObserver.onCompleted();
} else if (request.getReaderGroupName().equals("rg4")) {
responseObserver.onNext(UpdateReaderGroupResponse.newBuilder().setStatus(UpdateReaderGroupResponse.Status.INVALID_CONFIG).build());
responseObserver.onCompleted();
}
}
@Override
public void deleteReaderGroup(ReaderGroupInfo request, StreamObserver<DeleteReaderGroupStatus> responseObserver) {
if (request.getReaderGroup().equals("rg1")) {
responseObserver.onNext(DeleteReaderGroupStatus.newBuilder().setStatus(DeleteReaderGroupStatus.Status.SUCCESS).build());
responseObserver.onCompleted();
} else if (request.getReaderGroup().equals("rg2")) {
responseObserver.onNext(DeleteReaderGroupStatus.newBuilder().setStatus(DeleteReaderGroupStatus.Status.FAILURE).build());
responseObserver.onCompleted();
} else if (request.getReaderGroup().equals("rg3")) {
responseObserver.onNext(DeleteReaderGroupStatus.newBuilder().setStatus(DeleteReaderGroupStatus.Status.RG_NOT_FOUND).build());
responseObserver.onCompleted();
}
}
@Override
public void getReaderGroupConfig(ReaderGroupInfo request, StreamObserver<ReaderGroupConfigResponse> responseObserver) {
final Segment seg0 = new Segment("scope1", "stream1", 0L);
final Segment seg1 = new Segment("scope1", "stream1", 1L);
ImmutableMap<Segment, Long> startStreamCut = ImmutableMap.of(seg0, 10L, seg1, 10L);
Map<Stream, StreamCut> startSC = ImmutableMap.of(Stream.of("scope1", "stream1"), new StreamCutImpl(Stream.of("scope1", "stream1"), startStreamCut));
ImmutableMap<Segment, Long> endStreamCut = ImmutableMap.of(seg0, 200L, seg1, 300L);
Map<Stream, StreamCut> endSC = ImmutableMap.of(Stream.of("scope1", "stream1"), new StreamCutImpl(Stream.of("scope1", "stream1"), endStreamCut));
ReaderGroupConfig rgConfig = ReaderGroupConfig.builder().automaticCheckpointIntervalMillis(30000L).groupRefreshTimeMillis(20000L).maxOutstandingCheckpointRequest(2).retentionType(ReaderGroupConfig.StreamDataRetention.AUTOMATIC_RELEASE_AT_LAST_CHECKPOINT).startingStreamCuts(startSC).endingStreamCuts(endSC).build();
rgConfig = ReaderGroupConfig.cloneConfig(rgConfig, UUID.randomUUID(), 0L);
if (request.getReaderGroup().equals("rg1")) {
responseObserver.onNext(ReaderGroupConfigResponse.newBuilder().setStatus(ReaderGroupConfigResponse.Status.SUCCESS).setConfig(decode("scope1", "rg1", rgConfig)).build());
responseObserver.onCompleted();
} else if (request.getReaderGroup().equals("rg2")) {
responseObserver.onNext(ReaderGroupConfigResponse.newBuilder().setStatus(ReaderGroupConfigResponse.Status.FAILURE).setConfig(ReaderGroupConfiguration.getDefaultInstance()).build());
responseObserver.onCompleted();
} else if (request.getReaderGroup().equals("rg3")) {
responseObserver.onNext(ReaderGroupConfigResponse.newBuilder().setStatus(ReaderGroupConfigResponse.Status.RG_NOT_FOUND).setConfig(ReaderGroupConfiguration.getDefaultInstance()).build());
responseObserver.onCompleted();
}
}
@Override
public void updateSubscriberStreamCut(SubscriberStreamCut request, StreamObserver<UpdateSubscriberStatus> responseObserver) {
if (request.getStreamCut().getStreamInfo().getStream().equals("stream1")) {
responseObserver.onNext(UpdateSubscriberStatus.newBuilder().setStatus(UpdateSubscriberStatus.Status.SUCCESS).build());
responseObserver.onCompleted();
} else if (request.getStreamCut().getStreamInfo().getStream().equals("stream2")) {
responseObserver.onNext(UpdateSubscriberStatus.newBuilder().setStatus(UpdateSubscriberStatus.Status.FAILURE).build());
responseObserver.onCompleted();
} else if (request.getStreamCut().getStreamInfo().getStream().equals("stream3")) {
responseObserver.onNext(UpdateSubscriberStatus.newBuilder().setStatus(UpdateSubscriberStatus.Status.STREAM_NOT_FOUND).build());
responseObserver.onCompleted();
} else if (request.getStreamCut().getStreamInfo().getStream().equals("stream4")) {
responseObserver.onNext(UpdateSubscriberStatus.newBuilder().setStatus(UpdateSubscriberStatus.Status.UNRECOGNIZED).build());
responseObserver.onCompleted();
} else if (request.getStreamCut().getStreamInfo().getStream().equals("stream5")) {
responseObserver.onNext(UpdateSubscriberStatus.newBuilder().setStatus(UpdateSubscriberStatus.Status.STREAM_CUT_NOT_VALID).build());
responseObserver.onCompleted();
} else if (request.getStreamCut().getStreamInfo().getStream().equals("stream6")) {
responseObserver.onNext(UpdateSubscriberStatus.newBuilder().setStatus(UpdateSubscriberStatus.Status.SUBSCRIBER_NOT_FOUND).build());
responseObserver.onCompleted();
} else if (request.getStreamCut().getStreamInfo().getStream().equals("stream7")) {
responseObserver.onNext(UpdateSubscriberStatus.newBuilder().setStatus(UpdateSubscriberStatus.Status.GENERATION_MISMATCH).build());
responseObserver.onCompleted();
} else if (request.getStreamCut().getStreamInfo().getStream().equals("deadline")) {
// dont send any response
} else {
responseObserver.onError(Status.INTERNAL.withDescription("Server error").asRuntimeException());
}
}
@Override
public void truncateStream(Controller.StreamCut request, StreamObserver<UpdateStreamStatus> responseObserver) {
if (request.getStreamInfo().getStream().equals("stream1")) {
responseObserver.onNext(UpdateStreamStatus.newBuilder().setStatus(UpdateStreamStatus.Status.SUCCESS).build());
responseObserver.onCompleted();
} else if (request.getStreamInfo().getStream().equals("stream2")) {
responseObserver.onNext(UpdateStreamStatus.newBuilder().setStatus(UpdateStreamStatus.Status.FAILURE).build());
responseObserver.onCompleted();
} else if (request.getStreamInfo().getStream().equals("stream3")) {
responseObserver.onNext(UpdateStreamStatus.newBuilder().setStatus(UpdateStreamStatus.Status.SCOPE_NOT_FOUND).build());
responseObserver.onCompleted();
} else if (request.getStreamInfo().getStream().equals("stream4")) {
responseObserver.onNext(UpdateStreamStatus.newBuilder().setStatus(UpdateStreamStatus.Status.STREAM_NOT_FOUND).build());
responseObserver.onCompleted();
} else if (request.getStreamInfo().getStream().equals("stream5")) {
responseObserver.onNext(UpdateStreamStatus.newBuilder().setStatus(UpdateStreamStatus.Status.UNRECOGNIZED).build());
responseObserver.onCompleted();
} else if (request.getStreamInfo().getStream().equals("deadline")) {
// dont send any response
} else {
responseObserver.onError(Status.INTERNAL.withDescription("Server error").asRuntimeException());
}
}
@Override
public void sealStream(StreamInfo request, StreamObserver<UpdateStreamStatus> responseObserver) {
if (request.getStream().equals("stream1")) {
responseObserver.onNext(UpdateStreamStatus.newBuilder().setStatus(UpdateStreamStatus.Status.SUCCESS).build());
responseObserver.onCompleted();
} else if (request.getStream().equals("stream2")) {
responseObserver.onNext(UpdateStreamStatus.newBuilder().setStatus(UpdateStreamStatus.Status.FAILURE).build());
responseObserver.onCompleted();
} else if (request.getStream().equals("stream3")) {
responseObserver.onNext(UpdateStreamStatus.newBuilder().setStatus(UpdateStreamStatus.Status.SCOPE_NOT_FOUND).build());
responseObserver.onCompleted();
} else if (request.getStream().equals("stream4")) {
responseObserver.onNext(UpdateStreamStatus.newBuilder().setStatus(UpdateStreamStatus.Status.STREAM_NOT_FOUND).build());
responseObserver.onCompleted();
} else if (request.getStream().equals("deadline")) {
// dont send any response
} else {
responseObserver.onError(Status.INTERNAL.withDescription("Server error").asRuntimeException());
}
}
@Override
public void deleteStream(StreamInfo request, StreamObserver<DeleteStreamStatus> responseObserver) {
if (request.getStream().equals("stream1")) {
responseObserver.onNext(DeleteStreamStatus.newBuilder().setStatus(DeleteStreamStatus.Status.SUCCESS).build());
responseObserver.onCompleted();
} else if (request.getStream().equals("stream2")) {
responseObserver.onNext(DeleteStreamStatus.newBuilder().setStatus(DeleteStreamStatus.Status.FAILURE).build());
responseObserver.onCompleted();
} else if (request.getStream().equals("stream3")) {
responseObserver.onNext(DeleteStreamStatus.newBuilder().setStatus(DeleteStreamStatus.Status.STREAM_NOT_FOUND).build());
responseObserver.onCompleted();
} else if (request.getStream().equals("stream4")) {
responseObserver.onNext(DeleteStreamStatus.newBuilder().setStatus(DeleteStreamStatus.Status.STREAM_NOT_SEALED).build());
responseObserver.onCompleted();
} else if (request.getStream().equals("deadline")) {
// dont send any response
} else {
responseObserver.onError(Status.INTERNAL.withDescription("Server error").asRuntimeException());
}
}
@Override
public void getCurrentSegments(StreamInfo request, StreamObserver<SegmentRanges> responseObserver) {
if (request.getStream().equals("stream1")) {
responseObserver.onNext(SegmentRanges.newBuilder().addSegmentRanges(ModelHelper.createSegmentRange("scope1", "stream1", 6, 0.0, 0.4)).addSegmentRanges(ModelHelper.createSegmentRange("scope1", "stream1", 7, 0.4, 1.0)).build());
responseObserver.onCompleted();
} else if (request.getStream().equals("stream8")) {
responseObserver.onNext(SegmentRanges.newBuilder().addSegmentRanges(ModelHelper.createSegmentRange("scope1", "stream8", 9, 0.0, 0.5)).addSegmentRanges(ModelHelper.createSegmentRange("scope1", "stream8", 10, 0.5, 1.0)).build());
responseObserver.onCompleted();
} else if (request.getStream().equals("streamparallel")) {
Exceptions.handleInterrupted(() -> Thread.sleep(500));
responseObserver.onNext(SegmentRanges.newBuilder().addSegmentRanges(ModelHelper.createSegmentRange("scope1", "streamparallel", 0, 0.0, 0.4)).addSegmentRanges(ModelHelper.createSegmentRange("scope1", "streamparallel", 1, 0.4, 1.0)).build());
responseObserver.onCompleted();
} else if (request.getStream().equals("deadline")) {
// dont send any response
} else if (request.getStream().equals("sealedStream")) {
// empty response if the Stream is sealed.
responseObserver.onNext(SegmentRanges.newBuilder().build());
responseObserver.onCompleted();
} else {
responseObserver.onError(Status.INTERNAL.withDescription("Server error").asRuntimeException());
}
}
@Override
public void getEpochSegments(GetEpochSegmentsRequest request, StreamObserver<io.pravega.controller.stream.api.grpc.v1.Controller.SegmentRanges> responseObserver) {
if (request.getStreamInfo().getStream().equals("stream1")) {
responseObserver.onNext(SegmentRanges.newBuilder().addSegmentRanges(ModelHelper.createSegmentRange("scope1", "stream1", 6, 0.0, 0.4)).addSegmentRanges(ModelHelper.createSegmentRange("scope1", "stream1", 7, 0.4, 1.0)).build());
responseObserver.onCompleted();
} else {
responseObserver.onError(Status.INTERNAL.withDescription("Server error").asRuntimeException());
}
}
@Override
public void getSegments(GetSegmentsRequest request, StreamObserver<SegmentsAtTime> responseObserver) {
if (request.getStreamInfo().getStream().equals("stream1")) {
SegmentId segment1 = ModelHelper.createSegmentId("scope1", "stream1", 0);
SegmentId segment2 = ModelHelper.createSegmentId("scope1", "stream1", 1);
responseObserver.onNext(SegmentsAtTime.newBuilder().addSegments(SegmentLocation.newBuilder().setSegmentId(segment1).setOffset(10).build()).addSegments(SegmentLocation.newBuilder().setSegmentId(segment2).setOffset(20).build()).build());
responseObserver.onCompleted();
} else if (request.getStreamInfo().getStream().equals("stream8")) {
SegmentId segment1 = ModelHelper.createSegmentId("scope1", "stream8", 0);
SegmentId segment2 = ModelHelper.createSegmentId("scope1", "stream8", 1);
SegmentId segment3 = ModelHelper.createSegmentId("scope1", "stream8", 2);
responseObserver.onNext(SegmentsAtTime.newBuilder().addSegments(SegmentLocation.newBuilder().setSegmentId(segment1).setOffset(10).build()).addSegments(SegmentLocation.newBuilder().setSegmentId(segment2).setOffset(20).build()).build());
responseObserver.onCompleted();
} else if (request.getStreamInfo().getStream().equals("deadline")) {
// dont send any response
} else {
responseObserver.onError(Status.INTERNAL.withDescription("Server error").asRuntimeException());
}
}
@Override
public void getSegmentsImmediatelyFollowing(SegmentId request, StreamObserver<SuccessorResponse> responseObserver) {
if (request.getStreamInfo().getStream().equals("stream1")) {
Map<SegmentId, Pair<Double, Double>> result = new HashMap<>();
if (request.getSegmentId() == 0) {
result.put(ModelHelper.createSegmentId("scope1", "stream1", 2), Pair.of(0.0, 0.25));
result.put(ModelHelper.createSegmentId("scope1", "stream1", 3), Pair.of(0.25, 0.5));
} else if (request.getSegmentId() == 1) {
result.put(ModelHelper.createSegmentId("scope1", "stream1", 4), Pair.of(0.5, 0.75));
result.put(ModelHelper.createSegmentId("scope1", "stream1", 5), Pair.of(0.75, 1.0));
} else if (request.getSegmentId() == 2 || request.getSegmentId() == 3) {
result.put(ModelHelper.createSegmentId("scope1", "stream1", 6), Pair.of(0.0, 0.5));
} else if (request.getSegmentId() == 4 || request.getSegmentId() == 5) {
result.put(ModelHelper.createSegmentId("scope1", "stream1", 7), Pair.of(0.5, 0.25));
}
val builder = SuccessorResponse.newBuilder();
for (Entry<SegmentId, Pair<Double, Double>> entry : result.entrySet()) {
builder.addSegments(SuccessorResponse.SegmentEntry.newBuilder().setSegment(Controller.SegmentRange.newBuilder().setSegmentId(entry.getKey()).setMinKey(entry.getValue().getLeft()).setMaxKey(entry.getValue().getRight()).build()).addValue(10 * entry.getKey().getSegmentId()).build());
}
responseObserver.onNext(builder.build());
responseObserver.onCompleted();
} else if (request.getStreamInfo().getStream().equals("stream8")) {
Map<SegmentId, Pair<Double, Double>> result = new HashMap<>();
if (request.getSegmentId() == 0) {
result.put(ModelHelper.createSegmentId("scope1", "stream8", 3), Pair.of(0.0, 0.2));
result.put(ModelHelper.createSegmentId("scope1", "stream8", 4), Pair.of(0.2, 0.33));
} else if (request.getSegmentId() == 1) {
result.put(ModelHelper.createSegmentId("scope1", "stream8", 5), Pair.of(0.33, 0.5));
result.put(ModelHelper.createSegmentId("scope1", "stream8", 6), Pair.of(0.5, 0.66));
} else if (request.getSegmentId() == 2) {
result.put(ModelHelper.createSegmentId("scope1", "stream8", 7), Pair.of(0.66, 0.8));
result.put(ModelHelper.createSegmentId("scope1", "stream8", 8), Pair.of(0.8, 1.0));
} else if (request.getSegmentId() == 3 || request.getSegmentId() == 4 || request.getSegmentId() == 5) {
result.put(ModelHelper.createSegmentId("scope1", "stream8", 9), Pair.of(0.0, 0.5));
} else if (request.getSegmentId() == 6 || request.getSegmentId() == 7 || request.getSegmentId() == 8) {
result.put(ModelHelper.createSegmentId("scope1", "stream8", 10), Pair.of(0.5, 1.0));
}
val builder = SuccessorResponse.newBuilder();
for (Entry<SegmentId, Pair<Double, Double>> entry : result.entrySet()) {
builder.addSegments(SuccessorResponse.SegmentEntry.newBuilder().setSegment(Controller.SegmentRange.newBuilder().setSegmentId(entry.getKey()).setMinKey(entry.getValue().getLeft()).setMaxKey(entry.getValue().getRight()).build()).addValue(10 * entry.getKey().getSegmentId()).build());
}
responseObserver.onNext(builder.build());
responseObserver.onCompleted();
} else if (request.getStreamInfo().getStream().equals("deadline")) {
// dont send any response
} else {
responseObserver.onError(Status.INTERNAL.withDescription("Server error").asRuntimeException());
}
}
@Override
public void getSegmentsBetween(Controller.StreamCutRange request, StreamObserver<Controller.StreamCutRangeResponse> responseObserver) {
if (request.getStreamInfo().getStream().equals("stream1")) {
SegmentId segment1 = ModelHelper.createSegmentId("scope1", "stream1", 0L);
SegmentId segment2 = ModelHelper.createSegmentId("scope1", "stream1", 1L);
responseObserver.onNext(Controller.StreamCutRangeResponse.newBuilder().addSegments(segment1).addSegments(segment2).build());
responseObserver.onCompleted();
} else if (request.getStreamInfo().getStream().equals("deadline")) {
// dont send any response
} else {
responseObserver.onError(Status.INTERNAL.withDescription("Server error").asRuntimeException());
}
}
@Override
public void scale(ScaleRequest request, StreamObserver<ScaleResponse> responseObserver) {
if (request.getStreamInfo().getStream().equals("stream1")) {
responseObserver.onNext(ScaleResponse.newBuilder().setStatus(ScaleResponse.ScaleStreamStatus.STARTED).addSegments(ModelHelper.createSegmentRange("scope1", "stream1", 0, 0.0, 0.5)).addSegments(ModelHelper.createSegmentRange("scope1", "stream1", 1, 0.5, 1.0)).setEpoch(0).build());
responseObserver.onCompleted();
} else if (request.getStreamInfo().getStream().equals("deadline")) {
// dont send response
} else {
responseObserver.onError(Status.INTERNAL.withDescription("Server error").asRuntimeException());
}
}
@Override
public void checkScale(ScaleStatusRequest request, StreamObserver<ScaleStatusResponse> responseObserver) {
if (request.getStreamInfo().getStream().equals("stream1")) {
responseObserver.onNext(ScaleStatusResponse.newBuilder().setStatus(ScaleStatusResponse.ScaleStatus.SUCCESS).build());
responseObserver.onCompleted();
} else if (request.getStreamInfo().getStream().equals("deadline")) {
// dont send any response
} else {
responseObserver.onError(Status.INTERNAL.withDescription("Server error").asRuntimeException());
}
}
@Override
public void getURI(SegmentId request, StreamObserver<NodeUri> responseObserver) {
if (request.getStreamInfo().getStream().equals("stream1")) {
responseObserver.onNext(NodeUri.newBuilder().setEndpoint("localhost").setPort(SERVICE_PORT).build());
responseObserver.onCompleted();
} else if (request.getStreamInfo().getStream().equals("deadline")) {
// dont send any response
} else {
responseObserver.onError(Status.INTERNAL.withDescription("Server error").asRuntimeException());
}
}
@Override
public void isSegmentValid(SegmentId request, StreamObserver<SegmentValidityResponse> responseObserver) {
if (request.getStreamInfo().getStream().equals("stream1")) {
responseObserver.onNext(SegmentValidityResponse.newBuilder().setResponse(true).build());
responseObserver.onCompleted();
} else if (request.getStreamInfo().getStream().equals("stream2")) {
responseObserver.onNext(SegmentValidityResponse.newBuilder().setResponse(false).build());
responseObserver.onCompleted();
} else if (request.getStreamInfo().getStream().equals("deadline")) {
// dont send any response
} else {
responseObserver.onError(Status.INTERNAL.withDescription("Server error").asRuntimeException());
}
}
@Override
public void createTransaction(CreateTxnRequest request, StreamObserver<Controller.CreateTxnResponse> responseObserver) {
Controller.CreateTxnResponse.Builder builder = Controller.CreateTxnResponse.newBuilder();
if (request.getStreamInfo().getStream().equals("stream1")) {
builder.setTxnId(TxnId.newBuilder().setHighBits(11L).setLowBits(22L).build());
builder.addActiveSegments(ModelHelper.createSegmentRange("scope1", "stream1", 0, 0.0, 0.5));
builder.addActiveSegments(ModelHelper.createSegmentRange("scope1", "stream1", 1, 0.5, 1.0));
responseObserver.onNext(builder.build());
responseObserver.onCompleted();
} else if (request.getStreamInfo().getStream().equals("stream2")) {
builder.addActiveSegments(ModelHelper.createSegmentRange("scope1", "stream2", 0, 0.0, 1.0));
builder.setTxnId(TxnId.newBuilder().setHighBits(33L).setLowBits(44L).build());
responseObserver.onNext(builder.build());
responseObserver.onCompleted();
} else if (request.getStreamInfo().getStream().equals("deadline")) {
// dont send any response
} else {
responseObserver.onError(Status.INTERNAL.withDescription("Server error").asRuntimeException());
}
}
@Override
public void commitTransaction(TxnRequest request, StreamObserver<Controller.TxnStatus> responseObserver) {
lastRequest.set(request);
if (request.getStreamInfo().getStream().equals("stream1")) {
responseObserver.onNext(Controller.TxnStatus.newBuilder().setStatus(Controller.TxnStatus.Status.SUCCESS).build());
responseObserver.onCompleted();
} else if (request.getStreamInfo().getStream().equals("stream2")) {
responseObserver.onNext(Controller.TxnStatus.newBuilder().setStatus(Controller.TxnStatus.Status.FAILURE).build());
responseObserver.onCompleted();
} else if (request.getStreamInfo().getStream().equals("stream3")) {
responseObserver.onNext(Controller.TxnStatus.newBuilder().setStatus(Controller.TxnStatus.Status.STREAM_NOT_FOUND).build());
responseObserver.onCompleted();
} else if (request.getStreamInfo().getStream().equals("stream4")) {
responseObserver.onNext(Controller.TxnStatus.newBuilder().setStatus(Controller.TxnStatus.Status.TRANSACTION_NOT_FOUND).build());
responseObserver.onCompleted();
} else if (request.getStreamInfo().getStream().equals("deadline")) {
// dont send any response
} else {
responseObserver.onError(Status.INTERNAL.withDescription("Server error").asRuntimeException());
}
}
@Override
public void abortTransaction(TxnRequest request, StreamObserver<Controller.TxnStatus> responseObserver) {
if (request.getStreamInfo().getStream().equals("stream1")) {
responseObserver.onNext(Controller.TxnStatus.newBuilder().setStatus(Controller.TxnStatus.Status.SUCCESS).build());
responseObserver.onCompleted();
} else if (request.getStreamInfo().getStream().equals("stream2")) {
responseObserver.onNext(Controller.TxnStatus.newBuilder().setStatus(Controller.TxnStatus.Status.FAILURE).build());
responseObserver.onCompleted();
} else if (request.getStreamInfo().getStream().equals("stream3")) {
responseObserver.onNext(Controller.TxnStatus.newBuilder().setStatus(Controller.TxnStatus.Status.STREAM_NOT_FOUND).build());
responseObserver.onCompleted();
} else if (request.getStreamInfo().getStream().equals("stream4")) {
responseObserver.onNext(Controller.TxnStatus.newBuilder().setStatus(Controller.TxnStatus.Status.TRANSACTION_NOT_FOUND).build());
responseObserver.onCompleted();
} else if (request.getStreamInfo().getStream().equals("deadline")) {
// dont send any response
} else {
responseObserver.onError(Status.INTERNAL.withDescription("Server error").asRuntimeException());
}
}
@Override
public void pingTransaction(PingTxnRequest request, StreamObserver<PingTxnStatus> responseObserver) {
switch(request.getStreamInfo().getStream()) {
case "stream1":
responseObserver.onNext(PingTxnStatus.newBuilder().setStatus(PingTxnStatus.Status.OK).build());
responseObserver.onCompleted();
break;
case "stream2":
responseObserver.onNext(PingTxnStatus.newBuilder().setStatus(PingTxnStatus.Status.LEASE_TOO_LARGE).build());
responseObserver.onCompleted();
break;
case "stream3":
responseObserver.onNext(PingTxnStatus.newBuilder().setStatus(PingTxnStatus.Status.MAX_EXECUTION_TIME_EXCEEDED).build());
responseObserver.onCompleted();
break;
case "stream4":
responseObserver.onNext(PingTxnStatus.newBuilder().setStatus(PingTxnStatus.Status.DISCONNECTED).build());
responseObserver.onCompleted();
break;
case "stream5":
responseObserver.onNext(PingTxnStatus.newBuilder().setStatus(PingTxnStatus.Status.COMMITTED).build());
responseObserver.onCompleted();
break;
case "stream6":
responseObserver.onNext(PingTxnStatus.newBuilder().setStatus(PingTxnStatus.Status.ABORTED).build());
responseObserver.onCompleted();
break;
case "stream8":
responseObserver.onNext(PingTxnStatus.newBuilder().setStatus(PingTxnStatus.Status.UNKNOWN).build());
responseObserver.onCompleted();
break;
case "deadline":
break;
default:
responseObserver.onError(Status.INTERNAL.withDescription("Server error").asRuntimeException());
break;
}
}
@Override
public void checkTransactionState(TxnRequest request, StreamObserver<TxnState> responseObserver) {
if (request.getStreamInfo().getStream().equals("stream1")) {
responseObserver.onNext(TxnState.newBuilder().setState(TxnState.State.OPEN).build());
responseObserver.onCompleted();
} else if (request.getStreamInfo().getStream().equals("stream2")) {
responseObserver.onNext(TxnState.newBuilder().setState(TxnState.State.UNKNOWN).build());
responseObserver.onCompleted();
} else if (request.getStreamInfo().getStream().equals("stream3")) {
responseObserver.onNext(TxnState.newBuilder().setState(TxnState.State.COMMITTING).build());
responseObserver.onCompleted();
} else if (request.getStreamInfo().getStream().equals("stream4")) {
responseObserver.onNext(TxnState.newBuilder().setState(TxnState.State.COMMITTED).build());
responseObserver.onCompleted();
} else if (request.getStreamInfo().getStream().equals("stream5")) {
responseObserver.onNext(TxnState.newBuilder().setState(TxnState.State.ABORTING).build());
responseObserver.onCompleted();
} else if (request.getStreamInfo().getStream().equals("stream6")) {
responseObserver.onNext(TxnState.newBuilder().setState(TxnState.State.ABORTED).build());
responseObserver.onCompleted();
} else if (request.getStreamInfo().getStream().equals("deadline")) {
// dont send any response
} else {
responseObserver.onError(Status.INTERNAL.withDescription("Server error").asRuntimeException());
}
}
@Override
public void createScope(ScopeInfo request, StreamObserver<CreateScopeStatus> responseObserver) {
if (request.getScope().equals("scope1")) {
responseObserver.onNext(CreateScopeStatus.newBuilder().setStatus(CreateScopeStatus.Status.SUCCESS).build());
responseObserver.onCompleted();
} else if (request.getScope().equals("scope2")) {
responseObserver.onNext(CreateScopeStatus.newBuilder().setStatus(CreateScopeStatus.Status.FAILURE).build());
responseObserver.onCompleted();
} else if (request.getScope().equals("scope3")) {
responseObserver.onNext(CreateScopeStatus.newBuilder().setStatus(CreateScopeStatus.Status.INVALID_SCOPE_NAME).build());
responseObserver.onCompleted();
} else if (request.getScope().equals("scope4")) {
responseObserver.onNext(CreateScopeStatus.newBuilder().setStatus(CreateScopeStatus.Status.SCOPE_EXISTS).build());
responseObserver.onCompleted();
} else if (request.getScope().equals("deadline")) {
// dont send any response
} else {
responseObserver.onError(Status.INTERNAL.withDescription("Server error").asRuntimeException());
}
}
@Override
public void getDelegationToken(StreamInfo request, StreamObserver<Controller.DelegationToken> responseObserver) {
if (request.getStream().equals("deadline")) {
// dont send any response
} else {
responseObserver.onNext(Controller.DelegationToken.newBuilder().setDelegationToken("token").build());
responseObserver.onCompleted();
}
}
@Override
public void deleteScope(ScopeInfo request, StreamObserver<DeleteScopeStatus> responseObserver) {
if (request.getScope().equals("scope1")) {
responseObserver.onNext(DeleteScopeStatus.newBuilder().setStatus(DeleteScopeStatus.Status.SUCCESS).build());
responseObserver.onCompleted();
} else if (request.getScope().equals("scope2")) {
responseObserver.onNext(DeleteScopeStatus.newBuilder().setStatus(DeleteScopeStatus.Status.FAILURE).build());
responseObserver.onCompleted();
} else if (request.getScope().equals("scope3")) {
responseObserver.onNext(DeleteScopeStatus.newBuilder().setStatus(DeleteScopeStatus.Status.SCOPE_NOT_EMPTY).build());
responseObserver.onCompleted();
} else if (request.getScope().equals("scope4")) {
responseObserver.onNext(DeleteScopeStatus.newBuilder().setStatus(DeleteScopeStatus.Status.SCOPE_NOT_FOUND).build());
responseObserver.onCompleted();
} else if (request.getScope().equals("deadline")) {
// don't send any response
} else {
responseObserver.onError(Status.INTERNAL.withDescription("Server error").asRuntimeException());
}
}
@Override
public void deleteScopeRecursive(ScopeInfo request, StreamObserver<Controller.DeleteScopeStatus> responseObserver) {
if (request.getScope().equals("scope1")) {
responseObserver.onNext(Controller.DeleteScopeStatus.newBuilder().setStatus(Controller.DeleteScopeStatus.Status.SUCCESS).build());
responseObserver.onCompleted();
} else if (request.getScope().equals("scope2")) {
responseObserver.onNext(Controller.DeleteScopeStatus.newBuilder().setStatus(Controller.DeleteScopeStatus.Status.FAILURE).build());
responseObserver.onCompleted();
} else if (request.getScope().equals("scope3")) {
responseObserver.onNext(Controller.DeleteScopeStatus.newBuilder().setStatus(Controller.DeleteScopeStatus.Status.SCOPE_NOT_FOUND).build());
responseObserver.onCompleted();
} else {
responseObserver.onError(Status.INTERNAL.withDescription("Server error").asRuntimeException());
}
}
@Override
public void listStreamsInScope(Controller.StreamsInScopeRequest request, StreamObserver<Controller.StreamsInScopeResponse> responseObserver) {
if (request.getScope().getScope().equals(NON_EXISTENT)) {
responseObserver.onNext(Controller.StreamsInScopeResponse.newBuilder().setStatus(Controller.StreamsInScopeResponse.Status.SCOPE_NOT_FOUND).build());
responseObserver.onCompleted();
} else if (request.getScope().getScope().equals("deadline")) {
// dont send any response
} else if (request.getScope().getScope().equals(FAILING)) {
responseObserver.onNext(Controller.StreamsInScopeResponse.newBuilder().setStatus(Controller.StreamsInScopeResponse.Status.FAILURE).build());
responseObserver.onCompleted();
} else if (Strings.isNullOrEmpty(request.getContinuationToken().getToken())) {
List<StreamInfo> list1 = new LinkedList<>();
list1.add(StreamInfo.newBuilder().setScope(request.getScope().getScope()).setStream("stream1").build());
list1.add(StreamInfo.newBuilder().setScope(request.getScope().getScope()).setStream("stream2").build());
responseObserver.onNext(Controller.StreamsInScopeResponse.newBuilder().setStatus(Controller.StreamsInScopeResponse.Status.SUCCESS).addAllStreams(list1).setContinuationToken(Controller.ContinuationToken.newBuilder().setToken("myToken").build()).build());
responseObserver.onCompleted();
} else if (request.getContinuationToken().getToken().equals("myToken")) {
List<StreamInfo> list2 = new LinkedList<>();
list2.add(StreamInfo.newBuilder().setScope(request.getScope().getScope()).setStream("stream3").build());
responseObserver.onNext(Controller.StreamsInScopeResponse.newBuilder().addAllStreams(list2).setStatus(Controller.StreamsInScopeResponse.Status.SUCCESS).setContinuationToken(Controller.ContinuationToken.newBuilder().setToken("myToken2").build()).build());
responseObserver.onCompleted();
} else if (request.getContinuationToken().getToken().equals("myToken2")) {
List<StreamInfo> list3 = new LinkedList<>();
responseObserver.onNext(Controller.StreamsInScopeResponse.newBuilder().addAllStreams(list3).setStatus(Controller.StreamsInScopeResponse.Status.SUCCESS).setContinuationToken(Controller.ContinuationToken.newBuilder().setToken("").build()).build());
responseObserver.onCompleted();
} else {
responseObserver.onError(Status.INTERNAL.withDescription("Server error").asRuntimeException());
}
}
@Override
public void listStreamsInScopeForTag(Controller.StreamsInScopeWithTagRequest request, StreamObserver<Controller.StreamsInScopeResponse> responseObserver) {
if (request.getScope().getScope().equals(NON_EXISTENT)) {
responseObserver.onNext(Controller.StreamsInScopeResponse.newBuilder().setStatus(Controller.StreamsInScopeResponse.Status.SCOPE_NOT_FOUND).build());
responseObserver.onCompleted();
} else if (request.getScope().getScope().equals("deadline")) {
// dont send any response
} else if (request.getScope().getScope().equals(FAILING)) {
responseObserver.onNext(Controller.StreamsInScopeResponse.newBuilder().setStatus(Controller.StreamsInScopeResponse.Status.FAILURE).build());
responseObserver.onCompleted();
} else if (Strings.isNullOrEmpty(request.getContinuationToken().getToken())) {
List<StreamInfo> list1 = new LinkedList<>();
list1.add(StreamInfo.newBuilder().setScope(request.getScope().getScope()).setStream("stream1").build());
list1.add(StreamInfo.newBuilder().setScope(request.getScope().getScope()).setStream("stream2").build());
responseObserver.onNext(Controller.StreamsInScopeResponse.newBuilder().setStatus(Controller.StreamsInScopeResponse.Status.SUCCESS).addAllStreams(list1).setContinuationToken(Controller.ContinuationToken.newBuilder().setToken("chunk0").build()).build());
responseObserver.onCompleted();
} else if (request.getContinuationToken().getToken().equals("chunk0")) {
List<StreamInfo> list2 = new LinkedList<>();
list2.add(StreamInfo.newBuilder().setScope(request.getScope().getScope()).setStream("stream3").build());
responseObserver.onNext(Controller.StreamsInScopeResponse.newBuilder().addAllStreams(list2).setStatus(Controller.StreamsInScopeResponse.Status.SUCCESS).setContinuationToken(Controller.ContinuationToken.newBuilder().setToken("chunk1").build()).build());
responseObserver.onCompleted();
} else if (request.getContinuationToken().getToken().equals("chunk1")) {
List<StreamInfo> list3 = new LinkedList<>();
responseObserver.onNext(Controller.StreamsInScopeResponse.newBuilder().addAllStreams(list3).setStatus(Controller.StreamsInScopeResponse.Status.SUCCESS).setContinuationToken(Controller.ContinuationToken.newBuilder().setToken("chunk24").build()).build());
responseObserver.onCompleted();
} else {
responseObserver.onError(Status.INTERNAL.withDescription("Server error").asRuntimeException());
}
}
@Override
public void isStreamCutValid(Controller.StreamCut request, StreamObserver<Controller.StreamCutValidityResponse> responseObserver) {
if (request.getStreamInfo().getStream().equals("deadline")) {
// do nothing
} else {
responseObserver.onNext(Controller.StreamCutValidityResponse.newBuilder().setResponse(true).build());
responseObserver.onCompleted();
}
}
@Override
public void removeWriter(Controller.RemoveWriterRequest request, StreamObserver<Controller.RemoveWriterResponse> responseObserver) {
if (request.getStream().getStream().equals("deadline")) {
// do nothing
} else {
responseObserver.onNext(Controller.RemoveWriterResponse.newBuilder().setResult(Controller.RemoveWriterResponse.Status.SUCCESS).build());
responseObserver.onCompleted();
}
}
@Override
public void noteTimestampFromWriter(Controller.TimestampFromWriter request, StreamObserver<Controller.TimestampResponse> responseObserver) {
if (request.getWriter().equals("deadline")) {
// do nothing
} else {
responseObserver.onNext(Controller.TimestampResponse.newBuilder().setResult(Controller.TimestampResponse.Status.SUCCESS).build());
responseObserver.onCompleted();
}
}
@Override
public void createKeyValueTable(KeyValueTableConfig request, StreamObserver<CreateKeyValueTableStatus> responseObserver) {
if (request.getKvtName().equals("kvtable1")) {
responseObserver.onNext(CreateKeyValueTableStatus.newBuilder().setStatus(CreateKeyValueTableStatus.Status.SUCCESS).build());
responseObserver.onCompleted();
} else if (request.getKvtName().equals("kvtable2")) {
responseObserver.onNext(CreateKeyValueTableStatus.newBuilder().setStatus(CreateKeyValueTableStatus.Status.FAILURE).build());
responseObserver.onCompleted();
} else if (request.getKvtName().equals("kvtable3")) {
responseObserver.onNext(CreateKeyValueTableStatus.newBuilder().setStatus(CreateKeyValueTableStatus.Status.SCOPE_NOT_FOUND).build());
responseObserver.onCompleted();
} else if (request.getKvtName().equals("kvtable4")) {
responseObserver.onNext(CreateKeyValueTableStatus.newBuilder().setStatus(CreateKeyValueTableStatus.Status.TABLE_EXISTS).build());
responseObserver.onCompleted();
} else if (request.getKvtName().equals("kvtable5")) {
responseObserver.onNext(CreateKeyValueTableStatus.newBuilder().setStatus(CreateKeyValueTableStatus.Status.INVALID_TABLE_NAME).build());
responseObserver.onCompleted();
}
}
@Override
public void getCurrentSegmentsKeyValueTable(Controller.KeyValueTableInfo request, StreamObserver<SegmentRanges> responseObserver) {
if (request.getKvtName().equals("kvtable1")) {
responseObserver.onNext(SegmentRanges.newBuilder().addSegmentRanges(ModelHelper.createSegmentRange("scope1", "kvtable1", 4, 0.0, 0.4)).addSegmentRanges(ModelHelper.createSegmentRange("scope1", "kvtable1", 5, 0.4, 1.0)).build());
responseObserver.onCompleted();
} else {
responseObserver.onError(Status.INTERNAL.withDescription("Server error").asRuntimeException());
}
}
@Override
public void listKeyValueTablesInScope(Controller.KVTablesInScopeRequest request, StreamObserver<Controller.KVTablesInScopeResponse> responseObserver) {
if (request.getScope().getScope().equals(NON_EXISTENT)) {
responseObserver.onNext(Controller.KVTablesInScopeResponse.newBuilder().setStatus(Controller.KVTablesInScopeResponse.Status.SCOPE_NOT_FOUND).build());
responseObserver.onCompleted();
} else if (request.getScope().getScope().equals(FAILING)) {
responseObserver.onNext(Controller.KVTablesInScopeResponse.newBuilder().setStatus(Controller.KVTablesInScopeResponse.Status.FAILURE).build());
responseObserver.onCompleted();
} else if (Strings.isNullOrEmpty(request.getContinuationToken().getToken())) {
List<KeyValueTableInfo> list1 = new LinkedList<>();
list1.add(KeyValueTableInfo.newBuilder().setScope(request.getScope().getScope()).setKvtName("kvtable1").build());
list1.add(KeyValueTableInfo.newBuilder().setScope(request.getScope().getScope()).setKvtName("kvtable2").build());
responseObserver.onNext(Controller.KVTablesInScopeResponse.newBuilder().setStatus(Controller.KVTablesInScopeResponse.Status.SUCCESS).addAllKvtables(list1).setContinuationToken(Controller.ContinuationToken.newBuilder().setToken("myToken").build()).build());
responseObserver.onCompleted();
} else if (request.getContinuationToken().getToken().equals("myToken")) {
List<KeyValueTableInfo> list2 = new LinkedList<>();
list2.add(KeyValueTableInfo.newBuilder().setScope(request.getScope().getScope()).setKvtName("kvtable3").build());
responseObserver.onNext(Controller.KVTablesInScopeResponse.newBuilder().addAllKvtables(list2).setStatus(Controller.KVTablesInScopeResponse.Status.SUCCESS).setContinuationToken(Controller.ContinuationToken.newBuilder().setToken("myToken2").build()).build());
responseObserver.onCompleted();
} else if (request.getContinuationToken().getToken().equals("myToken2")) {
List<KeyValueTableInfo> list3 = new LinkedList<>();
responseObserver.onNext(Controller.KVTablesInScopeResponse.newBuilder().addAllKvtables(list3).setStatus(Controller.KVTablesInScopeResponse.Status.SUCCESS).setContinuationToken(Controller.ContinuationToken.newBuilder().setToken("").build()).build());
responseObserver.onCompleted();
} else {
responseObserver.onError(Status.INTERNAL.withDescription("Server error").asRuntimeException());
}
}
@Override
public void getKeyValueTableConfiguration(KeyValueTableInfo request, StreamObserver<KeyValueTableConfigResponse> responseObserver) {
KeyValueTableConfiguration config = KeyValueTableConfiguration.builder().partitionCount(3).primaryKeyLength(Integer.BYTES).secondaryKeyLength(Long.BYTES).build();
if (request.getKvtName().equals("kvtable")) {
responseObserver.onNext(KeyValueTableConfigResponse.newBuilder().setConfig(ModelHelper.decode(request.getScope(), request.getKvtName(), config)).setStatus(KeyValueTableConfigResponse.Status.SUCCESS).build());
responseObserver.onCompleted();
} else if (request.getKvtName().equals(NON_EXISTENT)) {
responseObserver.onNext(KeyValueTableConfigResponse.newBuilder().setStatus(KeyValueTableConfigResponse.Status.TABLE_NOT_FOUND).build());
responseObserver.onCompleted();
} else if (request.getKvtName().equals(FAILING)) {
responseObserver.onNext(KeyValueTableConfigResponse.newBuilder().setStatus(KeyValueTableConfigResponse.Status.FAILURE).build());
responseObserver.onCompleted();
} else {
responseObserver.onError(Status.INTERNAL.withDescription("Server error").asRuntimeException());
}
}
@Override
public void deleteKeyValueTable(KeyValueTableInfo request, StreamObserver<DeleteKVTableStatus> responseObserver) {
if (request.getKvtName().equals("kvtable1")) {
responseObserver.onNext(DeleteKVTableStatus.newBuilder().setStatus(DeleteKVTableStatus.Status.SUCCESS).build());
responseObserver.onCompleted();
} else if (request.getKvtName().equals("kvtable2")) {
responseObserver.onNext(DeleteKVTableStatus.newBuilder().setStatus(DeleteKVTableStatus.Status.FAILURE).build());
responseObserver.onCompleted();
} else if (request.getKvtName().equals("kvtable3")) {
responseObserver.onNext(DeleteKVTableStatus.newBuilder().setStatus(DeleteKVTableStatus.Status.TABLE_NOT_FOUND).build());
responseObserver.onCompleted();
} else {
responseObserver.onError(Status.INTERNAL.withDescription("Server error").asRuntimeException());
}
}
};
serverPort = TestUtils.getAvailableListenPort();
serverBuilder = NettyServerBuilder.forPort(serverPort).addService(testServerImpl);
if (testSecure) {
serverBuilder = serverBuilder.useTransportSecurity(new File(SecurityConfigDefaults.TLS_SERVER_CERT_PATH), new File(SecurityConfigDefaults.TLS_SERVER_PRIVATE_KEY_PATH));
}
testGRPCServer = serverBuilder.build().start();
executor = ExecutorServiceHelpers.newScheduledThreadPool(1, "test");
controllerClient = new ControllerImpl(ControllerImplConfig.builder().clientConfig(ClientConfig.builder().controllerURI(URI.create((testSecure ? "tls://" : "tcp://") + "localhost:" + serverPort)).credentials(new DefaultCredentials("1111_aaaa", "admin")).trustStore(SecurityConfigDefaults.TLS_CA_CERT_PATH).build()).retryAttempts(1).build(), executor);
}
use of io.pravega.controller.stream.api.grpc.v1.Controller.SegmentsAtTime in project pravega by pravega.
the class ControllerServiceImpl method getSegments.
@Override
public void getSegments(GetSegmentsRequest request, StreamObserver<SegmentsAtTime> responseObserver) {
RequestTag requestTag = requestTracker.initializeAndTrackRequestTag(controllerService.nextRequestId(), GET_SEGMENTS, request.getStreamInfo().getScope(), request.getStreamInfo().getStream());
final StreamInfo streamInfo = request.getStreamInfo();
final String scope = streamInfo.getScope();
final String stream = streamInfo.getStream();
log.debug(requestTag.getRequestId(), "getSegments called for stream " + scope + "/" + stream);
// Older clients will not set requestPermissions, so it'll be set as "". Newer clients will set it as `NONE`.
// For backward compatibility, this operation returns a delegation token for older clients along with the
// segments. For newer clients, it doesn't.
final boolean shouldReturnDelegationToken = !streamInfo.getAccessOperation().equals(StreamInfo.AccessOperation.NONE);
authenticateExecuteAndProcessResults(() -> {
if (shouldReturnDelegationToken) {
// by this method for both reads and writes.
return this.grpcAuthHelper.checkAuthorizationAndCreateToken(authorizationResource.ofStreamInScope(scope, stream), AuthHandler.Permissions.READ_UPDATE);
} else {
return this.grpcAuthHelper.checkAuthorization(authorizationResource.ofStreamInScope(scope, stream), AuthHandler.Permissions.READ);
}
}, authorizationResult -> {
logIfEmpty(authorizationResult, "getSegments", scope, stream);
return controllerService.getSegmentsAtHead(scope, stream, requestTag.getRequestId()).thenApply(segments -> {
SegmentsAtTime.Builder builder = SegmentsAtTime.newBuilder();
if (shouldReturnDelegationToken) {
builder.setDelegationToken(authorizationResult);
}
for (Entry<SegmentId, Long> entry : segments.entrySet()) {
builder.addSegments(SegmentLocation.newBuilder().setSegmentId(entry.getKey()).setOffset(entry.getValue()).build());
}
return builder.build();
});
}, responseObserver);
}
use of io.pravega.controller.stream.api.grpc.v1.Controller.SegmentsAtTime in project pravega by pravega.
the class ControllerServiceImplTest method getSegmentsTest.
@Test
public void getSegmentsTest() {
createScopeAndStream(SCOPE1, STREAM1, ScalingPolicy.fixed(2));
ResultObserver<SegmentsAtTime> result2 = new ResultObserver<>();
this.controllerService.getSegments(GetSegmentsRequest.newBuilder().setStreamInfo(ModelHelper.createStreamInfo(SCOPE1, STREAM1)).setTimestamp(0L).build(), result2);
final SegmentsAtTime segmentRanges = result2.get();
Assert.assertEquals(2, segmentRanges.getSegmentsCount());
}
Aggregations