From 9bf24e1d61a629b410183dfc4296bba994f0a79e Mon Sep 17 00:00:00 2001 From: Holden Karau Date: Tue, 9 Apr 2013 21:37:02 -0700 Subject: Just use a loop for retries --- ec2/retry_decorator.py | 44 -------------------------------------------- ec2/spark_ec2.py | 23 +++++++++++++++++------ 2 files changed, 17 insertions(+), 50 deletions(-) delete mode 100644 ec2/retry_decorator.py (limited to 'ec2') diff --git a/ec2/retry_decorator.py b/ec2/retry_decorator.py deleted file mode 100644 index 1a2f79ae84..0000000000 --- a/ec2/retry_decorator.py +++ /dev/null @@ -1,44 +0,0 @@ -import time -from functools import wraps - -def retry(ExceptionToCheck, tries=4, delay=3, backoff=2, logger=None): - """Retry calling the decorated function using an exponential backoff. - - http://www.saltycrane.com/blog/2009/11/trying-out-retry-decorator-python/ - original from: http://wiki.python.org/moin/PythonDecoratorLibrary#Retry - - :param ExceptionToCheck: the exception to check. may be a tuple of - exceptions to check - :type ExceptionToCheck: Exception or tuple - :param tries: number of times to try (not retry) before giving up - :type tries: int - :param delay: initial delay between retries in seconds - :type delay: int - :param backoff: backoff multiplier e.g. value of 2 will double the delay - each retry - :type backoff: int - :param logger: logger to use. If None, print - :type logger: logging.Logger instance - """ - def deco_retry(f): - - @wraps(f) - def f_retry(*args, **kwargs): - mtries, mdelay = tries, delay - while mtries > 1: - try: - return f(*args, **kwargs) - except ExceptionToCheck, e: - msg = "%s, Retrying in %d seconds..." % (str(e), mdelay) - if logger: - logger.warning(msg) - else: - print msg - time.sleep(mdelay) - mtries -= 1 - mdelay *= backoff - return f(*args, **kwargs) - - return f_retry # true decorator - - return deco_retry diff --git a/ec2/spark_ec2.py b/ec2/spark_ec2.py index aa2d360fbb..9f2daad2b6 100755 --- a/ec2/spark_ec2.py +++ b/ec2/spark_ec2.py @@ -22,7 +22,6 @@ from __future__ import with_statement import logging import os import random -from retry_decorator import retry import shutil import subprocess import sys @@ -541,12 +540,24 @@ def scp(host, opts, local_file, dest_file): (opts.identity_file, local_file, opts.user, host, dest_file), shell=True) -# Run a command on a host through ssh, throwing an exception if ssh fails -@retry(subprocess.CalledProcessError, tries=3, delay=30) +# Run a command on a host through ssh, retrying up to two times +# and then throwing an exception if ssh continues to fail. def ssh(host, opts, command): - subprocess.check_call( - "ssh -t -o StrictHostKeyChecking=no -i %s %s@%s '%s'" % - (opts.identity_file, opts.user, host, command), shell=True) + tries = 0 + while True: + try: + return subprocess.check_call( + "ssh -t -o StrictHostKeyChecking=no -i %s %s@%s '%s'" % + (opts.identity_file, opts.user, host, command), shell=True) + except subprocess.CalledProcessError as e: + if (tries > 2): + raise e + print "Error connecting to host {0}, sleeping 30".format(e) + time.sleep(30) + tries = tries + 1 + + + # Gets a list of zones to launch instances in -- cgit v1.2.3