diff --git a/master/buildbot/db/masters.py b/master/buildbot/db/masters.py index ed1ec706136..063570cea5f 100644 --- a/master/buildbot/db/masters.py +++ b/master/buildbot/db/masters.py @@ -91,6 +91,13 @@ def thd(conn): for row in conn.execute(tbl.select()).fetchall()] return self.db.pool.do(thd) + def setAllMastersActiveLongTimeAgo(self, _reactor=reactor): + def thd(conn): + tbl = self.db.model.masters + q = tbl.update().values(active=1, last_active=0) + conn.execute(q) + return self.db.pool.do(thd) + def _masterdictFromRow(self, row): return MasterDict(id=row.id, name=row.name, active=bool(row.active), diff --git a/master/buildbot/scripts/upgrade_master.py b/master/buildbot/scripts/upgrade_master.py index 53995306c81..ff408834f48 100644 --- a/master/buildbot/scripts/upgrade_master.py +++ b/master/buildbot/scripts/upgrade_master.py @@ -157,6 +157,7 @@ def upgradeDatabase(config, master_cfg): yield db.setup(check_version=False, verbose=not config['quiet']) yield db.model.upgrade() + yield db.masters.setAllMastersActiveLongTimeAgo() @in_reactor diff --git a/master/buildbot/test/unit/test_scripts_upgrade_master.py b/master/buildbot/test/unit/test_scripts_upgrade_master.py index 89ad5eb3c74..b904a0adefb 100644 --- a/master/buildbot/test/unit/test_scripts_upgrade_master.py +++ b/master/buildbot/test/unit/test_scripts_upgrade_master.py @@ -20,6 +20,7 @@ from buildbot import config as config_module from buildbot.db import connector +from buildbot.db import masters from buildbot.db import model from buildbot.scripts import upgrade_master from buildbot.test.util import compat @@ -274,6 +275,9 @@ def test_upgradeDatabase(self): self.patch(connector.DBConnector, 'setup', setup) upgrade = mock.Mock(side_effect=lambda **kwargs: defer.succeed(None)) self.patch(model.Model, 'upgrade', upgrade) + setAllMastersActiveLongTimeAgo = mock.Mock(side_effect=lambda **kwargs: defer.succeed(None)) + self.patch(masters.MastersConnectorComponent, + 'setAllMastersActiveLongTimeAgo', setAllMastersActiveLongTimeAgo) yield upgrade_master.upgradeDatabase( mkconfig(basedir='test', quiet=True), config_module.MasterConfig()) diff --git a/master/docs/developer/database.rst b/master/docs/developer/database.rst index 1baf70b47c9..7a7c0003396 100644 --- a/master/docs/developer/database.rst +++ b/master/docs/developer/database.rst @@ -1413,6 +1413,12 @@ masters Get a list of the masters, represented as dictionaries; masters are sorted and paged using generic data query options + .. py:method:: setAllMastersActiveLongTimeAgo() + + :returns: None via Deferred + + This method is intended to be call by upgrade-master, and will effectively force housekeeping on all masters at next startup. + This method is not intended to be called outside of housekeeping scripts. builders ~~~~~~~~