Java源码示例:build.bazel.remote.execution.v2.BatchUpdateBlobsRequest
示例1
@Test
public void batchUpdateBlobs() {
DigestUtil digestUtil = new DigestUtil(HashFunction.SHA256);
ByteString content = ByteString.copyFromUtf8("Hello, World!");
Digest digest = digestUtil.compute(content);
BatchUpdateBlobsRequest request =
BatchUpdateBlobsRequest.newBuilder()
.setInstanceName(INSTANCE_NAME)
.addRequests(Request.newBuilder().setDigest(digest).setData(content).build())
.build();
ContentAddressableStorageGrpc.ContentAddressableStorageBlockingStub stub =
ContentAddressableStorageGrpc.newBlockingStub(inProcessChannel);
BatchUpdateBlobsResponse response = stub.batchUpdateBlobs(request);
Response expected =
Response.newBuilder()
.setDigest(digest)
.setStatus(com.google.rpc.Status.newBuilder().setCode(Code.OK.getNumber()).build())
.build();
assertThat(response.getResponsesList())
.containsExactlyElementsIn(Collections.singleton(expected));
}
示例2
@Override
public void batchUpdateBlobs(
BatchUpdateBlobsRequest request, StreamObserver<BatchUpdateBlobsResponse> responseObserver) {
BatchUpdateBlobsResponse.Builder batchResponse = BatchUpdateBlobsResponse.newBuilder();
for (BatchUpdateBlobsRequest.Request r : request.getRequestsList()) {
BatchUpdateBlobsResponse.Response.Builder resp = batchResponse.addResponsesBuilder();
try {
Digest digest = cache.getDigestUtil().compute(r.getData().toByteArray());
getFromFuture(cache.uploadBlob(digest, r.getData()));
if (!r.getDigest().equals(digest)) {
String err =
"Upload digest " + r.getDigest() + " did not match data digest: " + digest;
resp.setStatus(StatusUtils.invalidArgumentStatus("digest", err));
continue;
}
resp.getStatusBuilder().setCode(Code.OK.getNumber());
} catch (Exception e) {
resp.setStatus(StatusUtils.internalErrorStatus(e));
}
}
responseObserver.onNext(batchResponse.build());
responseObserver.onCompleted();
}
示例3
@Override
public Iterable<Digest> putAllBlobs(Iterable<ByteString> blobs, RequestMetadata requestMetadata) {
long totalSize = 0;
ImmutableList.Builder<Request> requests = ImmutableList.builder();
for (ByteString blob : blobs) {
checkState(totalSize + blob.size() <= maxBatchUpdateBlobsSize);
requests.add(Request.newBuilder().setDigest(digestUtil.compute(blob)).setData(blob).build());
totalSize += blob.size();
}
BatchUpdateBlobsRequest batchRequest =
BatchUpdateBlobsRequest.newBuilder()
.setInstanceName(getName())
.addAllRequests(requests.build())
.build();
BatchUpdateBlobsResponse batchResponse =
deadlined(casBlockingStub)
.withInterceptors(attachMetadataInterceptor(requestMetadata))
.batchUpdateBlobs(batchRequest);
PutAllBlobsException exception = null;
for (BatchUpdateBlobsResponse.Response response : batchResponse.getResponsesList()) {
com.google.rpc.Status status = response.getStatus();
if (Code.forNumber(status.getCode()) != Code.OK) {
if (exception == null) {
exception = new PutAllBlobsException();
}
exception.addFailedResponse(response);
}
}
if (exception != null) {
throw exception;
}
return Iterables.transform(
batchResponse.getResponsesList(), (response) -> response.getDigest());
}
示例4
@Test
public void putAllBlobsUploadsBlobs() throws Exception {
String instanceName = "putAllBlobs-test";
serviceRegistry.addService(
new ContentAddressableStorageImplBase() {
@Override
public void batchUpdateBlobs(
BatchUpdateBlobsRequest batchRequest,
StreamObserver<BatchUpdateBlobsResponse> responseObserver) {
checkState(batchRequest.getInstanceName().equals(instanceName));
responseObserver.onNext(
BatchUpdateBlobsResponse.newBuilder()
.addAllResponses(
Iterables.transform(
batchRequest.getRequestsList(),
request ->
Response.newBuilder().setDigest(request.getDigest()).build()))
.build());
responseObserver.onCompleted();
}
});
Instance instance = newStubInstance("putAllBlobs-test");
ByteString first = ByteString.copyFromUtf8("first");
ByteString last = ByteString.copyFromUtf8("last");
ImmutableList<ByteString> blobs = ImmutableList.of(first, last);
ImmutableList<Digest> digests =
ImmutableList.of(DIGEST_UTIL.compute(first), DIGEST_UTIL.compute(last));
assertThat(instance.putAllBlobs(blobs, RequestMetadata.getDefaultInstance()))
.containsAllIn(digests);
}
示例5
@Override
public void batchUpdateBlobs(
BatchUpdateBlobsRequest request, StreamObserver<BatchUpdateBlobsResponse> responseObserver) {
try {
ImmutableList<UploadResult> uploadResults =
storage.batchUpdateBlobs(
request.getRequestsList().stream()
.map(
blobRequest ->
UploadDataSupplier.of(
blobRequest.toString(),
new GrpcDigest(blobRequest.getDigest()),
() -> new ByteArrayInputStream(blobRequest.getData().toByteArray())))
.collect(ImmutableList.toImmutableList()));
BatchUpdateBlobsResponse.Builder responseBuilder = BatchUpdateBlobsResponse.newBuilder();
for (UploadResult uploadResult : uploadResults) {
Builder statusBuilder = com.google.rpc.Status.newBuilder();
statusBuilder.setCode(uploadResult.status);
if (uploadResult.status != 0) {
statusBuilder.setMessage(uploadResult.message);
}
responseBuilder.addResponses(
Response.newBuilder()
.setDigest(GrpcProtocol.get(uploadResult.digest))
.setStatus(statusBuilder.build())
.build());
}
responseObserver.onNext(responseBuilder.build());
responseObserver.onCompleted();
} catch (Exception e) {
// idk how this should be done
e.printStackTrace();
responseObserver.onError(new StatusRuntimeException(Status.fromThrowable(e)));
}
}