diff --git a/tests/base.py b/tests/base.py
index 1b82944..5f15297 100755
--- a/tests/base.py
+++ b/tests/base.py
@@ -369,6 +369,7 @@
         self.fixture_dir = os.path.join(FIXTURE_DIR, 'gerrit')
         self.change_number = 0
         self.changes = {}
+        self.queries = []
 
     def addFakeChange(self, project, branch, subject, status='NEW'):
         self.change_number += 1
@@ -405,7 +406,10 @@
     def simpleQuery(self, query):
         # This is currently only used to return all open changes for a
         # project
-        return [change.query() for change in self.changes.values()]
+        self.queries.append(query)
+        l = [change.query() for change in self.changes.values()]
+        l.append({"type":"stats","rowCount":1,"runTimeMilliseconds":3})
+        return l
 
     def startWatching(self, *args, **kw):
         pass
diff --git a/tests/test_zuultrigger.py b/tests/test_zuultrigger.py
index eb8fdc5..9e9bc61 100644
--- a/tests/test_zuultrigger.py
+++ b/tests/test_zuultrigger.py
@@ -102,3 +102,4 @@
             "Merge Failed.\n\nThis change was unable to be automatically "
             "merged with the current state of the repository. Please rebase "
             "your change and upload a new patchset.")
+        self.assertEqual(self.fake_gerrit.queries[0], "project:org/project status:open")
diff --git a/zuul/trigger/gerrit.py b/zuul/trigger/gerrit.py
index 6a2c362..d05fc69 100644
--- a/zuul/trigger/gerrit.py
+++ b/zuul/trigger/gerrit.py
@@ -324,11 +324,18 @@
         return change
 
     def getProjectOpenChanges(self, project):
-        data = self.gerrit.simpleQuery("project:%s status:open" % project.name)
+        # This is a best-effort function in case Gerrit is unable to return
+        # a particular change.  It happens.
+        query = "project:%s status:open" % (project.name,)
+        self.log.debug("Running query %s to get project open changes" % (query,))
+        data = self.gerrit.simpleQuery(query)
         changes = []
-        for record in data:
-            changes.append(self._getChange(record['number'],
-                                           record['currentPatchSet']['number']))
+        for record in data[:-1]:
+            try:
+                changes.append(self._getChange(record['number'],
+                                               record['currentPatchSet']['number']))
+            except Exception:
+                self.log.exception("Unable to query change %s" % (record.get('number'),))
         return changes
 
     def updateChange(self, change):
diff --git a/zuul/trigger/zuultrigger.py b/zuul/trigger/zuultrigger.py
index 436311b..27098ab 100644
--- a/zuul/trigger/zuultrigger.py
+++ b/zuul/trigger/zuultrigger.py
@@ -47,7 +47,8 @@
             try:
                 self._createProjectChangeMergedEvents(change)
             except Exception:
-                self.log.exception("Unable to create project-change-merged events for %s" % (change,))
+                self.log.exception("Unable to create project-change-merged events for %s" %
+                                   (change,))
 
     def onChangeEnqueued(self, change, pipeline):
         # Called each time a change is enqueued in a pipeline
@@ -55,12 +56,13 @@
             try:
                 self._createParentChangeEnqueuedEvents(change, pipeline)
             except Exception:
-                self.log.exception("Unable to create parent-change-enqueued events for %s in %s" % (change, pipeline))
+                self.log.exception("Unable to create parent-change-enqueued events for %s in %s" %
+                                   (change, pipeline))
 
     def _createProjectChangeMergedEvents(self, change):
         changes = self.sched.triggers['gerrit'].getProjectOpenChanges(change.project)
-        for change in changes:
-            self._createProjectChangeMergedEvent(change)
+        for open_change in changes:
+            self._createProjectChangeMergedEvent(open_change)
 
     def _createProjectChangeMergedEvent(self, change):
         event = TriggerEvent()
