Search in sources :

Example 6 with StreamObserver

use of org.apache.beam.vendor.grpc.v1p43p2.io.grpc.stub.StreamObserver in project bookkeeper by apache.

the class TableRequestProcessorTest method testProcess.

private void testProcess(RequestCase type) throws Exception {
    @Cleanup("shutdown") ScheduledExecutorService scheduler = Executors.newSingleThreadScheduledExecutor();
    StorageContainerChannel scChannel = mock(StorageContainerChannel.class);
    CompletableFuture<StorageServerChannel> serverChannelFuture = FutureUtils.createFuture();
    when(scChannel.getStorageContainerChannelFuture()).thenReturn(serverChannelFuture);
    StorageContainerResponse.Builder respBuilder = StorageContainerResponse.newBuilder().setCode(StatusCode.SUCCESS);
    switch(type) {
        case KV_PUT_REQ:
            respBuilder.setKvPutResp(PutResponse.newBuilder().build());
            break;
        case KV_DELETE_REQ:
            respBuilder.setKvDeleteResp(DeleteRangeResponse.newBuilder().build());
            break;
        case KV_RANGE_REQ:
            respBuilder.setKvRangeResp(RangeResponse.newBuilder().build());
            break;
        case KV_INCR_REQ:
            respBuilder.setKvIncrResp(IncrementResponse.newBuilder().build());
            break;
        case KV_TXN_REQ:
            respBuilder.setKvTxnResp(TxnResponse.newBuilder().build());
            break;
        default:
            break;
    }
    StorageContainerResponse response = respBuilder.build();
    AtomicReference<StorageContainerRequest> receivedRequest = new AtomicReference<>(null);
    AtomicReference<RequestCase> receivedRequestType = new AtomicReference<>(null);
    TableServiceImplBase tableService = new TableServiceImplBase() {

        @Override
        public void range(StorageContainerRequest request, StreamObserver<StorageContainerResponse> responseObserver) {
            receivedRequest.set(request);
            receivedRequestType.set(KV_RANGE_REQ);
            complete(responseObserver);
        }

        @Override
        public void put(StorageContainerRequest request, StreamObserver<StorageContainerResponse> responseObserver) {
            receivedRequest.set(request);
            receivedRequestType.set(KV_PUT_REQ);
            complete(responseObserver);
        }

        @Override
        public void delete(StorageContainerRequest request, StreamObserver<StorageContainerResponse> responseObserver) {
            receivedRequest.set(request);
            receivedRequestType.set(KV_DELETE_REQ);
            complete(responseObserver);
        }

        @Override
        public void txn(StorageContainerRequest request, StreamObserver<StorageContainerResponse> responseObserver) {
            receivedRequest.set(request);
            receivedRequestType.set(KV_TXN_REQ);
            complete(responseObserver);
        }

        @Override
        public void increment(StorageContainerRequest request, StreamObserver<StorageContainerResponse> responseObserver) {
            receivedRequest.set(request);
            receivedRequestType.set(KV_INCR_REQ);
            complete(responseObserver);
        }

        private void complete(StreamObserver<StorageContainerResponse> responseStreamObserver) {
            responseStreamObserver.onNext(response);
            responseStreamObserver.onCompleted();
        }
    };
    serviceRegistry.addService(tableService.bindService());
    StorageServerChannel ssChannel = new StorageServerChannel(InProcessChannelBuilder.forName(serverName).directExecutor().build(), Optional.empty());
    serverChannelFuture.complete(ssChannel);
    StorageContainerRequest.Builder requestBuilder = StorageContainerRequest.newBuilder();
    switch(type) {
        case KV_PUT_REQ:
            requestBuilder.setKvPutReq(PutRequest.newBuilder().build());
            break;
        case KV_DELETE_REQ:
            requestBuilder.setKvDeleteReq(DeleteRangeRequest.newBuilder().build());
            break;
        case KV_RANGE_REQ:
            requestBuilder.setKvRangeReq(RangeRequest.newBuilder().build());
            break;
        case KV_INCR_REQ:
            requestBuilder.setKvIncrReq(IncrementRequest.newBuilder().build());
            break;
        case KV_TXN_REQ:
            requestBuilder.setKvTxnReq(TxnRequest.newBuilder().build());
            break;
        default:
            break;
    }
    StorageContainerRequest request = requestBuilder.build();
    TableRequestProcessor<String> processor = TableRequestProcessor.of(request, resp -> "test", scChannel, scheduler);
    assertEquals("test", FutureUtils.result(processor.process()));
    assertSame(request, receivedRequest.get());
    assertEquals(type, receivedRequestType.get());
}
Also used : TableServiceImplBase(org.apache.bookkeeper.stream.proto.storage.TableServiceGrpc.TableServiceImplBase) StreamObserver(io.grpc.stub.StreamObserver) ScheduledExecutorService(java.util.concurrent.ScheduledExecutorService) StorageContainerRequest(org.apache.bookkeeper.stream.proto.storage.StorageContainerRequest) StorageServerChannel(org.apache.bookkeeper.clients.impl.channel.StorageServerChannel) AtomicReference(java.util.concurrent.atomic.AtomicReference) Cleanup(lombok.Cleanup) StorageContainerResponse(org.apache.bookkeeper.stream.proto.storage.StorageContainerResponse) RequestCase(org.apache.bookkeeper.stream.proto.storage.StorageContainerRequest.RequestCase) StorageContainerChannel(org.apache.bookkeeper.clients.impl.container.StorageContainerChannel)

