Signed-off-by: Daniel Stone <daniels@collabora.com> Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/31602>
43 lines
1.2 KiB
Python
43 lines
1.2 KiB
Python
import time
|
|
import traceback
|
|
import urllib
|
|
import urllib.parse
|
|
import xmlrpc
|
|
import xmlrpc.client
|
|
|
|
import lavacli
|
|
|
|
from .log_follower import fatal_err, print_log
|
|
|
|
|
|
def setup_lava_proxy():
|
|
config = lavacli.load_config("default")
|
|
uri, usr, tok = (config.get(key) for key in ("uri", "username", "token"))
|
|
uri_obj = urllib.parse.urlparse(uri)
|
|
uri_str = f"{uri_obj.scheme}://{usr}:{tok}@{uri_obj.netloc}{uri_obj.path}"
|
|
transport = lavacli.RequestsTransport(
|
|
uri_obj.scheme,
|
|
config.get("proxy"),
|
|
config.get("timeout", 120.0),
|
|
config.get("verify_ssl_cert", True),
|
|
)
|
|
proxy = xmlrpc.client.ServerProxy(uri_str, allow_none=True, transport=transport)
|
|
|
|
return proxy
|
|
|
|
|
|
def call_proxy(fn, *args):
|
|
retries = 60
|
|
for n in range(1, retries + 1):
|
|
try:
|
|
return fn(*args)
|
|
except xmlrpc.client.ProtocolError as err:
|
|
if n == retries:
|
|
traceback.print_exc()
|
|
fatal_err(f"A protocol error occurred (Err {err.errcode} {err.errmsg})")
|
|
else:
|
|
time.sleep(15)
|
|
except xmlrpc.client.Fault as err:
|
|
traceback.print_exc()
|
|
fatal_err(f"FATAL: Fault: {err.faultString} (code: {err.faultCode})", err)
|