You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@buildstream.apache.org by tv...@apache.org on 2022/05/07 09:52:55 UTC
[buildstream] 01/02: Make source cache errors temporary
This is an automated email from the ASF dual-hosted git repository.
tvb pushed a commit to branch tristan/sourcecache-retries
in repository https://gitbox.apache.org/repos/asf/buildstream.git
commit 03fdede8a69e95f4ee9c4fd7fd12d63b5fc48d7f
Author: Seppo Yli-Olli <se...@gmail.com>
AuthorDate: Fri May 6 22:27:31 2022 +0300
Make source cache errors temporary
---
src/buildstream/_elementsourcescache.py | 20 ++++++++++++++------
src/buildstream/_exceptions.py | 4 ++--
src/buildstream/_sourcecache.py | 12 ++++++++----
3 files changed, 24 insertions(+), 12 deletions(-)
diff --git a/src/buildstream/_elementsourcescache.py b/src/buildstream/_elementsourcescache.py
index 5f1178d30..e5587b1db 100644
--- a/src/buildstream/_elementsourcescache.py
+++ b/src/buildstream/_elementsourcescache.py
@@ -103,7 +103,9 @@ class ElementSourcesCache(AssetCache):
if errors and not source_digest:
raise SourceCacheError(
- "Failed to pull source {}".format(display_key), detail="\n".join(str(e) for e in errors)
+ "Failed to pull source {}".format(display_key),
+ detail="\n".join(str(e) for e in errors),
+ temporary=True,
)
# If we don't have a source proto, we can't pull source files
@@ -230,7 +232,7 @@ class ElementSourcesCache(AssetCache):
except grpc.RpcError as e:
if e.code() != grpc.StatusCode.RESOURCE_EXHAUSTED:
raise SourceCacheError(
- "Failed to push source blobs with status {}: {}".format(e.code().name, e.details())
+ "Failed to push source blobs with status {}: {}".format(e.code().name, e.details()), temporary=True
)
return False
@@ -261,7 +263,7 @@ class ElementSourcesCache(AssetCache):
except grpc.RpcError as e:
if e.code() != grpc.StatusCode.NOT_FOUND:
raise SourceCacheError(
- "Error checking source cache with status {}: {}".format(e.code().name, e.details())
+ "Error checking source cache with status {}: {}".format(e.code().name, e.details()), temporary=True
)
referenced_directories = [source_proto.files]
@@ -273,7 +275,9 @@ class ElementSourcesCache(AssetCache):
references_directories=referenced_directories,
)
except grpc.RpcError as e:
- raise SourceCacheError("Failed to push source with status {}: {}".format(e.code().name, e.details()))
+ raise SourceCacheError(
+ "Failed to push source with status {}: {}".format(e.code().name, e.details()), temporary=True
+ )
return True
@@ -308,7 +312,9 @@ class ElementSourcesCache(AssetCache):
self.cas._fetch_directory(remote, source.files)
except grpc.RpcError as e:
if e.code() != grpc.StatusCode.NOT_FOUND:
- raise SourceCacheError("Failed to pull source with status {}: {}".format(e.code().name, e.details()))
+ raise SourceCacheError(
+ "Failed to pull source with status {}: {}".format(e.code().name, e.details()), temporary=True
+ )
return False
return True
@@ -324,5 +330,7 @@ class ElementSourcesCache(AssetCache):
except grpc.RpcError as e:
if e.code() != grpc.StatusCode.RESOURCE_EXHAUSTED:
- raise SourceCacheError("Failed to push source with status {}: {}".format(e.code().name, e.details()))
+ raise SourceCacheError(
+ "Failed to push source with status {}: {}".format(e.code().name, e.details()), temporary=True
+ )
return False
diff --git a/src/buildstream/_exceptions.py b/src/buildstream/_exceptions.py
index 46f231783..75badf037 100644
--- a/src/buildstream/_exceptions.py
+++ b/src/buildstream/_exceptions.py
@@ -184,8 +184,8 @@ class AssetCacheError(BstError):
# Raised when errors are encountered in the source caches
#
class SourceCacheError(BstError):
- def __init__(self, message, detail=None, reason=None):
- super().__init__(message, detail=detail, domain=ErrorDomain.SANDBOX, reason=reason)
+ def __init__(self, message, detail=None, reason=None, temporary=False):
+ super().__init__(message, detail=detail, domain=ErrorDomain.SANDBOX, reason=reason, temporary=temporary)
# ArtifactError
diff --git a/src/buildstream/_sourcecache.py b/src/buildstream/_sourcecache.py
index 46e1a6e85..dc706062f 100644
--- a/src/buildstream/_sourcecache.py
+++ b/src/buildstream/_sourcecache.py
@@ -128,7 +128,7 @@ class SourceCache(AssetCache):
)
continue
except CASError as e:
- raise SourceCacheError("Failed to pull source {}: {}".format(display_key, e)) from e
+ raise SourceCacheError("Failed to pull source {}: {}".format(display_key, e), temporary=True) from e
if not source_digest:
return False
@@ -148,7 +148,7 @@ class SourceCache(AssetCache):
source.info("Remote cas ({}) does not have blob {} cached".format(remote, e.blob))
continue
except CASError as e:
- raise SourceCacheError("Failed to pull source {}: {}".format(display_key, e)) from e
+ raise SourceCacheError("Failed to pull source {}: {}".format(display_key, e), temporary=True) from e
return False
@@ -240,7 +240,9 @@ class SourceCache(AssetCache):
except grpc.RpcError as e:
if e.code() != grpc.StatusCode.NOT_FOUND:
- raise SourceCacheError("Failed to pull source with status {}: {}".format(e.code().name, e.details()))
+ raise SourceCacheError(
+ "Failed to pull source with status {}: {}".format(e.code().name, e.details()), temporary=True
+ )
return None
def _push_source(self, source_ref, remote):
@@ -254,5 +256,7 @@ class SourceCache(AssetCache):
except grpc.RpcError as e:
if e.code() != grpc.StatusCode.RESOURCE_EXHAUSTED:
- raise SourceCacheError("Failed to push source with status {}: {}".format(e.code().name, e.details()))
+ raise SourceCacheError(
+ "Failed to push source with status {}: {}".format(e.code().name, e.details()), temporary=True
+ )
return False