mirror of
https://github.com/facebook/proxygen.git
synced 2025-08-05 19:55:47 +03:00
getdeps: introduce TransientFailure exception type
Summary: The goal is to return an error code > 127 in the case of a transient, retryable, infrastructure error. This diff generates those in the case of failure in downloading a URL or from interacting with LFS. Reviewed By: strager Differential Revision: D15266838 fbshipit-source-id: 4f52a791320123968869032c37912dded464a86e
This commit is contained in:
committed by
Facebook Github Bot
parent
b1883448e3
commit
b96314bea8
@@ -16,6 +16,7 @@ import subprocess
|
||||
import sys
|
||||
|
||||
from getdeps.buildopts import setup_build_options
|
||||
from getdeps.errors import TransientFailure
|
||||
from getdeps.load import load_project, manifests_in_dependency_order
|
||||
from getdeps.manifest import ManifestParser
|
||||
from getdeps.platform import HostType, context_from_host_tuple
|
||||
@@ -407,7 +408,14 @@ def main():
|
||||
return 0
|
||||
try:
|
||||
return args.func(args)
|
||||
except subprocess.CalledProcessError:
|
||||
except TransientFailure as exc:
|
||||
print("TransientFailure: %s" % str(exc))
|
||||
# This return code is treated as a retryable transient infrastructure
|
||||
# error by Facebook's internal CI, rather than eg: a build or code
|
||||
# related error that needs to be fixed before progress can be made.
|
||||
return 128
|
||||
except subprocess.CalledProcessError as exc:
|
||||
print("%s" % str(exc), file=sys.stderr)
|
||||
print("!! Failed", file=sys.stderr)
|
||||
return 1
|
||||
|
||||
|
16
build/fbcode_builder/getdeps/errors.py
Normal file
16
build/fbcode_builder/getdeps/errors.py
Normal file
@@ -0,0 +1,16 @@
|
||||
# Copyright (c) 2019-present, Facebook, Inc.
|
||||
# All rights reserved.
|
||||
#
|
||||
# This source code is licensed under the BSD-style license found in the
|
||||
# LICENSE file in the root directory of this source tree. An additional grant
|
||||
# of patent rights can be found in the PATENTS file in the same directory.
|
||||
|
||||
from __future__ import absolute_import, division, print_function, unicode_literals
|
||||
|
||||
|
||||
class TransientFailure(Exception):
|
||||
""" Raising this error causes getdeps to return with an error code
|
||||
that Sandcastle will consider to be a retryable transient
|
||||
infrastructure error """
|
||||
|
||||
pass
|
@@ -21,6 +21,7 @@ import zipfile
|
||||
|
||||
from .copytree import prefetch_dir_if_eden
|
||||
from .envfuncs import Env
|
||||
from .errors import TransientFailure
|
||||
from .platform import is_windows
|
||||
from .runcmd import run_cmd
|
||||
|
||||
@@ -548,7 +549,13 @@ def download_url_to_file_with_progress(url, file_name):
|
||||
|
||||
progress = Progress()
|
||||
start = time.time()
|
||||
(_filename, headers) = urlretrieve(url, file_name, reporthook=progress.progress)
|
||||
try:
|
||||
(_filename, headers) = urlretrieve(url, file_name, reporthook=progress.progress)
|
||||
except OSError as exc:
|
||||
raise TransientFailure(
|
||||
"Failed to download %s to %s: %s" % (url, file_name, str(exc))
|
||||
)
|
||||
|
||||
end = time.time()
|
||||
sys.stdout.write(" [Complete in %f seconds]\n" % (end - start))
|
||||
sys.stdout.flush()
|
||||
|
Reference in New Issue
Block a user