From c660f506eede74cdd3a53ab10b7ac82b8cc9b492 Mon Sep 17 00:00:00 2001 From: Pierre Tardy Date: Thu, 27 Aug 2020 21:46:28 +0200 Subject: [PATCH] Fix bad fieldMapping in change data endpoint This resulted in 100%CPU for large installs as the data filtered manually by python Correct the test so that the actual fieldMapping is tested --- master/buildbot/data/changes.py | 2 +- master/buildbot/newsfragments/datachanges.bugfix | 1 + master/buildbot/test/unit/test_db_changes.py | 3 ++- 3 files changed, 4 insertions(+), 2 deletions(-) create mode 100644 master/buildbot/newsfragments/datachanges.bugfix diff --git a/master/buildbot/data/changes.py b/master/buildbot/data/changes.py index e36f26a0a3b..cb42951ef76 100644 --- a/master/buildbot/data/changes.py +++ b/master/buildbot/data/changes.py @@ -41,7 +41,7 @@ def _fixChange(self, change): del change['sourcestampid'] return change fieldMapping = { - 'changeid': 'changes.id', + 'changeid': 'changes.changeid', } diff --git a/master/buildbot/newsfragments/datachanges.bugfix b/master/buildbot/newsfragments/datachanges.bugfix new file mode 100644 index 00000000000..ba5cdd004f2 --- /dev/null +++ b/master/buildbot/newsfragments/datachanges.bugfix @@ -0,0 +1 @@ +fix 100% CPU on large installs when looking using the changes api (:issue:`5504`) diff --git a/master/buildbot/test/unit/test_db_changes.py b/master/buildbot/test/unit/test_db_changes.py index 93a4f890763..54d95ae119c 100644 --- a/master/buildbot/test/unit/test_db_changes.py +++ b/master/buildbot/test/unit/test_db_changes.py @@ -19,6 +19,7 @@ from twisted.trial import unittest from buildbot.data import resultspec +from buildbot.data.changes import FixerMixin from buildbot.db import builds from buildbot.db import changes from buildbot.db import sourcestamps @@ -277,7 +278,7 @@ def insert7Changes(self): def test_getChanges_subset(self): yield self.insert7Changes() rs = resultspec.ResultSpec(order=['-changeid'], limit=5) - rs.fieldMapping = {'changeid': 'changes.changeid'} + rs.fieldMapping = FixerMixin.fieldMapping changes = yield self.db.changes.getChanges(resultSpec=rs) changeids = [c['changeid'] for c in changes] self.assertEqual(changeids, [10, 11, 12, 13, 14])