Milimetric has uploaded a new change for review. https://gerrit.wikimedia.org/r/150475
Change subject: Fix report chain stopping ...................................................................... Fix report chain stopping Bug: 68840 Change-Id: Ie4432d72a600450203395052e2bdfab348285882 --- M wikimetrics/models/report_nodes/report.py 1 file changed, 29 insertions(+), 17 deletions(-) git pull ssh://gerrit.wikimedia.org:29418/analytics/wikimetrics refs/changes/75/150475/1 diff --git a/wikimetrics/models/report_nodes/report.py b/wikimetrics/models/report_nodes/report.py index 7c76b29..b8f3641 100644 --- a/wikimetrics/models/report_nodes/report.py +++ b/wikimetrics/models/report_nodes/report.py @@ -1,4 +1,5 @@ import celery +import traceback from uuid import uuid4 from celery import current_task from datetime import datetime @@ -147,23 +148,34 @@ and passes them to the finish method. Deadlocking and celery worker starvation are *much* less likely now. Thank you Ori :) """ - self.set_status(celery.states.STARTED, task_id=current_task.request.id) - results = [] - - if self.children: - try: - child_results = [child.run() for child in self.children] - results = self.finish(child_results) - except SoftTimeLimitExceeded: - self.set_status(celery.states.FAILURE) - task_logger.error('timeout exceeded for {0}'.format( - current_task.request.id - )) - raise - - self.set_status(celery.states.SUCCESS) - self.post_process(results) - return results + try: + self.set_status(celery.states.STARTED, task_id=current_task.request.id) + results = [] + + if self.children: + try: + child_results = [child.run() for child in self.children] + results = self.finish(child_results) + except SoftTimeLimitExceeded: + self.set_status(celery.states.FAILURE) + task_logger.error('timeout exceeded for {0}'.format( + current_task.request.id + )) + return {'result': 'FAILURE'} + + self.set_status(celery.states.SUCCESS) + self.post_process(results) + return results + + # IMPORTANT: reports must not be allowed to raise. + # If they do, and they are run in a chain, the entire chain will stop + except Exception: + self.set_status(celery.states.FAILURE) + task_logger.error('unexpected failure {} for {}'.format( + traceback.format_exc(), + current_task.request.id + )) + return {'result': 'FAILURE'} def finish(self, child_results): """ -- To view, visit https://gerrit.wikimedia.org/r/150475 To unsubscribe, visit https://gerrit.wikimedia.org/r/settings Gerrit-MessageType: newchange Gerrit-Change-Id: Ie4432d72a600450203395052e2bdfab348285882 Gerrit-PatchSet: 1 Gerrit-Project: analytics/wikimetrics Gerrit-Branch: master Gerrit-Owner: Milimetric <dandree...@wikimedia.org> _______________________________________________ MediaWiki-commits mailing list MediaWiki-commits@lists.wikimedia.org https://lists.wikimedia.org/mailman/listinfo/mediawiki-commits