Don't report changes that have already been reported.
If A is a dependent change of B, and A and B finish test around
the same time, the following may happen:
Complete event for A is received.
A is marked as complete.
Complete event for B is received.
B is marked as complete.
Begin processing complete event for A
A is reported.
Since A merged, and B is dependent on A, zuul checks to see if
B should be reported (it may have been waiting on A).
B is complete, so it is reported.
End of processing A's complete event
Begin processing B's complete event
B is reported (but fails to report correctly).
To avoid this, record that a change has been succesfully reported,
(regardless of the outcome of tests), and if requested to report
the change again, simply return True, indicating that it has been
succesfully reported.
Change-Id: I5edbf158e7ef749cf855cadbacdc44161c054c59
diff --git a/zuul/model.py b/zuul/model.py
index a0fc05a..c4efa39 100644
--- a/zuul/model.py
+++ b/zuul/model.py
@@ -301,6 +301,7 @@
self.oldrev = None
self.newrev = None
self.event = event
+ self.reported = False
if event.change_number:
self.branch = event.branch
diff --git a/zuul/scheduler.py b/zuul/scheduler.py
index 15e246d..f0262c8 100644
--- a/zuul/scheduler.py
+++ b/zuul/scheduler.py
@@ -482,6 +482,8 @@
def reportChange(self, change):
self.log.debug("Reporting change %s" % change)
+ if change.reported:
+ return True
ret = None
if change.didAllJobsSucceed():
action = self.success_action
@@ -497,6 +499,8 @@
if ret:
self.log.error("Reporting change %s received: %s" % (
change, ret))
+ else:
+ change.reported = True
except:
self.log.exception("Exception while reporting:")
change.setReportedResult('ERROR')