Module: check_mk
Branch: master
Commit: 698f92cbc1ced02d17ee3f00c95fdf81863cc917
URL:
http://git.mathias-kettner.de/git/?p=check_mk.git;a=commit;h=698f92cbc1ced0…
Author: Lars Michelsen <lm(a)mathias-kettner.de>
Date: Wed Feb 22 08:41:54 2017 +0100
GUI crawl: retry failed "connection aborted" failed HTTP calls to fix known
keepalive issue
Change-Id: I1266c915d54d4570108a4219721db685e51fae65
---
tests/testlib/__init__.py | 20 +++++++++++++++++---
1 file changed, 17 insertions(+), 3 deletions(-)
diff --git a/tests/testlib/__init__.py b/tests/testlib/__init__.py
index e971e3b..fa54837 100644
--- a/tests/testlib/__init__.py
+++ b/tests/testlib/__init__.py
@@ -550,7 +550,7 @@ class WebSession(requests.Session):
def _request(self, method, path, proto="http", expected_code=200,
expect_redirect=None,
allow_errors=False, add_transid=False, allow_redirect_to_login=False,
- **kwargs):
+ allow_retry=True, **kwargs):
url = self.url(proto, path)
if add_transid:
@@ -561,9 +561,23 @@ class WebSession(requests.Session):
kwargs["allow_redirects"] = False
if method == "post":
- response = super(WebSession, self).post(url, **kwargs)
+ func = super(WebSession, self).post
else:
- response = super(WebSession, self).get(url, **kwargs)
+ func = super(WebSession, self).get
+
+ # May raise "requests.exceptions.ConnectionError: ('Connection
aborted.', BadStatusLine("''",))"
+ # suddenly without known reason. This may be related to some
+ # apache or HTTP/1.1 issue when working with keepalive connections. See
+ #
https://www.google.de/search?q=connection+aborted+Connection+aborted+bad+st…
+ #
https://github.com/mikem23/keepalive-race
+ # Trying to workaround this by trying the problematic request a second time.
+ try:
+ response = func(url, **kwargs)
+ except requests.ConnectionError, e:
+ if allow_retry and "Connection aborted" in "%s" % e:
+ response = func(url, **kwargs)
+ else:
+ raise
self._handle_http_response(response, expected_code, allow_errors,
expect_redirect, allow_redirect_to_login)