| // Copyright 2017 The Bazel Authors. All rights reserved. | |
| // | |
| // Licensed under the Apache License, Version 2.0 (the "License"); | |
| // you may not use this file except in compliance with the License. | |
| // You may obtain a copy of the License at | |
| // | |
| // http://www.apache.org/licenses/LICENSE-2.0 | |
| // | |
| // Unless required by applicable law or agreed to in writing, software | |
| // distributed under the License is distributed on an "AS IS" BASIS, | |
| // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | |
| // See the License for the specific language governing permissions and | |
| // limitations under the License. | |
| package com.google.devtools.build.lib.remote; | |
| import com.google.devtools.build.lib.remote.CasServiceGrpc.CasServiceBlockingStub; | |
| import com.google.devtools.build.lib.remote.CasServiceGrpc.CasServiceStub; | |
| import com.google.devtools.build.lib.remote.ExecuteServiceGrpc.ExecuteServiceBlockingStub; | |
| import com.google.devtools.build.lib.remote.ExecutionCacheServiceGrpc.ExecutionCacheServiceBlockingStub; | |
| import com.google.devtools.build.lib.remote.RemoteProtocol.CasDownloadBlobRequest; | |
| import com.google.devtools.build.lib.remote.RemoteProtocol.CasDownloadReply; | |
| import com.google.devtools.build.lib.remote.RemoteProtocol.CasDownloadTreeMetadataReply; | |
| import com.google.devtools.build.lib.remote.RemoteProtocol.CasDownloadTreeMetadataRequest; | |
| import com.google.devtools.build.lib.remote.RemoteProtocol.CasLookupReply; | |
| import com.google.devtools.build.lib.remote.RemoteProtocol.CasLookupRequest; | |
| import com.google.devtools.build.lib.remote.RemoteProtocol.CasUploadBlobReply; | |
| import com.google.devtools.build.lib.remote.RemoteProtocol.CasUploadBlobRequest; | |
| import com.google.devtools.build.lib.remote.RemoteProtocol.CasUploadTreeMetadataReply; | |
| import com.google.devtools.build.lib.remote.RemoteProtocol.CasUploadTreeMetadataRequest; | |
| import com.google.devtools.build.lib.remote.RemoteProtocol.ExecuteReply; | |
| import com.google.devtools.build.lib.remote.RemoteProtocol.ExecuteRequest; | |
| import com.google.devtools.build.lib.remote.RemoteProtocol.ExecutionCacheReply; | |
| import com.google.devtools.build.lib.remote.RemoteProtocol.ExecutionCacheRequest; | |
| import com.google.devtools.build.lib.remote.RemoteProtocol.ExecutionCacheSetReply; | |
| import com.google.devtools.build.lib.remote.RemoteProtocol.ExecutionCacheSetRequest; | |
| import io.grpc.ManagedChannel; | |
| import io.grpc.stub.StreamObserver; | |
| import java.util.Iterator; | |
| import java.util.concurrent.TimeUnit; | |
| /** | |
| * Implementations of the gRPC interfaces that actually talk to gRPC. | |
| */ | |
| public class GrpcInterfaces { | |
| /** | |
| * Create a {@link GrpcCasInterface} instance that actually talks to gRPC. | |
| */ | |
| public static GrpcCasInterface casInterface( | |
| final int grpcTimeoutSeconds, final ManagedChannel channel) { | |
| return new GrpcCasInterface() { | |
| private CasServiceBlockingStub getCasServiceBlockingStub() { | |
| return CasServiceGrpc.newBlockingStub(channel) | |
| .withDeadlineAfter(grpcTimeoutSeconds, TimeUnit.SECONDS); | |
| } | |
| private CasServiceStub getCasServiceStub() { | |
| return CasServiceGrpc.newStub(channel) | |
| .withDeadlineAfter(grpcTimeoutSeconds, TimeUnit.SECONDS); | |
| } | |
| @Override | |
| public CasLookupReply lookup(CasLookupRequest request) { | |
| return getCasServiceBlockingStub().lookup(request); | |
| } | |
| @Override | |
| public CasUploadTreeMetadataReply uploadTreeMetadata(CasUploadTreeMetadataRequest request) { | |
| return getCasServiceBlockingStub().uploadTreeMetadata(request); | |
| } | |
| @Override | |
| public CasDownloadTreeMetadataReply downloadTreeMetadata( | |
| CasDownloadTreeMetadataRequest request) { | |
| return getCasServiceBlockingStub().downloadTreeMetadata(request); | |
| } | |
| @Override | |
| public Iterator<CasDownloadReply> downloadBlob(CasDownloadBlobRequest request) { | |
| return getCasServiceBlockingStub().downloadBlob(request); | |
| } | |
| @Override | |
| public StreamObserver<CasUploadBlobRequest> uploadBlobAsync( | |
| StreamObserver<CasUploadBlobReply> responseObserver) { | |
| return getCasServiceStub().uploadBlob(responseObserver); | |
| } | |
| }; | |
| } | |
| /** | |
| * Create a {@link GrpcCasInterface} instance that actually talks to gRPC. | |
| */ | |
| public static GrpcExecutionCacheInterface executionCacheInterface( | |
| final int grpcTimeoutSeconds, final ManagedChannel channel) { | |
| return new GrpcExecutionCacheInterface() { | |
| private ExecutionCacheServiceBlockingStub getExecutionCacheServiceBlockingStub() { | |
| return ExecutionCacheServiceGrpc.newBlockingStub(channel) | |
| .withDeadlineAfter(grpcTimeoutSeconds, TimeUnit.SECONDS); | |
| } | |
| @Override | |
| public ExecutionCacheReply getCachedResult(ExecutionCacheRequest request) { | |
| return getExecutionCacheServiceBlockingStub().getCachedResult(request); | |
| } | |
| @Override | |
| public ExecutionCacheSetReply setCachedResult(ExecutionCacheSetRequest request) { | |
| return getExecutionCacheServiceBlockingStub().setCachedResult(request); | |
| } | |
| }; | |
| } | |
| /** | |
| * Create a {@link GrpcExecutionInterface} instance that actually talks to gRPC. | |
| */ | |
| public static GrpcExecutionInterface executionInterface( | |
| final int grpcTimeoutSeconds, final ManagedChannel channel) { | |
| return new GrpcExecutionInterface() { | |
| @Override | |
| public Iterator<ExecuteReply> execute(ExecuteRequest request) { | |
| ExecuteServiceBlockingStub stub = | |
| ExecuteServiceGrpc.newBlockingStub(channel) | |
| .withDeadlineAfter( | |
| grpcTimeoutSeconds + request.getTimeoutMillis() / 1000, TimeUnit.SECONDS); | |
| return stub.execute(request); | |
| } | |
| }; | |
| } | |
| } |