diff options
author | Jürg Billeter <j@bitron.ch> | 2019-07-24 14:31:42 +0200 |
---|---|---|
committer | Jürg Billeter <j@bitron.ch> | 2019-08-20 08:09:52 +0200 |
commit | 58dbeb21febf24eadacd97d92ed3f61fe93080b9 (patch) | |
tree | 39912f4716e8b7ddda7183c44f4af4ab071c7e36 | |
parent | 9ff6a38786726c4e800ec523714ea442dfb2c605 (diff) | |
download | buildstream-58dbeb21febf24eadacd97d92ed3f61fe93080b9.tar.gz |
casserver.py: Handle CASCacheError for add_object() calls
-rw-r--r-- | src/buildstream/_cas/casserver.py | 25 |
1 files changed, 22 insertions, 3 deletions
diff --git a/src/buildstream/_cas/casserver.py b/src/buildstream/_cas/casserver.py index ba1b65c7c..71c4efde2 100644 --- a/src/buildstream/_cas/casserver.py +++ b/src/buildstream/_cas/casserver.py @@ -37,7 +37,7 @@ from .._protos.buildstream.v2 import buildstream_pb2, buildstream_pb2_grpc, \ artifact_pb2, artifact_pb2_grpc, source_pb2, source_pb2_grpc from .. import utils -from .._exceptions import CASError +from .._exceptions import CASError, CASCacheError from .cascache import CASCache @@ -260,10 +260,20 @@ class _ByteStreamServicer(bytestream_pb2_grpc.ByteStreamServicer): context.set_code(grpc.StatusCode.FAILED_PRECONDITION) return response out.flush() - digest = self.cas.add_object(path=out.name, link_directly=True) + + try: + digest = self.cas.add_object(path=out.name, link_directly=True) + except CASCacheError as e: + if e.reason == "cache-too-full": + context.set_code(grpc.StatusCode.RESOURCE_EXHAUSTED) + else: + context.set_code(grpc.StatusCode.INTERNAL) + return response + if digest.hash != client_digest.hash: context.set_code(grpc.StatusCode.FAILED_PRECONDITION) return response + finished = True assert finished @@ -350,7 +360,16 @@ class _ContentAddressableStorageServicer(remote_execution_pb2_grpc.ContentAddres with tempfile.NamedTemporaryFile(dir=self.cas.tmpdir) as out: out.write(blob_request.data) out.flush() - server_digest = self.cas.add_object(path=out.name) + + try: + server_digest = self.cas.add_object(path=out.name) + except CASCacheError as e: + if e.reason == "cache-too-full": + blob_response.status.code = code_pb2.RESOURCE_EXHAUSTED + else: + blob_response.status.code = code_pb2.INTERNAL + continue + if server_digest.hash != digest.hash: blob_response.status.code = code_pb2.FAILED_PRECONDITION |