Example 7 with StreamObserver

use of org.apache.beam.vendor.grpc.v1p43p2.io.grpc.stub.StreamObserver in project bookkeeper by apache.

the class TestMetaRangeClientImpl method testGetActiveStreamRangesFailure.

@Test
public void testGetActiveStreamRangesFailure() throws Exception {
    CompletableFuture<StorageServerChannel> serviceFuture = FutureUtils.createFuture();
    metaRangeClient.getStorageContainerClient().setStorageServerChannelFuture(serviceFuture);
    MetaRangeServiceImplBase metaRangeService = new MetaRangeServiceImplBase() {

        @Override
        public void getActiveRanges(StorageContainerRequest request, StreamObserver<StorageContainerResponse> responseObserver) {
            responseObserver.onError(new StatusRuntimeException(Status.INTERNAL));
        }
    };
    serviceRegistry.addService(metaRangeService.bindService());
    StorageServerChannel rsChannel = new StorageServerChannel(InProcessChannelBuilder.forName(serverName).directExecutor().build(), Optional.empty());
    serviceFuture.complete(rsChannel);
    CompletableFuture<HashStreamRanges> getFuture = metaRangeClient.getActiveDataRanges();
    try {
        getFuture.get();
        fail("should fail on rpc failure");
    } catch (ExecutionException ee) {
        assertNotNull(ee.getCause());
        assertTrue(ee.getCause() instanceof StatusRuntimeException);
        StatusRuntimeException se = (StatusRuntimeException) ee.getCause();
        assertEquals(Status.INTERNAL, se.getStatus());
    }
}
Also used : StreamObserver(io.grpc.stub.StreamObserver) HashStreamRanges(org.apache.bookkeeper.clients.impl.internal.api.HashStreamRanges) StorageContainerRequest(org.apache.bookkeeper.stream.proto.storage.StorageContainerRequest) StorageServerChannel(org.apache.bookkeeper.clients.impl.channel.StorageServerChannel) StatusRuntimeException(io.grpc.StatusRuntimeException) ExecutionException(java.util.concurrent.ExecutionException) MetaRangeServiceImplBase(org.apache.bookkeeper.stream.proto.storage.MetaRangeServiceGrpc.MetaRangeServiceImplBase) Test(org.junit.Test)

Example 8 with StreamObserver

use of org.apache.beam.vendor.grpc.v1p43p2.io.grpc.stub.StreamObserver in project bookkeeper by apache.

the class TestGrpcRootRangeService method testCreateStreamFailure.

