mirror of
https://github.com/facebook/proxygen.git
synced 2025-08-07 07:02:53 +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
|
import sys
|
||||||
|
|
||||||
from getdeps.buildopts import setup_build_options
|
from getdeps.buildopts import setup_build_options
|
||||||
|
from getdeps.errors import TransientFailure
|
||||||
from getdeps.load import load_project, manifests_in_dependency_order
|
from getdeps.load import load_project, manifests_in_dependency_order
|
||||||
from getdeps.manifest import ManifestParser
|
from getdeps.manifest import ManifestParser
|
||||||
from getdeps.platform import HostType, context_from_host_tuple
|
from getdeps.platform import HostType, context_from_host_tuple
|
||||||
@@ -407,7 +408,14 @@ def main():
|
|||||||
return 0
|
return 0
|
||||||
try:
|
try:
|
||||||
return args.func(args)
|
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)
|
print("!! Failed", file=sys.stderr)
|
||||||
return 1
|
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 .copytree import prefetch_dir_if_eden
|
||||||
from .envfuncs import Env
|
from .envfuncs import Env
|
||||||
|
from .errors import TransientFailure
|
||||||
from .platform import is_windows
|
from .platform import is_windows
|
||||||
from .runcmd import run_cmd
|
from .runcmd import run_cmd
|
||||||
|
|
||||||
@@ -548,7 +549,13 @@ def download_url_to_file_with_progress(url, file_name):
|
|||||||
|
|
||||||
progress = Progress()
|
progress = Progress()
|
||||||
start = time.time()
|
start = time.time()
|
||||||
|
try:
|
||||||
(_filename, headers) = urlretrieve(url, file_name, reporthook=progress.progress)
|
(_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()
|
end = time.time()
|
||||||
sys.stdout.write(" [Complete in %f seconds]\n" % (end - start))
|
sys.stdout.write(" [Complete in %f seconds]\n" % (end - start))
|
||||||
sys.stdout.flush()
|
sys.stdout.flush()
|
||||||
|
Reference in New Issue
Block a user