Slight tweaks to mirror commands

We know we are doing updates when setting IPv4/IPv6 information, so set
force_update to True to save the useless select query on each save(). For
mirror checks, use a less cumbersome deque for the results since it is also
thread-safe, and have all the log entries committed in one go.

Signed-off-by: Dan McGee <dan@archlinux.org>
This commit is contained in:
Dan McGee 2011-02-16 21:51:23 -06:00
parent b9fdcd0622
commit fc7fc1d10a
2 changed files with 9 additions and 10 deletions

View File

@ -10,7 +10,9 @@
"""
from django.core.management.base import NoArgsCommand
from django.db import transaction
from collections import deque
from datetime import datetime, timedelta
import logging
import re
@ -130,7 +132,7 @@ def mirror_url_worker(work, output):
item = work.get(block=False)
try:
log = check_mirror_url(item)
output.put(log)
output.append(log)
finally:
work.task_done()
except Empty:
@ -139,7 +141,7 @@ def mirror_url_worker(work, output):
class MirrorCheckPool(object):
def __init__(self, work, num_threads=10):
self.tasks = Queue()
self.logs = Queue()
self.logs = deque()
for i in list(work):
self.tasks.put(i)
self.threads = []
@ -149,6 +151,7 @@ def __init__(self, work, num_threads=10):
thread.daemon = True
self.threads.append(thread)
@transaction.commit_on_success
def run(self):
logger.debug("starting threads")
for t in self.threads:
@ -156,13 +159,9 @@ def run(self):
logger.debug("joining on all threads")
self.tasks.join()
logger.debug("processing log entries")
try:
while True:
log = self.logs.get(block=False)
log.save()
self.logs.task_done()
except Empty:
logger.debug("all log items saved to database")
for log in self.logs:
log.save()
logger.debug("log entries saved")
def check_current_mirrors():
urls = MirrorUrl.objects.filter(

View File

@ -50,7 +50,7 @@ def resolve_mirrors():
mirrorurl.has_ipv6 = socket.AF_INET6 in families
logger.debug("%s: v4: %s v6: %s", hostname,
mirrorurl.has_ipv4, mirrorurl.has_ipv6)
mirrorurl.save()
mirrorurl.save(force_update=True)
except socket.error, e:
logger.warn("error resolving %s: %s", hostname, e)