@Test
public void testCreateStreamFailure() throws Exception {
    RangeStoreImpl rangeService = mock(RangeStoreImpl.class);
    GrpcRootRangeService grpcService = new GrpcRootRangeService(rangeService);
    CreateStreamResponse createResp = CreateStreamResponse.newBuilder().setCode(StatusCode.INTERNAL_SERVER_ERROR).build();
    CreateStreamRequest createReq = createCreateStreamRequest(nsName, streamName, DEFAULT_STREAM_CONF);
    when(rangeService.createStream(createReq)).thenReturn(FutureUtils.exception(CAUSE));
    AtomicReference<CreateStreamResponse> resultHolder = new AtomicReference<>();
    AtomicReference<Throwable> exceptionHolder = new AtomicReference<>();
    CountDownLatch latch = new CountDownLatch(1);
    StreamObserver<CreateStreamResponse> streamObserver = new StreamObserver<CreateStreamResponse>() {

        @Override
        public void onNext(CreateStreamResponse resp) {
            resultHolder.set(resp);
        }

        @Override
        public void onError(Throwable t) {
            exceptionHolder.set(t);
            latch.countDown();
        }

        @Override
        public void onCompleted() {
            latch.countDown();
        }
    };
    grpcService.createStream(CreateStreamRequest.newBuilder().setColName(nsName).setName(streamName).setStreamConf(DEFAULT_STREAM_CONF).build(), streamObserver);
    latch.await();
    assertNull(exceptionHolder.get());
    assertNotNull(resultHolder.get());
    assertEquals(createResp, resultHolder.get());
    verify(rangeService, times(1)).createStream(createReq);
}
Also used : StreamObserver(io.grpc.stub.StreamObserver) CreateStreamRequest(org.apache.bookkeeper.stream.proto.storage.CreateStreamRequest) ProtoUtils.createCreateStreamRequest(org.apache.bookkeeper.stream.protocol.util.ProtoUtils.createCreateStreamRequest) CreateStreamResponse(org.apache.bookkeeper.stream.proto.storage.CreateStreamResponse) AtomicReference(java.util.concurrent.atomic.AtomicReference) CountDownLatch(java.util.concurrent.CountDownLatch) RangeStoreImpl(org.apache.bookkeeper.stream.storage.impl.RangeStoreImpl) Test(org.junit.Test)

Example 9 with StreamObserver

use of org.apache.beam.vendor.grpc.v1p43p2.io.grpc.stub.StreamObserver in project bookkeeper by apache.

the class TestGrpcRootRangeService method testDeleteNamespaceSuccess.

@Test
public void testDeleteNamespaceSuccess() throws Exception {
    RangeStoreImpl rangeService = mock(RangeStoreImpl.class);
    GrpcRootRangeService grpcService = new GrpcRootRangeService(rangeService);
    DeleteNamespaceResponse deleteResp = DeleteNamespaceResponse.newBuilder().setCode(StatusCode.SUCCESS).build();
    DeleteNamespaceRequest deleteReq = createDeleteNamespaceRequest(nsName);
    when(rangeService.deleteNamespace(deleteReq)).thenReturn(CompletableFuture.completedFuture(deleteResp));
    AtomicReference<DeleteNamespaceResponse> resultHolder = new AtomicReference<>();
    AtomicReference<Throwable> exceptionHolder = new AtomicReference<>();
    CountDownLatch latch = new CountDownLatch(1);
    StreamObserver<DeleteNamespaceResponse> streamObserver = new StreamObserver<DeleteNamespaceResponse>() {

        @Override
        public void onNext(DeleteNamespaceResponse resp) {
            resultHolder.set(resp);
        }

        @Override
        public void onError(Throwable t) {
            exceptionHolder.set(t);
            latch.countDown();
        }

        @Override
        public void onCompleted() {
            latch.countDown();
        }
    };
    grpcService.deleteNamespace(DeleteNamespaceRequest.newBuilder().setName(nsName).build(), streamObserver);
    latch.await();
    assertNull(exceptionHolder.get());
    assertNotNull(resultHolder.get());
    assertTrue(deleteResp == resultHolder.get());
    verify(rangeService, times(1)).deleteNamespace(deleteReq);
}
Also used : StreamObserver(io.grpc.stub.StreamObserver) DeleteNamespaceRequest(org.apache.bookkeeper.stream.proto.storage.DeleteNamespaceRequest) ProtoUtils.createDeleteNamespaceRequest(org.apache.bookkeeper.stream.protocol.util.ProtoUtils.createDeleteNamespaceRequest) AtomicReference(java.util.concurrent.atomic.AtomicReference) DeleteNamespaceResponse(org.apache.bookkeeper.stream.proto.storage.DeleteNamespaceResponse) CountDownLatch(java.util.concurrent.CountDownLatch) RangeStoreImpl(org.apache.bookkeeper.stream.storage.impl.RangeStoreImpl) Test(org.junit.Test)

