Search in sources :

Example 6 with StorageContainerRequest

use of org.apache.bookkeeper.stream.proto.storage.StorageContainerRequest in project bookkeeper by apache.

the class StorageContainerImplTest method testRangeWhenTableStoreNotCached.

@Test
public void testRangeWhenTableStoreNotCached() throws Exception {
    mockStorageContainer(SCID);
    StorageContainerResponse expectedResp = StorageContainerResponse.getDefaultInstance();
    when(trStore.range(any(StorageContainerRequest.class))).thenReturn(FutureUtils.value(expectedResp));
    StorageContainerRequest request = newStorageContainerRequest(KV_RANGE_REQ);
    StorageContainerResponse response = FutureUtils.result(container.range(request));
    assertSame(expectedResp, response);
    assertSame(trStore, container.getTableStoreCache().getTableStore(RID));
}
Also used : StorageContainerRequest(org.apache.bookkeeper.stream.proto.storage.StorageContainerRequest) StorageContainerResponse(org.apache.bookkeeper.stream.proto.storage.StorageContainerResponse) Test(org.junit.Test)

Example 7 with StorageContainerRequest

use of org.apache.bookkeeper.stream.proto.storage.StorageContainerRequest in project bookkeeper by apache.

the class StorageContainerImplTest method testDeleteWhenTableStoreNotCached.

@Test
public void testDeleteWhenTableStoreNotCached() throws Exception {
    mockStorageContainer(SCID);
    StorageContainerResponse expectedResp = StorageContainerResponse.getDefaultInstance();
    when(trStore.delete(any(StorageContainerRequest.class))).thenReturn(FutureUtils.value(expectedResp));
    StorageContainerRequest request = newStorageContainerRequest(KV_DELETE_REQ);
    StorageContainerResponse response = FutureUtils.result(container.delete(request));
    assertSame(expectedResp, response);
    assertSame(trStore, container.getTableStoreCache().getTableStore(RID));
}
Also used : StorageContainerRequest(org.apache.bookkeeper.stream.proto.storage.StorageContainerRequest) StorageContainerResponse(org.apache.bookkeeper.stream.proto.storage.StorageContainerResponse) Test(org.junit.Test)

Example 8 with StorageContainerRequest

use of org.apache.bookkeeper.stream.proto.storage.StorageContainerRequest 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 9 with StorageContainerRequest

use of org.apache.bookkeeper.stream.proto.storage.StorageContainerRequest 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 10 with StorageContainerRequest

use of org.apache.bookkeeper.stream.proto.storage.StorageContainerRequest in project bookkeeper by apache.

the class TestKvUtils method testNewKvDeleteRequest.

@Test
public void testNewKvDeleteRequest() {
    try (DeleteOption<ByteBuf> option = optionFactory.newDeleteOption().endKey(key.retainedDuplicate()).prevKv(true).build()) {
        DeleteRangeRequest.Builder delBuilder = newDeleteRequest(key, option);
        StorageContainerRequest request = newKvDeleteRequest(scId, delBuilder);
        assertEquals(scId, request.getScId());
        assertEquals(KV_DELETE_REQ, request.getRequestCase());
        assertEquals(delBuilder.build(), request.getKvDeleteReq());
    }
}
Also used : StorageContainerRequest(org.apache.bookkeeper.stream.proto.storage.StorageContainerRequest) DeleteRangeRequest(org.apache.bookkeeper.stream.proto.kv.rpc.DeleteRangeRequest) ByteBuf(io.netty.buffer.ByteBuf) Test(org.junit.Test)

Aggregations

StorageContainerRequest (org.apache.bookkeeper.stream.proto.storage.StorageContainerRequest)33 Test (org.junit.Test)31 StorageContainerResponse (org.apache.bookkeeper.stream.proto.storage.StorageContainerResponse)27 TestResponseObserver (org.apache.bookkeeper.stream.server.TestResponseObserver)12 RangeStore (org.apache.bookkeeper.stream.storage.api.RangeStore)9 StatusRuntimeException (io.grpc.StatusRuntimeException)5 ByteBuf (io.netty.buffer.ByteBuf)4 StorageContainer (org.apache.bookkeeper.stream.storage.api.sc.StorageContainer)4 StreamObserver (io.grpc.stub.StreamObserver)3 StorageServerChannel (org.apache.bookkeeper.clients.impl.channel.StorageServerChannel)3 RangeStoreImpl (org.apache.bookkeeper.stream.storage.impl.RangeStoreImpl)3 HashStreamRanges (org.apache.bookkeeper.clients.impl.internal.api.HashStreamRanges)2 DeleteRangeRequest (org.apache.bookkeeper.stream.proto.kv.rpc.DeleteRangeRequest)2 MetaRangeServiceImplBase (org.apache.bookkeeper.stream.proto.storage.MetaRangeServiceGrpc.MetaRangeServiceImplBase)2 ExecutionException (java.util.concurrent.ExecutionException)1 ScheduledExecutorService (java.util.concurrent.ScheduledExecutorService)1 AtomicReference (java.util.concurrent.atomic.AtomicReference)1 Cleanup (lombok.Cleanup)1 StorageContainerChannel (org.apache.bookkeeper.clients.impl.container.StorageContainerChannel)1 KvUtils.newIncrementRequest (org.apache.bookkeeper.clients.impl.kv.KvUtils.newIncrementRequest)1