[tor-commits] [ooni-probe/master] Final cleanup and bugfixing for task_manager

art at torproject.org art at torproject.org
Tue Apr 30 13:01:44 UTC 2013


commit 5265969cd60f0bf3c5929d129c513ea1e42ab9f2
Author: Arturo Filastò <art at fuffa.org>
Date:   Thu Apr 11 15:35:31 2013 +0200

    Final cleanup and bugfixing for task_manager
---
 ooni/errors.py   |   17 +++++++++++++++++
 ooni/nettest.py  |   12 ------------
 ooni/reporter.py |   38 +++++++++++++++++---------------------
 ooni/runner.py   |    2 +-
 4 files changed, 35 insertions(+), 34 deletions(-)

diff --git a/ooni/errors.py b/ooni/errors.py
index 1be42c3..613dc9b 100644
--- a/ooni/errors.py
+++ b/ooni/errors.py
@@ -143,9 +143,26 @@ class InsufficientPrivileges(Exception):
 
 class ProbeIPUnknown(Exception):
     pass
+
 class GeoIPDataFilesNotFound(Exception):
     pass
+
 class NoMoreReporters(Exception):
     pass
+
 class TorNotRunning(Exception):
     pass
+
+class OONIBReportError(Exception):
+    pass
+
+class OONIBReportUpdateError(OONIBReportError):
+    pass
+
+class OONIBReportCreationError(OONIBReportError):
+    pass
+
+class OONIBTestDetailsLookupError(OONIBReportError):
+    pass
+
+
diff --git a/ooni/nettest.py b/ooni/nettest.py
index 41d7f9f..f0cfa0d 100644
--- a/ooni/nettest.py
+++ b/ooni/nettest.py
@@ -294,19 +294,7 @@ class NetTest(object):
 
         The state for the NetTest is informed of the fact that another task has
         reached the done state.
-
-        Args:
-            report_results:
-                is the list of tuples returned by the self.report.write
-                :class:twisted.internet.defer.DeferredList
-
-        Returns:
-            the same deferred list results
         """
-        for report_status, report_result in report_results:
-            if report_status == False:
-                self.director.reporterFailed(report_result, self)
-
         self.state.taskDone()
 
         if len(self.report.reporters) == 0:
diff --git a/ooni/reporter.py b/ooni/reporter.py
index 5338f3a..e44db57 100644
--- a/ooni/reporter.py
+++ b/ooni/reporter.py
@@ -227,18 +227,6 @@ class YAMLReporter(OReporter):
     def finish(self):
         self._stream.close()
 
-class OONIBReportError(Exception):
-    pass
-
-class OONIBReportUpdateError(OONIBReportError):
-    pass
-
-class OONIBReportCreationError(OONIBReportError):
-    pass
-
-class OONIBTestDetailsLookupError(OONIBReportError):
-    pass
-
 class OONIBReporter(OReporter):
     def __init__(self, test_details, collector_address):
         self.collectorAddress = collector_address
@@ -283,7 +271,7 @@ class OONIBReporter(OReporter):
             # XXX we must trap this in the runner and make sure to report the
             # data later.
             log.err("Error in writing report entry")
-            raise OONIBReportUpdateError
+            raise errors.OONIBReportUpdateError
 
     @defer.inlineCallbacks
     def createReport(self):
@@ -335,16 +323,17 @@ class OONIBReporter(OReporter):
                                 bodyProducer=bodyProducer)
         except ConnectionRefusedError:
             log.err("Connection to reporting backend failed (ConnectionRefusedError)")
-            raise OONIBReportCreationError
+            #yield defer.fail(OONIBReportCreationError())
+            raise errors.OONIBReportCreationError
 
         except errors.HostUnreachable:
             log.err("Host is not reachable (HostUnreachable error")
-            raise OONIBReportCreationError
+            raise errors.OONIBReportCreationError
 
         except Exception, e:
             log.err("Failed to connect to reporter backend")
             log.exception(e)
-            raise OONIBReportCreationError
+            raise errors.OONIBReportCreationError
 
         # This is a little trix to allow us to unspool the response. We create
         # a deferred and call yield on it.
@@ -358,7 +347,7 @@ class OONIBReporter(OReporter):
         except Exception, e:
             log.err("Failed to parse collector response")
             log.exception(e)
-            raise OONIBReportCreationError
+            raise errors.OONIBReportCreationError
 
         self.reportID = parsed_response['report_id']
         self.backendVersion = parsed_response['backend_version']
@@ -398,19 +387,24 @@ class Report(object):
         """
         all_openned = defer.Deferred()
 
+        def are_all_openned():
+            if len(self.reporters) == self._reporters_openned:
+                all_openned.callback(self._reporters_openned)
+
         for reporter in self.reporters[:]:
 
             def report_created(result):
+                log.debug("Created report with %s" % reporter)
                 self._reporters_openned += 1
-                if len(self.reporters) == self._reporters_openned:
-                    all_openned.callback(self._reporters_openned)
+                are_all_openned()
 
             def report_failed(failure):
-                print "WE HAVE FAILED!"
                 try:
                     self.failedOpeningReport(failure, reporter)
                 except errors.NoMoreReporters, e:
                     all_openned.errback(defer.fail(e))
+                else:
+                    are_all_openned()
 
             d = defer.maybeDeferred(reporter.createReport)
             d.addErrback(report_failed)
@@ -433,6 +427,7 @@ class Report(object):
             been written or errbacks when no more reporters
         """
         all_written = defer.Deferred()
+        self._reporters_written = 0
 
         for reporter in self.reporters[:]:
             def report_written(result):
@@ -459,9 +454,10 @@ class Report(object):
         Once a report has failed to be created with a reporter we give up and
         remove the reporter from the list of reporters to write to.
         """
+        failure.trap(errors.OONIBReportError)
         log.err("Failed to open %s reporter, giving up..." % reporter)
         log.err("Reporter %s failed, removing from report..." % reporter)
-        log.exception(failure)
+        #log.exception(failure)
         self.reporters.remove(reporter)
         # Don't forward the exception unless there are no more reporters
         if len(self.reporters) == 0:
diff --git a/ooni/runner.py b/ooni/runner.py
index abdc256..1c28019 100644
--- a/ooni/runner.py
+++ b/ooni/runner.py
@@ -11,7 +11,7 @@ from txtorcon import TorConfig
 from txtorcon import TorState, launch_tor
 
 from ooni import config
-from ooni.reporter import OONIBReporter, YAMLReporter, OONIBReportError
+from ooni.reporter import OONIBReporter, YAMLReporter
 from ooni.inputunit import InputUnitFactory
 from ooni.nettest import NetTestCase, NoPostProcessor
 from ooni.utils import log, checkForRoot, pushFilenameStack





More information about the tor-commits mailing list