summaryrefslogtreecommitdiffstats
path: root/mirrors/management/commands
diff options
context:
space:
mode:
authorDan McGee <dan@archlinux.org>2010-10-12 03:49:04 +0200
committerDan McGee <dan@archlinux.org>2010-10-12 03:49:04 +0200
commite2612ab3f6963df37f9ca2542718c5712966ca29 (patch)
tree88e5aa756876a846e2ed43344a342ec25fd1a61e /mirrors/management/commands
parent8e186efb2a4676717e92779a7578ec48231646b1 (diff)
downloadarchweb-e2612ab3f6963df37f9ca2542718c5712966ca29.tar.gz
archweb-e2612ab3f6963df37f9ca2542718c5712966ca29.tar.xz
mirrorcheck: catch and handle another socket timeout case
We were seeing processes hang on the Arch server. It looks like there are ways for socket.timeout to come out of the main check code, so add another except block to catch this case. In addition, make sure we always call task_done() even on failures so processes eventually die. Signed-off-by: Dan McGee <dan@archlinux.org>
Diffstat (limited to 'mirrors/management/commands')
-rw-r--r--mirrors/management/commands/mirrorcheck.py13
1 files changed, 10 insertions, 3 deletions
diff --git a/mirrors/management/commands/mirrorcheck.py b/mirrors/management/commands/mirrorcheck.py
index 210505f..4f677a2 100644
--- a/mirrors/management/commands/mirrorcheck.py
+++ b/mirrors/management/commands/mirrorcheck.py
@@ -56,7 +56,8 @@ class Command(NoArgsCommand):
def parse_rfc3339_datetime(time):
# '2010-09-02 11:05:06+02:00'
- m = re.match('^(\d{4})-(\d{2})-(\d{2}) (\d{2}):(\d{2}):(\d{2})([-+])(\d{2}):(\d{2})', time)
+ m = re.match('^(\d{4})-(\d{2})-(\d{2}) '
+ '(\d{2}):(\d{2}):(\d{2})([-+])(\d{2}):(\d{2})', time)
if m:
vals = m.groups()
parsed = datetime(int(vals[0]), int(vals[1]), int(vals[2]),
@@ -120,6 +121,10 @@ def check_mirror_url(mirror_url):
elif isinstance(e.reason, socket.error):
log.error = e.reason.args[1]
logger.debug("failed: %s, %s" % (url, log.error))
+ except socket.timeout, e:
+ log.is_success = false
+ log.error = "Connection timed out."
+ logger.debug("failed: %s, %s" % (url, log.error))
log.save()
return log
@@ -128,8 +133,10 @@ def mirror_url_worker(queue):
while True:
try:
item = queue.get(block=False)
- check_mirror_url(item)
- queue.task_done()
+ try:
+ check_mirror_url(item)
+ finally:
+ queue.task_done()
except Empty:
return 0