diff options
author | Jürg Billeter <j@bitron.ch> | 2019-09-09 10:32:26 +0200 |
---|---|---|
committer | Jürg Billeter <j@bitron.ch> | 2019-09-19 17:31:29 +0200 |
commit | 6bac764cbe87924636dbf58d46e5c2c692250de5 (patch) | |
tree | 6abead963b4cd6c38a252fa498064815c2812722 | |
parent | 62bda1013ec54e3f5bdcad5f8728b555de687c3f (diff) | |
download | buildstream-6bac764cbe87924636dbf58d46e5c2c692250de5.tar.gz |
cascache.py: Use casd in remote_missing_blobs()
Remote CAS servers should not be contacted directly.
-rw-r--r-- | src/buildstream/_cas/cascache.py | 13 |
1 files changed, 11 insertions, 2 deletions
diff --git a/src/buildstream/_cas/cascache.py b/src/buildstream/_cas/cascache.py index d82588b3a..2603b13c5 100644 --- a/src/buildstream/_cas/cascache.py +++ b/src/buildstream/_cas/cascache.py @@ -511,16 +511,25 @@ class CASCache(): # Returns: List of missing Digest objects # def remote_missing_blobs(self, remote, blobs): + cas = self._get_cas() + instance_name = remote.local_cas_instance_name + missing_blobs = dict() # Limit size of FindMissingBlobs request for required_blobs_group in _grouper(iter(blobs), 512): - request = remote_execution_pb2.FindMissingBlobsRequest(instance_name=remote.spec.instance_name) + request = remote_execution_pb2.FindMissingBlobsRequest(instance_name=instance_name) for required_digest in required_blobs_group: d = request.blob_digests.add() d.CopyFrom(required_digest) - response = remote.cas.FindMissingBlobs(request) + try: + response = cas.FindMissingBlobs(request) + except grpc.RpcError as e: + if e.code() == grpc.StatusCode.INVALID_ARGUMENT and e.details().startswith("Invalid instance name"): + raise CASCacheError("Unsupported buildbox-casd version: FindMissingBlobs failed") from e + raise + for missing_digest in response.missing_blob_digests: d = remote_execution_pb2.Digest() d.CopyFrom(missing_digest) |