From d23afa1f067faf56007facad2dcd204f77e2a984 Mon Sep 17 00:00:00 2001 From: Cameron Dale Date: Thu, 24 Apr 2008 16:19:09 -0700 Subject: [PATCH] Add a final retry of all errback mirror downloads. --- apt_p2p/apt_p2p.py | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/apt_p2p/apt_p2p.py b/apt_p2p/apt_p2p.py index 86bf013..88e07ea 100644 --- a/apt_p2p/apt_p2p.py +++ b/apt_p2p/apt_p2p.py @@ -289,6 +289,7 @@ class AptP2P(protocol.Factory): else: log.msg('Peers for %s were not found' % url) getDefer = self.peers.get(hash, url) + getDefer.addErrback(self.final_fallback, hash, url) getDefer.addCallback(self.cache.save_file, hash, url) getDefer.addErrback(self.cache.save_error, url) getDefer.addCallbacks(d.callback, d.errback) @@ -306,9 +307,17 @@ class AptP2P(protocol.Factory): if response.code < 200 or response.code >= 300: log.msg('Download from peers failed, going to direct download: %s' % url) getDefer = self.peers.get(hash, url) + getDefer.addErrback(self.final_fallback, hash, url) return getDefer return response + def final_fallback(self, err, hash, url): + """Final retry if the mirror still generated an error.""" + log.msg('Download from mirror failed, retrying once only: %s' % url) + log.err(err) + getDefer = self.peers.get(hash, url) + return getDefer + def new_cached_file(self, file_path, hash, new_hash, url = None, forceDHT = False): """Add a newly cached file to the mirror info and/or the DHT. -- 2.39.5