@Override public ApiFuture<List<KeyOffset>> futureCall(String tableId, ApiCallContext context) { String tableName = NameUtil.formatTableName( requestContext.getProjectId(), requestContext.getInstanceId(), tableId); SampleRowKeysRequest request = SampleRowKeysRequest.newBuilder() .setTableName(tableName) .setAppProfileId(requestContext.getAppProfileId()) .build(); ApiFuture<List<SampleRowKeysResponse>> rawResponse = inner.futureCall(request, context); return ApiFutures.transform( rawResponse, new ApiFunction<List<SampleRowKeysResponse>, List<KeyOffset>>() { @Override public List<KeyOffset> apply(List<SampleRowKeysResponse> rawResponse) { return convert(rawResponse); } }, MoreExecutors.directExecutor()); }
@Test @SuppressWarnings("all") public void sampleRowKeysTest() throws Exception { ByteString rowKey = ByteString.copyFromUtf8("122"); long offsetBytes = 889884095L; SampleRowKeysResponse expectedResponse = SampleRowKeysResponse.newBuilder().setRowKey(rowKey).setOffsetBytes(offsetBytes).build(); mockBigtable.addResponse(expectedResponse); TableName tableName = TableName.of("[PROJECT]", "[INSTANCE]", "[TABLE]"); SampleRowKeysRequest request = SampleRowKeysRequest.newBuilder().setTableName(tableName.toString()).build(); MockStreamObserver<SampleRowKeysResponse> responseObserver = new MockStreamObserver<>(); ServerStreamingCallable<SampleRowKeysRequest, SampleRowKeysResponse> callable = client.sampleRowKeysCallable(); callable.serverStreamingCall(request, responseObserver); List<SampleRowKeysResponse> actualResponses = responseObserver.future().get(); Assert.assertEquals(1, actualResponses.size()); Assert.assertEquals(expectedResponse, actualResponses.get(0)); }
@Test public void requestIsCorrect() { callable.futureCall("my-table"); assertThat(inner.request) .isEqualTo( SampleRowKeysRequest.newBuilder() .setTableName( NameUtil.formatTableName( requestContext.getProjectId(), requestContext.getInstanceId(), "my-table")) .setAppProfileId(requestContext.getAppProfileId()) .build()); }
request.setTableName(bigtableTableName.toString()); LOG.debug("Sampling rowkeys for table %s", request.getTableName());
request.setTableName(bigtableTableName.toString()); LOG.debug("Sampling rowkeys for table %s", request.getTableName());
@Override public ApiFuture<List<KeyOffset>> futureCall(String tableId, ApiCallContext context) { String tableName = NameUtil.formatTableName( requestContext.getProjectId(), requestContext.getInstanceId(), tableId); SampleRowKeysRequest request = SampleRowKeysRequest.newBuilder() .setTableName(tableName) .setAppProfileId(requestContext.getAppProfileId()) .build(); ApiFuture<List<SampleRowKeysResponse>> rawResponse = inner.futureCall(request, context); return ApiFutures.transform( rawResponse, new ApiFunction<List<SampleRowKeysResponse>, List<KeyOffset>>() { @Override public List<KeyOffset> apply(List<SampleRowKeysResponse> rawResponse) { return convert(rawResponse); } }, MoreExecutors.directExecutor()); }
/** {@inheritDoc} */ @Override public ListenableFuture<List<KeyOffset>> sampleRowKeysAsync(String tableId) { String fullTableName = NameUtil .formatTableName(requestContext.getProjectId(), requestContext.getInstanceId(), tableId); SampleRowKeysRequest requestProto = SampleRowKeysRequest.newBuilder().setTableName(fullTableName).build(); ListenableFuture<List<SampleRowKeysResponse>> responseProto = delegate.sampleRowKeysAsync(requestProto); return Futures.transform(responseProto, new Function<List<SampleRowKeysResponse>, List<KeyOffset>>() { @Override public List<KeyOffset> apply(@Nonnull List<SampleRowKeysResponse> rowKeysList) { if(rowKeysList == null || rowKeysList.isEmpty()){ return Collections.EMPTY_LIST; } ImmutableList.Builder<KeyOffset> keyOffsetBuilder = ImmutableList.builderWithExpectedSize(rowKeysList.size()); for(SampleRowKeysResponse rowKeys : rowKeysList){ keyOffsetBuilder.add(KeyOffset.create(rowKeys.getRowKey(), rowKeys.getOffsetBytes())); } return keyOffsetBuilder.build(); } }, MoreExecutors.directExecutor()); }
/** {@inheritDoc} */ @Override public List<KeyOffset> sampleRowKeys(String tableId) { String fullTableName = NameUtil .formatTableName(requestContext.getProjectId(), requestContext.getInstanceId(), tableId); SampleRowKeysRequest requestProto = SampleRowKeysRequest.newBuilder() .setTableName(fullTableName) .build(); List<SampleRowKeysResponse> responseProto = delegate.sampleRowKeys(requestProto); ImmutableList.Builder<KeyOffset> keyOffsetBuilder = ImmutableList.builderWithExpectedSize(responseProto.size()); for(SampleRowKeysResponse rowKeys : responseProto){ keyOffsetBuilder.add(KeyOffset.create(rowKeys.getRowKey(), rowKeys.getOffsetBytes())); } return keyOffsetBuilder.build(); }
@Override public List<SampleRowKeysResponse> getSampleRowKeys(BigtableSource source) throws IOException { try (BigtableSession session = new BigtableSession(options)) { SampleRowKeysRequest request = SampleRowKeysRequest.newBuilder() .setTableName(options.getInstanceName().toTableNameStr(source.getTableId().get())) .build(); return session.getDataClient().sampleRowKeys(request); } } }
@Override public List<HRegionInfo> getAllRegionInfos(TableName tableName) throws IOException { ServerName serverName = ServerName.valueOf(options.getDataHost(), options.getPort(), 0); SampleRowKeysRequest.Builder request = SampleRowKeysRequest.newBuilder(); request.setTableName(options.getInstanceName().toTableNameStr(tableName.getNameAsString())); List<SampleRowKeysResponse> sampleRowKeyResponse = this.session.getDataClient().sampleRowKeys(request.build()); return getSampledRowKeysAdapter(tableName, serverName).adaptResponse(sampleRowKeyResponse) .stream() .map(location -> location.getRegionInfo()) .collect(Collectors.toCollection(CopyOnWriteArrayList::new)); }
@Override public List<HRegionInfo> getAllRegionInfos(TableName tableName) throws IOException { ServerName serverName = ServerName.valueOf(options.getDataHost(), options.getPort(), 0); SampleRowKeysRequest.Builder request = SampleRowKeysRequest.newBuilder(); request.setTableName(options.getInstanceName().toTableNameStr(tableName.getNameAsString())); List<SampleRowKeysResponse> sampleRowKeyResponse = this.session.getDataClient().sampleRowKeys(request.build()); return getSampledRowKeysAdapter(tableName, serverName).adaptResponse(sampleRowKeyResponse) .stream() .map(location -> location.getRegionInfo()) .collect(Collectors.toCollection(CopyOnWriteArrayList::new)); }
@Test @SuppressWarnings("all") public void sampleRowKeysExceptionTest() throws Exception { StatusRuntimeException exception = new StatusRuntimeException(Status.INVALID_ARGUMENT); mockBigtable.addException(exception); TableName tableName = TableName.of("[PROJECT]", "[INSTANCE]", "[TABLE]"); SampleRowKeysRequest request = SampleRowKeysRequest.newBuilder().setTableName(tableName.toString()).build(); MockStreamObserver<SampleRowKeysResponse> responseObserver = new MockStreamObserver<>(); ServerStreamingCallable<SampleRowKeysRequest, SampleRowKeysResponse> callable = client.sampleRowKeysCallable(); callable.serverStreamingCall(request, responseObserver); try { List<SampleRowKeysResponse> actualResponses = responseObserver.future().get(); Assert.fail("No exception thrown"); } catch (ExecutionException e) { Assert.assertTrue(e.getCause() instanceof InvalidArgumentException); InvalidArgumentException apiException = (InvalidArgumentException) e.getCause(); Assert.assertEquals(StatusCode.Code.INVALID_ARGUMENT, apiException.getStatusCode().getCode()); } }