Example 10 with StreamObserver

use of org.apache.beam.vendor.grpc.v1p43p2.io.grpc.stub.StreamObserver in project bookkeeper by apache.

the class TestGrpcRootRangeService method testGetNamespaceSuccess.

@Test
public void testGetNamespaceSuccess() throws Exception {
    RangeStoreImpl rangeService = mock(RangeStoreImpl.class);
    GrpcRootRangeService grpcService = new GrpcRootRangeService(rangeService);
    GetNamespaceResponse getResp = GetNamespaceResponse.newBuilder().setCode(StatusCode.SUCCESS).setColProps(namespaceProps).build();
    GetNamespaceRequest getReq = createGetNamespaceRequest(nsName);
    when(rangeService.getNamespace(getReq)).thenReturn(CompletableFuture.completedFuture(getResp));
    AtomicReference<GetNamespaceResponse> resultHolder = new AtomicReference<>();
    AtomicReference<Throwable> exceptionHolder = new AtomicReference<>();
    CountDownLatch latch = new CountDownLatch(1);
    StreamObserver<GetNamespaceResponse> streamObserver = new StreamObserver<GetNamespaceResponse>() {

        @Override
        public void onNext(GetNamespaceResponse resp) {
            resultHolder.set(resp);
        }

        @Override
        public void onError(Throwable t) {
            exceptionHolder.set(t);
            latch.countDown();
        }

        @Override
        public void onCompleted() {
            latch.countDown();
        }
    };
    grpcService.getNamespace(GetNamespaceRequest.newBuilder().setName(nsName).build(), streamObserver);
    latch.await();
    assertNull(exceptionHolder.get());
    assertNotNull(resultHolder.get());
    assertTrue(getResp == resultHolder.get());
    verify(rangeService, times(1)).getNamespace(getReq);
}
Also used : StreamObserver(io.grpc.stub.StreamObserver) GetNamespaceResponse(org.apache.bookkeeper.stream.proto.storage.GetNamespaceResponse) AtomicReference(java.util.concurrent.atomic.AtomicReference) ProtoUtils.createGetNamespaceRequest(org.apache.bookkeeper.stream.protocol.util.ProtoUtils.createGetNamespaceRequest) GetNamespaceRequest(org.apache.bookkeeper.stream.proto.storage.GetNamespaceRequest) CountDownLatch(java.util.concurrent.CountDownLatch) RangeStoreImpl(org.apache.bookkeeper.stream.storage.impl.RangeStoreImpl) Test(org.junit.Test)

Aggregations

StreamObserver (io.grpc.stub.StreamObserver)130 Test (org.junit.Test)93 CountDownLatch (java.util.concurrent.CountDownLatch)50 ArrayList (java.util.ArrayList)47 AtomicReference (java.util.concurrent.atomic.AtomicReference)38 StreamObserver (org.apache.beam.vendor.grpc.v1p43p2.io.grpc.stub.StreamObserver)27 StatusRuntimeException (io.grpc.StatusRuntimeException)26 Status (io.grpc.Status)20 List (java.util.List)18 BeamFnApi (org.apache.beam.model.fnexecution.v1.BeamFnApi)18 ManagedChannel (org.apache.beam.vendor.grpc.v1p43p2.io.grpc.ManagedChannel)18 CompletableFuture (java.util.concurrent.CompletableFuture)17 ExecutorService (java.util.concurrent.ExecutorService)16 SegmentId (io.pravega.controller.stream.api.grpc.v1.Controller.SegmentId)14 ServerRequest (io.pravega.controller.stream.api.grpc.v1.Controller.ServerRequest)14 VisibleForTesting (com.google.common.annotations.VisibleForTesting)12 Strings (com.google.common.base.Strings)12 Throwables (com.google.common.base.Throwables)12 ImmutableMap (com.google.common.collect.ImmutableMap)12 AuthHandler (io.pravega.auth.AuthHandler)12