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

Reply via email to