X-Git-Url: https://git.arvados.org/arvados.git/blobdiff_plain/12d990a6590e5f23a5998d29a2d8efdb0f733688..1a169a434494175b208d0d5055bb42333d9b64b9:/sdk/python/arvados/commands/_util.py diff --git a/sdk/python/arvados/commands/_util.py b/sdk/python/arvados/commands/_util.py index c42ee7aa29..17454b7d17 100644 --- a/sdk/python/arvados/commands/_util.py +++ b/sdk/python/arvados/commands/_util.py @@ -1,8 +1,14 @@ -#!/usr/bin/env python +# Copyright (C) The Arvados Authors. All rights reserved. +# +# SPDX-License-Identifier: Apache-2.0 import argparse import errno import os +import logging +import signal +from future.utils import listitems, listvalues +import sys def _pos_int(s): num = int(s) @@ -11,9 +17,9 @@ def _pos_int(s): return num retry_opt = argparse.ArgumentParser(add_help=False) -retry_opt.add_argument('--retries', type=_pos_int, default=3, help=""" +retry_opt.add_argument('--retries', type=_pos_int, default=10, help=""" Maximum number of times to retry server requests that encounter temporary -failures (e.g., server down). Default 3.""") +failures (e.g., server down). Default 10.""") def _ignore_error(error): return None @@ -42,3 +48,18 @@ def make_home_conf_dir(path, mode=None, errors='ignore'): if mode is not None: os.chmod(abs_path, mode) return abs_path + +CAUGHT_SIGNALS = [signal.SIGINT, signal.SIGQUIT, signal.SIGTERM] + +def exit_signal_handler(sigcode, frame): + logging.getLogger('arvados').error("Caught signal {}, exiting.".format(sigcode)) + sys.exit(-sigcode) + +def install_signal_handlers(): + global orig_signal_handlers + orig_signal_handlers = {sigcode: signal.signal(sigcode, exit_signal_handler) + for sigcode in CAUGHT_SIGNALS} + +def restore_signal_handlers(): + for sigcode, orig_handler in listitems(orig_signal_handlers): + signal.signal(sigcode, orig_handler)