1
# Copyright 2014-2015 Canonical Limited.
3
# This file is part of charm-helpers.
5
# charm-helpers is free software: you can redistribute it and/or modify
6
# it under the terms of the GNU Lesser General Public License version 3 as
7
# published by the Free Software Foundation.
9
# charm-helpers is distributed in the hope that it will be useful,
10
# but WITHOUT ANY WARRANTY; without even the implied warranty of
11
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12
# GNU Lesser General Public License for more details.
14
# You should have received a copy of the GNU Lesser General Public License
15
# along with charm-helpers. If not, see <http://www.gnu.org/licenses/>.
18
# Copyright 2014 Canonical Ltd.
21
# Edward Hope-Morley <opentastic@gmail.com>
26
from charmhelpers.core.hookenv import (
32
def retry_on_exception(num_retries, base_delay=0, exc_type=Exception):
33
"""If the decorated function raises exception exc_type, allow num_retries
34
retry attempts before raise the exception.
36
def _retry_on_exception_inner_1(f):
37
def _retry_on_exception_inner_2(*args, **kwargs):
42
return f(*args, **kwargs)
47
delay = base_delay * multiplier
49
log("Retrying '%s' %d more times (delay=%s)" %
50
(f.__name__, retries, delay), level=INFO)
55
return _retry_on_exception_inner_2
57
return _retry_on_exception_inner_1