[tor-commits] [ooni-probe/master] Implement retry logic inside of the oonibclient.
art at torproject.org
art at torproject.org
Sat Sep 28 20:14:37 UTC 2013
commit 1c3a5067ae9a26fc5c537e956e8c0847ad85fe4a
Author: Arturo Filastò <art at fuffa.org>
Date: Thu Sep 12 15:00:31 2013 +0200
Implement retry logic inside of the oonibclient.
---
ooni/oonibclient.py | 37 ++++++++++++++++++++++++++-----------
1 file changed, 26 insertions(+), 11 deletions(-)
diff --git a/ooni/oonibclient.py b/ooni/oonibclient.py
index 24dc374..455aea8 100644
--- a/ooni/oonibclient.py
+++ b/ooni/oonibclient.py
@@ -42,26 +42,41 @@ class Collector(object):
return False
class OONIBClient(object):
+ retries = 3
+
def __init__(self, address):
self.address = address
self.agent = Agent(reactor, sockshost="127.0.0.1",
socksport=config.tor.socks_port)
def _request(self, method, urn, genReceiver, bodyProducer=None):
- finished = defer.Deferred()
+ attempts = 0
- uri = self.address + urn
- headers = {}
- d = self.agent.request(method, uri, bodyProducer=bodyProducer)
+ finished = defer.Deferred()
- @d.addCallback
- def callback(response):
- content_length = int(response.headers.getRawHeaders('content-length')[0])
- response.deliverBody(genReceiver(finished, content_length))
+ def perform_request():
+ uri = self.address + urn
+ headers = {}
+ d = self.agent.request(method, uri, bodyProducer=bodyProducer)
- @d.addErrback
- def eb(err):
- finished.errback(err)
+ @d.addCallback
+ def callback(response):
+ content_length = int(response.headers.getRawHeaders('content-length')[0])
+ response.deliverBody(genReceiver(finished, content_length))
+
+ def errback(err, attempts):
+ # We we will recursively keep trying to perform a request until
+ # we have reached the retry count.
+ if attempts < self.retries:
+ log.err("Lookup failed. Retrying.")
+ attempts += 1
+ perform_request()
+ else:
+ log.err("Failed. Giving up.")
+ finished.errback(err)
+ d.addErrback(errback, attempts)
+
+ perform_request()
return finished
More information about the tor-commits
mailing list