From 737e9a7c11233183f48ce6c83d38b504c8ffed12 Mon Sep 17 00:00:00 2001
From: Hongxu Jia <hongxu.jia@windriver.com>
Date: Mon, 30 Jul 2018 15:52:21 +0800
Subject: [PATCH] load.py: retry to invoke request with timeout

While networkless, use request to fetch kickstart file from
network, it failed and wait 300s to break, we should retry
to invoke request with timeout explicitly. So if it the
network is up, the fetch works.

Upstream-Status: inappropriate [oe specific]

Signed-off-by: Hongxu Jia <hongxu.jia@windriver.com>

---
 pykickstart/load.py | 31 +++++++++++++++++++++++++++++++
 1 file changed, 31 insertions(+)

diff --git a/pykickstart/load.py b/pykickstart/load.py
index f75fe5d3..a8f3ed1d 100644
--- a/pykickstart/load.py
+++ b/pykickstart/load.py
@@ -21,12 +21,16 @@ import requests
 from requests.auth import HTTPDigestAuth
 from requests.auth import HTTPBasicAuth
 
+import time
 import shutil
 
 from pykickstart.errors import KickstartError, KickstartAuthError
 from pykickstart.i18n import _
 from requests.exceptions import SSLError, RequestException
 
+import logging
+log = logging.getLogger("anaconda.main")
+
 _is_url = lambda location: '://' in location  # RFC 3986
 
 SSL_VERIFY = False
@@ -72,6 +76,29 @@ def load_to_file(location, destination):
         _copy_file(location, destination)
         return destination
 
+def _access_url(location):
+    status = False
+
+    # Retry 45 times, wait 45s~135s
+    i = 0
+    while i < 45:
+
+        try:
+            request = requests.get(location, verify=SSL_VERIFY, timeout=2)
+        except RequestException as e:
+            log.info("Try '%s' %d times, %s" % (location, i, str(e)))
+            status = False
+            i += 1
+            time.sleep(1)
+            continue
+
+        else:
+            status = True
+            return status
+
+    return status
+
+
 def _get_auth(location, user=None, passwd=None):
 
     auth = None
@@ -93,6 +120,10 @@ def _get_auth(location, user=None, passwd=None):
 
 def _load_url(location, user=None, passwd=None):
     '''Load a location (URL or filename) and return contents as string'''
+
+    if not _access_url(location):
+        raise KickstartError(_("Connection %s failed" % location))
+
     auth = _get_auth(location, user=user, passwd=passwd)
     try:
         request = requests.get(location, verify=SSL_VERIFY, auth=auth)
