diff --git a/etc/tempest.conf.sample b/etc/tempest.conf.sample index 020baa1b20..7ff458aba3 100644 --- a/etc/tempest.conf.sample +++ b/etc/tempest.conf.sample @@ -257,6 +257,9 @@ instance_type = m1.tiny #TCP/IP connection timeout http_socket_timeout = 5 +#Number of retries actions on connection or 5xx error +num_retries = 1 + # Status change wait timout build_timeout = 120 diff --git a/tempest/config.py b/tempest/config.py index 60da85c82e..691a898967 100644 --- a/tempest/config.py +++ b/tempest/config.py @@ -469,6 +469,11 @@ class BotoConfig(BaseConfig): """boto Http socket timeout""" return self.get("http_socket_timeout", "3") + @property + def num_retries(self): + """boto num_retries on error""" + return self.get("num_retries", "1") + @property def build_timeout(self): """status change timeout""" diff --git a/tempest/services/boto/__init__.py b/tempest/services/boto/__init__.py index 2cac8439fd..58a2b3770b 100644 --- a/tempest/services/boto/__init__.py +++ b/tempest/services/boto/__init__.py @@ -36,6 +36,7 @@ class BotoClientBase(object): *args, **kwargs): self.connection_timeout = config.boto.http_socket_timeout + self.num_retries = config.boto.num_retries self.build_timeout = config.boto.build_timeout # We do not need the "path": "/token" part if auth_url: @@ -63,12 +64,13 @@ class BotoClientBase(object): raise NotFound("Unable to get access and secret keys") return ec2_cred - def _config_boto_timeout(self, timeout): + def _config_boto_timeout(self, timeout, retries): try: boto.config.add_section("Boto") except DuplicateSectionError: pass boto.config.set("Boto", "http_socket_timeout", timeout) + boto.config.set("Boto", "num_retries", retries) def __getattr__(self, name): """Automatically creates methods for the allowed methods set""" @@ -86,7 +88,7 @@ class BotoClientBase(object): raise AttributeError(name) def get_connection(self): - self._config_boto_timeout(self.connection_timeout) + self._config_boto_timeout(self.connection_timeout, self.num_retries) if not all((self.connection_data["aws_access_key_id"], self.connection_data["aws_secret_access_key"])): if all(self.ks_cred.itervalues()):