/** * Creates a callable chain to handle SampleRowKeys RPcs. The chain will: * * <ul> * <li>Convert a table id to a {@link com.google.bigtable.v2.SampleRowKeysRequest}. * <li>Dispatch the request to the GAPIC's {@link BigtableStub#sampleRowKeysCallable()}. * <li>Spool responses into a list. * <li>Retry on failure. * <li>Convert the responses into {@link KeyOffset}s. * </ul> */ private UnaryCallable<String, List<KeyOffset>> createSampleRowKeysCallable() { UnaryCallable<SampleRowKeysRequest, List<SampleRowKeysResponse>> spoolable = stub.sampleRowKeysCallable().all(); UnaryCallable<SampleRowKeysRequest, List<SampleRowKeysResponse>> retryable = Callables.retrying(spoolable, settings.sampleRowKeysSettings(), clientContext); UnaryCallable<String, List<KeyOffset>> userFacing = new SampleRowKeysCallable(retryable, requestContext); return userFacing.withDefaultCallContext(clientContext.getDefaultCallContext()); }
@Override public ApiFuture<PagedListResponseT> futureCall(RequestT request, ApiCallContext context) { ApiFuture<ResponseT> futureResponse = callable.futureCall(request, context); return pagedListResponseFactory.getFuturePagedResponse( callable.withDefaultCallContext(context), request, context, futureResponse); } }
@Override public ApiFuture<PagedListResponseT> futureCall(RequestT request, ApiCallContext context) { ApiFuture<ResponseT> futureResponse = callable.futureCall(request, context); return pagedListResponseFactory.getFuturePagedResponse( callable.withDefaultCallContext(context), request, context, futureResponse); } }
/** * Create a paged callable object that represents a paged API method. Designed for use by * generated code. * * @param grpcCallSettings the gRPC call settings * @param pagedCallSettings {@link PagedCallSettings} to configure the paged settings with. * @param clientContext {@link ClientContext} to use to connect to the service. * @return {@link UnaryCallable} callable object. */ public static <RequestT, ResponseT, PagedListResponseT> UnaryCallable<RequestT, PagedListResponseT> createPagedCallable( GrpcCallSettings<RequestT, ResponseT> grpcCallSettings, PagedCallSettings<RequestT, ResponseT, PagedListResponseT> pagedCallSettings, ClientContext clientContext) { UnaryCallable<RequestT, ResponseT> innerCallable = createBaseUnaryCallable(grpcCallSettings, pagedCallSettings, clientContext); UnaryCallable<RequestT, PagedListResponseT> pagedCallable = Callables.paged(innerCallable, pagedCallSettings); return pagedCallable.withDefaultCallContext(clientContext.getDefaultCallContext()); }
static <RequestT, ResponseT> UnaryCallable<RequestT, ResponseT> createUnaryCallable( UnaryCallable<RequestT, ResponseT> innerCallable, UnaryCallSettings<?, ?> callSettings, ClientContext clientContext) { UnaryCallable<RequestT, ResponseT> callable = new HttpJsonExceptionCallable<>(innerCallable, callSettings.getRetryableCodes()); callable = Callables.retrying(callable, callSettings, clientContext); return callable.withDefaultCallContext(clientContext.getDefaultCallContext()); }
static <RequestT, ResponseT> UnaryCallable<RequestT, ResponseT> createUnaryCallable( UnaryCallable<RequestT, ResponseT> innerCallable, UnaryCallSettings<?, ?> callSettings, ClientContext clientContext) { UnaryCallable<RequestT, ResponseT> callable = new HttpJsonExceptionCallable<>(innerCallable, callSettings.getRetryableCodes()); callable = Callables.retrying(callable, callSettings, clientContext); return callable.withDefaultCallContext(clientContext.getDefaultCallContext()); }
/** * Create a callable object that represents a batching API method. Designed for use by generated * code. * * @param httpJsonCallSettings the http/json call settings * @param batchingCallSettings {@link BatchingCallSettings} to configure the batching related * settings with. * @param clientContext {@link ClientContext} to use to connect to the service. * @return {@link UnaryCallable} callable object. */ public static <RequestT, ResponseT> UnaryCallable<RequestT, ResponseT> createBatchingCallable( HttpJsonCallSettings<RequestT, ResponseT> httpJsonCallSettings, BatchingCallSettings<RequestT, ResponseT> batchingCallSettings, ClientContext clientContext) { UnaryCallable<RequestT, ResponseT> callable = createDirectUnaryCallable(httpJsonCallSettings); callable = createUnaryCallable(callable, batchingCallSettings, clientContext); callable = Callables.batching(callable, batchingCallSettings, clientContext); return callable.withDefaultCallContext(clientContext.getDefaultCallContext()); }
/** * Create a paged callable object that represents a paged API method. Designed for use by * generated code. * * @param httpJsonCallSettings the http/json call settings * @param pagedCallSettings {@link PagedCallSettings} to configure the paged settings with. * @param clientContext {@link ClientContext} to use to connect to the service. * @return {@link UnaryCallable} callable object. */ public static <RequestT, ResponseT, PagedListResponseT> UnaryCallable<RequestT, PagedListResponseT> createPagedCallable( HttpJsonCallSettings<RequestT, ResponseT> httpJsonCallSettings, PagedCallSettings<RequestT, ResponseT, PagedListResponseT> pagedCallSettings, ClientContext clientContext) { UnaryCallable<RequestT, ResponseT> callable = createDirectUnaryCallable(httpJsonCallSettings); callable = createUnaryCallable(callable, pagedCallSettings, clientContext); UnaryCallable<RequestT, PagedListResponseT> pagedCallable = Callables.paged(callable, pagedCallSettings); return pagedCallable.withDefaultCallContext(clientContext.getDefaultCallContext()); }
/** * Create a callable object that represents a batching API method. Designed for use by generated * code. * * @param httpJsonCallSettings the http/json call settings * @param batchingCallSettings {@link BatchingCallSettings} to configure the batching related * settings with. * @param clientContext {@link ClientContext} to use to connect to the service. * @return {@link UnaryCallable} callable object. */ public static <RequestT, ResponseT> UnaryCallable<RequestT, ResponseT> createBatchingCallable( HttpJsonCallSettings<RequestT, ResponseT> httpJsonCallSettings, BatchingCallSettings<RequestT, ResponseT> batchingCallSettings, ClientContext clientContext) { UnaryCallable<RequestT, ResponseT> callable = createDirectUnaryCallable(httpJsonCallSettings); callable = createUnaryCallable(callable, batchingCallSettings, clientContext); callable = Callables.batching(callable, batchingCallSettings, clientContext); return callable.withDefaultCallContext(clientContext.getDefaultCallContext()); }
/** * Create a callable object with grpc-specific functionality. Designed for use by generated code. * * @param innerCallable the callable that performs the work * @param callSettings {@link UnaryCallSettings} to configure the method-level settings with. * @param clientContext {@link ClientContext} to use to connect to the service. * @return {@link UnaryCallable} callable object. */ public static <RequestT, ResponseT> UnaryCallable<RequestT, ResponseT> createUnaryCallable( UnaryCallable<RequestT, ResponseT> innerCallable, UnaryCallSettings<RequestT, ResponseT> callSettings, ClientContext clientContext) { UnaryCallable<RequestT, ResponseT> callable = createBaseUnaryCallable(innerCallable, callSettings, clientContext); return callable.withDefaultCallContext(FakeCallContext.create(clientContext)); }
/** * Create a callable object that represents a simple call to a paged API method. Designed for use * by generated code. * * @param innerCallable the callable that performs the work * @param pagedCallSettings {@link PagedCallSettings} to configure the method-level settings with. * @param clientContext {@link ClientContext} to use to connect to the service. * @return {@link UnaryCallable} callable object. */ public static <RequestT, ResponseT, PagedListResponseT> UnaryCallable<RequestT, ResponseT> createUnpagedCallable( UnaryCallable<RequestT, ResponseT> innerCallable, PagedCallSettings<RequestT, ResponseT, PagedListResponseT> pagedCallSettings, ClientContext clientContext) { UnaryCallable<RequestT, ResponseT> callable = createBaseUnaryCallable(innerCallable, pagedCallSettings, clientContext); return callable.withDefaultCallContext(FakeCallContext.create(clientContext)); }
/** * Create a callable object with grpc-specific functionality. Designed for use by generated code. * * @param grpcCallSettings the gRPC call settings */ public static <RequestT, ResponseT> UnaryCallable<RequestT, ResponseT> createUnaryCallable( GrpcCallSettings<RequestT, ResponseT> grpcCallSettings, UnaryCallSettings<RequestT, ResponseT> callSettings, ClientContext clientContext) { UnaryCallable<RequestT, ResponseT> callable = createBaseUnaryCallable(grpcCallSettings, callSettings, clientContext); callable = new TracedUnaryCallable<>( callable, clientContext.getTracerFactory(), getSpanName(grpcCallSettings.getMethodDescriptor())); return callable.withDefaultCallContext(clientContext.getDefaultCallContext()); }
/** * Create a callable object with grpc-specific functionality. Designed for use by generated code. * * @param grpcCallSettings the gRPC call settings */ public static <RequestT, ResponseT> UnaryCallable<RequestT, ResponseT> createUnaryCallable( GrpcCallSettings<RequestT, ResponseT> grpcCallSettings, UnaryCallSettings<RequestT, ResponseT> callSettings, ClientContext clientContext) { UnaryCallable<RequestT, ResponseT> callable = createBaseUnaryCallable(grpcCallSettings, callSettings, clientContext); callable = new TracedUnaryCallable<>( callable, clientContext.getTracerFactory(), getSpanName(grpcCallSettings.getMethodDescriptor())); return callable.withDefaultCallContext(clientContext.getDefaultCallContext()); }
/** * Creates a callable chain to handle SampleRowKeys RPcs. The chain will: * * <ul> * <li>Convert a table id to a {@link com.google.bigtable.v2.SampleRowKeysRequest}. * <li>Dispatch the request to the GAPIC's {@link BigtableStub#sampleRowKeysCallable()}. * <li>Spool responses into a list. * <li>Retry on failure. * <li>Convert the responses into {@link KeyOffset}s. * </ul> */ private UnaryCallable<String, List<KeyOffset>> createSampleRowKeysCallable() { UnaryCallable<SampleRowKeysRequest, List<SampleRowKeysResponse>> spoolable = stub.sampleRowKeysCallable().all(); UnaryCallable<SampleRowKeysRequest, List<SampleRowKeysResponse>> retryable = Callables.retrying(spoolable, settings.sampleRowKeysSettings(), clientContext); UnaryCallable<String, List<KeyOffset>> userFacing = new SampleRowKeysCallable(retryable, requestContext); return userFacing.withDefaultCallContext(clientContext.getDefaultCallContext()); }
/** * Create a callable object that represents a batching API method. Designed for use by generated * code. * * @param innerCallable the callable that performs the work * @param batchingCallSettings {@link BatchingCallSettings} to configure the batching related * settings with. * @param clientContext {@link ClientContext} to use to connect to the service. * @return {@link UnaryCallable} callable object. */ public static <RequestT, ResponseT> UnaryCallable<RequestT, ResponseT> createBatchingCallable( UnaryCallable<RequestT, ResponseT> innerCallable, BatchingCallSettings<RequestT, ResponseT> batchingCallSettings, ClientContext clientContext) { UnaryCallable<RequestT, ResponseT> callable = createBaseUnaryCallable(innerCallable, batchingCallSettings, clientContext); callable = Callables.batching(callable, batchingCallSettings, clientContext); return callable.withDefaultCallContext(FakeCallContext.create(clientContext)); }
@Test public void testFirstElementCallWithDefaultContext() { ApiCallContext defaultCallContext = FakeCallContext.createDefault(); ServerStreamingStashCallable<Integer, Integer> stashCallable = new ServerStreamingStashCallable<>(); UnaryCallable<Integer, Integer> firstCallable = stashCallable.first().withDefaultCallContext(defaultCallContext); Integer request = 1; firstCallable.call(request); Truth.assertThat(stashCallable.getActualRequest()).isSameAs(request); Truth.assertThat(stashCallable.getContext()).isSameAs(defaultCallContext); }
@Test public void testAllElementCallWithDefaultContext() { ApiCallContext defaultCallContext = FakeCallContext.createDefault(); ServerStreamingStashCallable<Integer, Integer> stashCallable = new ServerStreamingStashCallable<>(); UnaryCallable<Integer, List<Integer>> firstCallable = stashCallable.all().withDefaultCallContext(defaultCallContext); Integer request = 1; firstCallable.call(request); Truth.assertThat(stashCallable.getActualRequest()).isSameAs(request); Truth.assertThat(stashCallable.getContext()).isSameAs(defaultCallContext); }
@Override public ApiFuture<ResponseT> futureCall(RequestT request, ApiCallContext context) { if (batcherFactory.getBatchingSettings().getIsEnabled()) { BatchedFuture<ResponseT> result = BatchedFuture.<ResponseT>create(); UnaryCallable<RequestT, ResponseT> unaryCallable = callable.withDefaultCallContext(context); Batch<RequestT, ResponseT> batchableMessage = new Batch<RequestT, ResponseT>(batchingDescriptor, request, unaryCallable, result); PartitionKey partitionKey = batchingDescriptor.getBatchPartitionKey(request); ThresholdBatcher<Batch<RequestT, ResponseT>> batcher = batcherFactory.getPushingBatcher(partitionKey); try { batcher.add(batchableMessage); return result; } catch (FlowControlException e) { throw FlowControlRuntimeException.fromFlowControlException(e); } } else { return callable.futureCall(request, context); } } }
@Test public void testFirstElementCallWithContext() { FakeChannel channel = new FakeChannel(); Credentials credentials = Mockito.mock(Credentials.class); ApiCallContext context = FakeCallContext.createDefault().withChannel(channel).withCredentials(credentials); ServerStreamingStashCallable<Integer, Integer> stashCallable = new ServerStreamingStashCallable<>(); UnaryCallable<Integer, Integer> firstCallable = stashCallable.first().withDefaultCallContext(FakeCallContext.createDefault()); Integer request = 1; firstCallable.call(request, context); Truth.assertThat(stashCallable.getActualRequest()).isSameAs(request); FakeCallContext actualContext = (FakeCallContext) stashCallable.getContext(); Truth.assertThat(actualContext.getChannel()).isSameAs(channel); Truth.assertThat(actualContext.getCredentials()).isSameAs(credentials); }
@Test public void testAllElementCallWithContext() { FakeChannel channel = new FakeChannel(); Credentials credentials = Mockito.mock(Credentials.class); ApiCallContext context = FakeCallContext.createDefault().withChannel(channel).withCredentials(credentials); ServerStreamingStashCallable<Integer, Integer> stashCallable = new ServerStreamingStashCallable<>(); UnaryCallable<Integer, List<Integer>> firstCallable = stashCallable.all().withDefaultCallContext(FakeCallContext.createDefault()); Integer request = 1; firstCallable.call(request, context); Truth.assertThat(stashCallable.getActualRequest()).isSameAs(request); FakeCallContext actualContext = (FakeCallContext) stashCallable.getContext(); Truth.assertThat(actualContext.getChannel()).isSameAs(channel); Truth.assertThat(actualContext.getCredentials()).isSameAs(credentials); } }