summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJürg Billeter <j@bitron.ch>2019-07-24 14:31:42 +0200
committerJürg Billeter <j@bitron.ch>2019-08-20 08:09:52 +0200
commit58dbeb21febf24eadacd97d92ed3f61fe93080b9 (patch)
tree39912f4716e8b7ddda7183c44f4af4ab071c7e36
parent9ff6a38786726c4e800ec523714ea442dfb2c605 (diff)
downloadbuildstream-58dbeb21febf24eadacd97d92ed3f61fe93080b9.tar.gz
casserver.py: Handle CASCacheError for add_object() calls
-rw-r--r--src/buildstream/_cas/casserver.py25
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