From 9abd3a82cc6d43b8586758b29f32aef44cf261f5 Mon Sep 17 00:00:00 2001 From: Anton Hvornum Date: Mon, 26 Aug 2024 12:50:37 +0200 Subject: [PATCH] Added error handling for mirrors that time out mid-read (#2632) --- archinstall/lib/models/mirrors.py | 14 ++++++++++---- 1 file changed, 10 insertions(+), 4 deletions(-) diff --git a/archinstall/lib/models/mirrors.py b/archinstall/lib/models/mirrors.py index dda174d2..36418cb3 100644 --- a/archinstall/lib/models/mirrors.py +++ b/archinstall/lib/models/mirrors.py @@ -1,5 +1,6 @@ import datetime import pydantic +import http.client import urllib.parse import urllib.request from typing import ( @@ -37,11 +38,16 @@ class MirrorStatusEntryV3(pydantic.BaseModel): if self._speed is None: info(f"Checking download speed of {self._hostname}[{self.score}] by fetching: {self.url}core/os/x86_64/core.db") req = urllib.request.Request(url=f"{self.url}core/os/x86_64/core.db") - with urllib.request.urlopen(req, None, 5) as handle, DownloadTimer(timeout=5) as timer: - size = len(handle.read()) - self._speed = size / timer.time - debug(f" speed: {self._speed} ({int(self._speed / 1024 / 1024 * 100) / 100}MiB/s)") + try: + with urllib.request.urlopen(req, None, 5) as handle, DownloadTimer(timeout=5) as timer: + size = len(handle.read()) + + self._speed = size / timer.time + debug(f" speed: {self._speed} ({int(self._speed / 1024 / 1024 * 100) / 100}MiB/s)") + except http.client.IncompleteRead: + debug(f" speed: ") + self._speed = None return self._speed