commit 40b83a84265a24bd6777195b43a36edc8dc42640 Author: Arturo Filastò arturo@filasto.net Date: Tue Sep 6 22:05:15 2016 +0200
Generate the filename for the report late on to avoid conflicts in measurement IDs --- ooni/deck/deck.py | 18 ++++++++++-------- 1 file changed, 10 insertions(+), 8 deletions(-)
diff --git a/ooni/deck/deck.py b/ooni/deck/deck.py index e4c35c4..3fc10ab 100644 --- a/ooni/deck/deck.py +++ b/ooni/deck/deck.py @@ -1,4 +1,6 @@ import os +import uuid +import errno from copy import deepcopy from string import Template
@@ -90,7 +92,6 @@ class NGDeck(object):
self._measurement_path = FilePath(config.measurements_directory) self._tasks = [] - self.task_ids = []
if deck_path is not None: self.open(deck_path) @@ -145,7 +146,6 @@ class NGDeck(object): self.bouncer.backend_type == "onion"): self.requires_tor = True self._tasks.append(deck_task) - self.task_ids.append(deck_task.id)
if self.metadata.get('no_collector', False): self.no_collector = True @@ -217,7 +217,10 @@ class NGDeck(object):
def _run_ooni_task(self, task, director): net_test_loader = task.ooni["net_test_loader"] - test_details = task.ooni["test_details"] + # XXX-REFACTOR we do this so late to avoid the collision between the + # same id and hence generating the same filename. + test_details = net_test_loader.getTestDetails() + task.id = generate_filename(test_details)
measurement_id = None report_filename = task.output_path @@ -228,9 +231,9 @@ class NGDeck(object): try: measurement_dir.createDirectory() except OSError as ose: - # Ignore 'File Exists' - if ose.errno != 17: - raise + if ose.errno == errno.EEXIST: + raise Exception("Directory already exists, there is a " + "collision")
report_filename = measurement_dir.child("measurements.njson.progress").path pid_file = measurement_dir.child("running.pid") @@ -388,10 +391,9 @@ class DeckTask(object): ) file_path = resolve_file_path(filename, self.cwd) input_file['test_options'][input_file['key']] = file_path - self.ooni['test_details'] = self.ooni['net_test_loader'].getTestDetails() - self.id = generate_filename(self.ooni['test_details'])
def setup(self): + self.id = str(uuid.uuid4()) return getattr(self, "_setup_"+self.type)()
def _load(self, data):
tor-commits@lists.torproject.org