[tor-commits] [ooni-probe/master] Make reporter creation more robust

art at torproject.org art at torproject.org
Sat Mar 30 01:17:21 UTC 2013


commit e620ea035144550e3ca4162a25237367919045cb
Author: Arturo Filastò <art at fuffa.org>
Date:   Wed Mar 13 20:57:44 2013 +0100

    Make reporter creation more robust
    
    We want to raise errors by yielding, because we are inside of a inlineCallbacks
    decorated function.
---
 ooni/reporter.py |   12 +++++++-----
 ooni/runner.py   |    2 +-
 2 files changed, 8 insertions(+), 6 deletions(-)

diff --git a/ooni/reporter.py b/ooni/reporter.py
index 594c6b8..20193c9 100644
--- a/ooni/reporter.py
+++ b/ooni/reporter.py
@@ -226,6 +226,7 @@ class YAMLReporter(OReporter):
 
         self.writeReportEntry(self.testDetails)
         self.created.callback(self)
+        return defer.succeed(None)
 
     def finish(self):
         self._stream.close()
@@ -305,7 +306,7 @@ class OONIBReporter(OReporter):
             self.agent = Agent(reactor, sockshost="127.0.0.1",
                 socksport=int(config.tor.socks_port))
         except Exception, e:
-            log.exception(e)
+            yield defer.fail(e)
 
         url = self.collectorAddress + '/report'
 
@@ -338,11 +339,11 @@ class OONIBReporter(OReporter):
                                 bodyProducer=bodyProducer)
         except ConnectionRefusedError:
             log.err("Connection to reporting backend failed (ConnectionRefusedError)")
-            raise OONIBReportCreationError
+            self.created.errback(defer.fail(OONIBReportCreationError))
 
         except Exception, e:
             log.exception(e)
-            raise OONIBReportCreationError
+            yield defer.fail(OONIBReportCreationError)
 
         # This is a little trix to allow us to unspool the response. We create
         # a deferred and call yield on it.
@@ -355,7 +356,7 @@ class OONIBReporter(OReporter):
             parsed_response = json.loads(backend_response)
         except Exception, e:
             log.exception(e)
-            raise OONIBReportCreationError
+            yield defer.fail(e)
 
         self.reportID = parsed_response['report_id']
         self.backendVersion = parsed_response['backend_version']
@@ -392,7 +393,8 @@ class Report(object):
         """
         l = []
         for reporter in self.reporters[:]:
-            reporter.createReport()
+            d = reporter.createReport()
+            d.addErrback(self.failedOpeningReport, reporter)
             reporter.created.addErrback(self.failedOpeningReport, reporter)
             l.append(reporter.created)
         log.debug("Reporters created: %s" % l)
diff --git a/ooni/runner.py b/ooni/runner.py
index 080db18..abdc256 100644
--- a/ooni/runner.py
+++ b/ooni/runner.py
@@ -15,7 +15,7 @@ from ooni.reporter import OONIBReporter, YAMLReporter, OONIBReportError
 from ooni.inputunit import InputUnitFactory
 from ooni.nettest import NetTestCase, NoPostProcessor
 from ooni.utils import log, checkForRoot, pushFilenameStack
-from ooni.utils import NotRootError, Storage
+from ooni.utils import Storage
 from ooni.utils.net import randomFreePort
 
 class InvalidResumeFile(Exception):





More information about the tor-commits mailing list