We are currently solving the following issue within our repository. Here is the issue text:
--- BEGIN ISSUE ---
Workers configured_on gets corrupted for multi-master
https://github.com/buildbot/buildbot/issues/3981 fixed the issue of Workers configured_on getting corrupted. It works for single master scenario. However, for multi-master scenario, this bug is still present.

I have two masters (running 1.1.1):
1: handling the web-server
2: handling workers communication, builds and everything else

If I restart 1 and then 2, then it's fine. However, if I restart 2 and then 1, then the workers configured_on is corrupted. The issue reproduce immediately on restarting 1.

If I restart only 2, then the issue doesn't happen. However, restarting 1 consistently reproduces the issue.

I suspect that the HouseKeeping which is done while starting the masters might be causing the issue.

https://github.com/buildbot/buildbot/blob/master/master/buildbot/master.py#L300


--- END ISSUE ---

Below are some code segments, each from a relevant file. One or more of these files may contain bugs.
--- BEGIN FILES ---
Path: `master/buildbot/data/masters.py`
Content:
```
1 # This file is part of Buildbot.  Buildbot is free software: you can
2 # redistribute it and/or modify it under the terms of the GNU General Public
3 # License as published by the Free Software Foundation, version 2.
4 #
5 # This program is distributed in the hope that it will be useful, but WITHOUT
6 # ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
7 # FOR A PARTICULAR PURPOSE.  See the GNU General Public License for more
8 # details.
9 #
10 # You should have received a copy of the GNU General Public License along with
11 # this program; if not, write to the Free Software Foundation, Inc., 51
12 # Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
13 #
14 # Copyright Buildbot Team Members
15 
16 from __future__ import absolute_import
17 from __future__ import print_function
18 
19 from twisted.internet import defer
20 from twisted.internet import reactor
21 from twisted.python import log
22 
23 from buildbot.data import base
24 from buildbot.data import resultspec
25 from buildbot.data import types
26 from buildbot.process.results import RETRY
27 from buildbot.util import epoch2datetime
28 
29 # time, in minutes, after which a master that hasn't checked in will be
30 # marked as inactive
31 EXPIRE_MINUTES = 10
32 
33 
34 def _db2data(master):
35     return dict(masterid=master['id'],
36                 name=master['name'],
37                 active=master['active'],
38                 last_active=master['last_active'])
39 
40 
41 class MasterEndpoint(base.Endpoint):
42 
43     isCollection = False
44     pathPatterns = """
45         /masters/n:masterid
46         /builders/n:builderid/masters/n:masterid
47     """
48 
49     @defer.inlineCallbacks
50     def get(self, resultSpec, kwargs):
51         # if a builder is given, only return the master if it's associated with
52         # this builder
53         if 'builderid' in kwargs:
54             builder = yield self.master.db.builders.getBuilder(
55                 builderid=kwargs['builderid'])
56             if not builder or kwargs['masterid'] not in builder['masterids']:
57                 defer.returnValue(None)
58                 return
59         m = yield self.master.db.masters.getMaster(kwargs['masterid'])
60         defer.returnValue(_db2data(m) if m else None)
61 
62 
63 class MastersEndpoint(base.Endpoint):
64 
65     isCollection = True
66     pathPatterns = """
67         /masters
68         /builders/n:builderid/masters
69     """
70     rootLinkName = 'masters'
71 
72     @defer.inlineCallbacks
73     def get(self, resultSpec, kwargs):
74         masterlist = yield self.master.db.masters.getMasters()
75         if 'builderid' in kwargs:
76             builder = yield self.master.db.builders.getBuilder(
77                 builderid=kwargs['builderid'])
78             if builder:
79                 masterids = set(builder['masterids'])
80                 masterlist = [m for m in masterlist if m['id'] in masterids]
81             else:
82                 masterlist = []
83         defer.returnValue([_db2data(m) for m in masterlist])
84 
85 
86 class Master(base.ResourceType):
87 
88     name = "master"
89     plural = "masters"
90     endpoints = [MasterEndpoint, MastersEndpoint]
91     eventPathPatterns = """
92         /masters/:masterid
93     """
94 
95     class EntityType(types.Entity):
96         masterid = types.Integer()
97         name = types.String()
98         active = types.Boolean()
99         last_active = types.DateTime()
100     entityType = EntityType(name)
101 
102     @base.updateMethod
103     @defer.inlineCallbacks
104     def masterActive(self, name, masterid, _reactor=reactor):
105         activated = yield self.master.db.masters.setMasterState(
106             masterid=masterid, active=True, _reactor=_reactor)
107         if activated:
108             self.produceEvent(
109                 dict(masterid=masterid, name=name, active=True),
110                 'started')
111 
112     @base.updateMethod
113     @defer.inlineCallbacks
114     def expireMasters(self, forceHouseKeeping=False, _reactor=reactor):
115         too_old = epoch2datetime(_reactor.seconds() - 60 * EXPIRE_MINUTES)
116         masters = yield self.master.db.masters.getMasters()
117         for m in masters:
118             if not forceHouseKeeping and m['last_active'] is not None and m['last_active'] >= too_old:
119                 continue
120 
121             # mark the master inactive, and send a message on its behalf
122             deactivated = yield self.master.db.masters.setMasterState(
123                 masterid=m['id'], active=False, _reactor=_reactor)
124             if deactivated:
125                 yield self._masterDeactivated(m['id'], m['name'])
126             elif forceHouseKeeping:
127                 yield self._masterDeactivatedHousekeeping(m['id'], m['name'])
128 
129     @base.updateMethod
130     @defer.inlineCallbacks
131     def masterStopped(self, name, masterid):
132         deactivated = yield self.master.db.masters.setMasterState(
133             masterid=masterid, active=False)
134         if deactivated:
135             yield self._masterDeactivated(masterid, name)
136 
137     @defer.inlineCallbacks
138     def _masterDeactivatedHousekeeping(self, masterid, name):
139         log.msg("doing housekeeping for master %d %s" % (masterid, name))
140 
141         # common code for deactivating a master
142         yield self.master.data.rtypes.worker._masterDeactivated(
143             masterid=masterid)
144         yield self.master.data.rtypes.builder._masterDeactivated(
145             masterid=masterid)
146         yield self.master.data.rtypes.scheduler._masterDeactivated(
147             masterid=masterid)
148         yield self.master.data.rtypes.changesource._masterDeactivated(
149             masterid=masterid)
150 
151         # for each build running on that instance..
152         builds = yield self.master.data.get(('builds',),
153                                             filters=[resultspec.Filter('masterid', 'eq', [masterid]),
154                                                      resultspec.Filter('complete', 'eq', [False])])
155         for build in builds:
156             # stop any running steps..
157             steps = yield self.master.data.get(
158                 ('builds', build['buildid'], 'steps'),
159                 filters=[resultspec.Filter('results', 'eq', [None])])
160             for step in steps:
161                 # finish remaining logs for those steps..
162                 logs = yield self.master.data.get(
163                     ('steps', step['stepid'], 'logs'),
164                     filters=[resultspec.Filter('complete', 'eq',
165                                                [False])])
166                 for _log in logs:
167                     yield self.master.data.updates.finishLog(
168                         logid=_log['logid'])
169                 yield self.master.data.updates.finishStep(
170                     stepid=step['stepid'], results=RETRY, hidden=False)
171             # then stop the build itself
172             yield self.master.data.updates.finishBuild(
173                 buildid=build['buildid'], results=RETRY)
174 
175         # unclaim all of the build requests owned by the deactivated instance
176         buildrequests = yield self.master.db.buildrequests.getBuildRequests(
177             complete=False, claimed=masterid)
178         yield self.master.db.buildrequests.unclaimBuildRequests(
179             brids=[br['buildrequestid'] for br in buildrequests])
180 
181     @defer.inlineCallbacks
182     def _masterDeactivated(self, masterid, name):
183         yield self._masterDeactivatedHousekeeping(masterid, name)
184 
185         self.produceEvent(
186             dict(masterid=masterid, name=name, active=False),
187             'stopped')
188
```
--- END FILES ---

Please first localize the bug based on the issue statement, and then generate a patch according to the `git diff` format fenced by three backticks.

Here is an example:

```diff
diff --git a/examples/server_async.py b/examples/server_async.py
--- a/examples/server_async.py
+++ b/examples/server_async.py
@@ -313,4 +313,4 @@
 
 
 if __name__ == "__main__":
-    asyncio.run(run_async_server("."), debug=True)
+    asyncio.run(run_async_server(), debug=True)
diff --git a/examples/server_sync.py b/examples/server_sync.py
--- a/examples/server_sync.py
+++ b/examples/server_sync.py
@@ -313,5 +313,5 @@
 
 
 if __name__ == "__main__":
-    server = run_sync_server(".")
+    server = run_sync_server()
     server.shutdown()

```

diff --git a/master/buildbot/data/masters.py b/master/buildbot/data/masters.py
--- a/master/buildbot/data/masters.py
+++ b/master/buildbot/data/masters.py
@@ -115,7 +115,7 @@
         too_old = epoch2datetime(_reactor.seconds() - 60 * EXPIRE_MINUTES)
         masters = yield self.master.db.masters.getMasters()
         for m in masters:
-            if not forceHouseKeeping and m['last_active'] is not None and m['last_active'] >= too_old:
+            if m['last_active'] is not None and m['last_active'] >= too_old:
                 continue
 
             # mark the master inactive, and send a message on its behalf

{"golden_diff": "diff --git a/master/buildbot/data/masters.py b/master/buildbot/data/masters.py\n--- a/master/buildbot/data/masters.py\n+++ b/master/buildbot/data/masters.py\n@@ -115,7 +115,7 @@\n         too_old = epoch2datetime(_reactor.seconds() - 60 * EXPIRE_MINUTES)\n         masters = yield self.master.db.masters.getMasters()\n         for m in masters:\n-            if not forceHouseKeeping and m['last_active'] is not None and m['last_active'] >= too_old:\n+            if m['last_active'] is not None and m['last_active'] >= too_old:\n                 continue\n \n             # mark the master inactive, and send a message on its behalf\n", "issue": "Workers configured_on gets corrupted for multi-master\nhttps://github.com/buildbot/buildbot/issues/3981 fixed the issue of Workers configured_on getting corrupted. It works for single master scenario. However, for multi-master scenario, this bug is still present.\r\n\r\nI have two masters (running 1.1.1):\r\n1: handling the web-server\r\n2: handling workers communication, builds and everything else\r\n\r\nIf I restart 1 and then 2, then it's fine. However, if I restart 2 and then 1, then the workers configured_on is corrupted. The issue reproduce immediately on restarting 1.\r\n\r\nIf I restart only 2, then the issue doesn't happen. However, restarting 1 consistently reproduces the issue.\r\n\r\nI suspect that the HouseKeeping which is done while starting the masters might be causing the issue.\r\n\r\nhttps://github.com/buildbot/buildbot/blob/master/master/buildbot/master.py#L300\r\n\n", "before_files": [{"content": "# This file is part of Buildbot.  Buildbot is free software: you can\n# redistribute it and/or modify it under the terms of the GNU General Public\n# License as published by the Free Software Foundation, version 2.\n#\n# This program is distributed in the hope that it will be useful, but WITHOUT\n# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS\n# FOR A PARTICULAR PURPOSE.  See the GNU General Public License for more\n# details.\n#\n# You should have received a copy of the GNU General Public License along with\n# this program; if not, write to the Free Software Foundation, Inc., 51\n# Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.\n#\n# Copyright Buildbot Team Members\n\nfrom __future__ import absolute_import\nfrom __future__ import print_function\n\nfrom twisted.internet import defer\nfrom twisted.internet import reactor\nfrom twisted.python import log\n\nfrom buildbot.data import base\nfrom buildbot.data import resultspec\nfrom buildbot.data import types\nfrom buildbot.process.results import RETRY\nfrom buildbot.util import epoch2datetime\n\n# time, in minutes, after which a master that hasn't checked in will be\n# marked as inactive\nEXPIRE_MINUTES = 10\n\n\ndef _db2data(master):\n    return dict(masterid=master['id'],\n                name=master['name'],\n                active=master['active'],\n                last_active=master['last_active'])\n\n\nclass MasterEndpoint(base.Endpoint):\n\n    isCollection = False\n    pathPatterns = \"\"\"\n        /masters/n:masterid\n        /builders/n:builderid/masters/n:masterid\n    \"\"\"\n\n    @defer.inlineCallbacks\n    def get(self, resultSpec, kwargs):\n        # if a builder is given, only return the master if it's associated with\n        # this builder\n        if 'builderid' in kwargs:\n            builder = yield self.master.db.builders.getBuilder(\n                builderid=kwargs['builderid'])\n            if not builder or kwargs['masterid'] not in builder['masterids']:\n                defer.returnValue(None)\n                return\n        m = yield self.master.db.masters.getMaster(kwargs['masterid'])\n        defer.returnValue(_db2data(m) if m else None)\n\n\nclass MastersEndpoint(base.Endpoint):\n\n    isCollection = True\n    pathPatterns = \"\"\"\n        /masters\n        /builders/n:builderid/masters\n    \"\"\"\n    rootLinkName = 'masters'\n\n    @defer.inlineCallbacks\n    def get(self, resultSpec, kwargs):\n        masterlist = yield self.master.db.masters.getMasters()\n        if 'builderid' in kwargs:\n            builder = yield self.master.db.builders.getBuilder(\n                builderid=kwargs['builderid'])\n            if builder:\n                masterids = set(builder['masterids'])\n                masterlist = [m for m in masterlist if m['id'] in masterids]\n            else:\n                masterlist = []\n        defer.returnValue([_db2data(m) for m in masterlist])\n\n\nclass Master(base.ResourceType):\n\n    name = \"master\"\n    plural = \"masters\"\n    endpoints = [MasterEndpoint, MastersEndpoint]\n    eventPathPatterns = \"\"\"\n        /masters/:masterid\n    \"\"\"\n\n    class EntityType(types.Entity):\n        masterid = types.Integer()\n        name = types.String()\n        active = types.Boolean()\n        last_active = types.DateTime()\n    entityType = EntityType(name)\n\n    @base.updateMethod\n    @defer.inlineCallbacks\n    def masterActive(self, name, masterid, _reactor=reactor):\n        activated = yield self.master.db.masters.setMasterState(\n            masterid=masterid, active=True, _reactor=_reactor)\n        if activated:\n            self.produceEvent(\n                dict(masterid=masterid, name=name, active=True),\n                'started')\n\n    @base.updateMethod\n    @defer.inlineCallbacks\n    def expireMasters(self, forceHouseKeeping=False, _reactor=reactor):\n        too_old = epoch2datetime(_reactor.seconds() - 60 * EXPIRE_MINUTES)\n        masters = yield self.master.db.masters.getMasters()\n        for m in masters:\n            if not forceHouseKeeping and m['last_active'] is not None and m['last_active'] >= too_old:\n                continue\n\n            # mark the master inactive, and send a message on its behalf\n            deactivated = yield self.master.db.masters.setMasterState(\n                masterid=m['id'], active=False, _reactor=_reactor)\n            if deactivated:\n                yield self._masterDeactivated(m['id'], m['name'])\n            elif forceHouseKeeping:\n                yield self._masterDeactivatedHousekeeping(m['id'], m['name'])\n\n    @base.updateMethod\n    @defer.inlineCallbacks\n    def masterStopped(self, name, masterid):\n        deactivated = yield self.master.db.masters.setMasterState(\n            masterid=masterid, active=False)\n        if deactivated:\n            yield self._masterDeactivated(masterid, name)\n\n    @defer.inlineCallbacks\n    def _masterDeactivatedHousekeeping(self, masterid, name):\n        log.msg(\"doing housekeeping for master %d %s\" % (masterid, name))\n\n        # common code for deactivating a master\n        yield self.master.data.rtypes.worker._masterDeactivated(\n            masterid=masterid)\n        yield self.master.data.rtypes.builder._masterDeactivated(\n            masterid=masterid)\n        yield self.master.data.rtypes.scheduler._masterDeactivated(\n            masterid=masterid)\n        yield self.master.data.rtypes.changesource._masterDeactivated(\n            masterid=masterid)\n\n        # for each build running on that instance..\n        builds = yield self.master.data.get(('builds',),\n                                            filters=[resultspec.Filter('masterid', 'eq', [masterid]),\n                                                     resultspec.Filter('complete', 'eq', [False])])\n        for build in builds:\n            # stop any running steps..\n            steps = yield self.master.data.get(\n                ('builds', build['buildid'], 'steps'),\n                filters=[resultspec.Filter('results', 'eq', [None])])\n            for step in steps:\n                # finish remaining logs for those steps..\n                logs = yield self.master.data.get(\n                    ('steps', step['stepid'], 'logs'),\n                    filters=[resultspec.Filter('complete', 'eq',\n                                               [False])])\n                for _log in logs:\n                    yield self.master.data.updates.finishLog(\n                        logid=_log['logid'])\n                yield self.master.data.updates.finishStep(\n                    stepid=step['stepid'], results=RETRY, hidden=False)\n            # then stop the build itself\n            yield self.master.data.updates.finishBuild(\n                buildid=build['buildid'], results=RETRY)\n\n        # unclaim all of the build requests owned by the deactivated instance\n        buildrequests = yield self.master.db.buildrequests.getBuildRequests(\n            complete=False, claimed=masterid)\n        yield self.master.db.buildrequests.unclaimBuildRequests(\n            brids=[br['buildrequestid'] for br in buildrequests])\n\n    @defer.inlineCallbacks\n    def _masterDeactivated(self, masterid, name):\n        yield self._masterDeactivatedHousekeeping(masterid, name)\n\n        self.produceEvent(\n            dict(masterid=masterid, name=name, active=False),\n            'stopped')\n", "path": "master/buildbot/data/masters.py"}], "after_files": [{"content": "# This file is part of Buildbot.  Buildbot is free software: you can\n# redistribute it and/or modify it under the terms of the GNU General Public\n# License as published by the Free Software Foundation, version 2.\n#\n# This program is distributed in the hope that it will be useful, but WITHOUT\n# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS\n# FOR A PARTICULAR PURPOSE.  See the GNU General Public License for more\n# details.\n#\n# You should have received a copy of the GNU General Public License along with\n# this program; if not, write to the Free Software Foundation, Inc., 51\n# Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.\n#\n# Copyright Buildbot Team Members\n\nfrom __future__ import absolute_import\nfrom __future__ import print_function\n\nfrom twisted.internet import defer\nfrom twisted.internet import reactor\nfrom twisted.python import log\n\nfrom buildbot.data import base\nfrom buildbot.data import resultspec\nfrom buildbot.data import types\nfrom buildbot.process.results import RETRY\nfrom buildbot.util import epoch2datetime\n\n# time, in minutes, after which a master that hasn't checked in will be\n# marked as inactive\nEXPIRE_MINUTES = 10\n\n\ndef _db2data(master):\n    return dict(masterid=master['id'],\n                name=master['name'],\n                active=master['active'],\n                last_active=master['last_active'])\n\n\nclass MasterEndpoint(base.Endpoint):\n\n    isCollection = False\n    pathPatterns = \"\"\"\n        /masters/n:masterid\n        /builders/n:builderid/masters/n:masterid\n    \"\"\"\n\n    @defer.inlineCallbacks\n    def get(self, resultSpec, kwargs):\n        # if a builder is given, only return the master if it's associated with\n        # this builder\n        if 'builderid' in kwargs:\n            builder = yield self.master.db.builders.getBuilder(\n                builderid=kwargs['builderid'])\n            if not builder or kwargs['masterid'] not in builder['masterids']:\n                defer.returnValue(None)\n                return\n        m = yield self.master.db.masters.getMaster(kwargs['masterid'])\n        defer.returnValue(_db2data(m) if m else None)\n\n\nclass MastersEndpoint(base.Endpoint):\n\n    isCollection = True\n    pathPatterns = \"\"\"\n        /masters\n        /builders/n:builderid/masters\n    \"\"\"\n    rootLinkName = 'masters'\n\n    @defer.inlineCallbacks\n    def get(self, resultSpec, kwargs):\n        masterlist = yield self.master.db.masters.getMasters()\n        if 'builderid' in kwargs:\n            builder = yield self.master.db.builders.getBuilder(\n                builderid=kwargs['builderid'])\n            if builder:\n                masterids = set(builder['masterids'])\n                masterlist = [m for m in masterlist if m['id'] in masterids]\n            else:\n                masterlist = []\n        defer.returnValue([_db2data(m) for m in masterlist])\n\n\nclass Master(base.ResourceType):\n\n    name = \"master\"\n    plural = \"masters\"\n    endpoints = [MasterEndpoint, MastersEndpoint]\n    eventPathPatterns = \"\"\"\n        /masters/:masterid\n    \"\"\"\n\n    class EntityType(types.Entity):\n        masterid = types.Integer()\n        name = types.String()\n        active = types.Boolean()\n        last_active = types.DateTime()\n    entityType = EntityType(name)\n\n    @base.updateMethod\n    @defer.inlineCallbacks\n    def masterActive(self, name, masterid, _reactor=reactor):\n        activated = yield self.master.db.masters.setMasterState(\n            masterid=masterid, active=True, _reactor=_reactor)\n        if activated:\n            self.produceEvent(\n                dict(masterid=masterid, name=name, active=True),\n                'started')\n\n    @base.updateMethod\n    @defer.inlineCallbacks\n    def expireMasters(self, forceHouseKeeping=False, _reactor=reactor):\n        too_old = epoch2datetime(_reactor.seconds() - 60 * EXPIRE_MINUTES)\n        masters = yield self.master.db.masters.getMasters()\n        for m in masters:\n            if m['last_active'] is not None and m['last_active'] >= too_old:\n                continue\n\n            # mark the master inactive, and send a message on its behalf\n            deactivated = yield self.master.db.masters.setMasterState(\n                masterid=m['id'], active=False, _reactor=_reactor)\n            if deactivated:\n                yield self._masterDeactivated(m['id'], m['name'])\n            elif forceHouseKeeping:\n                yield self._masterDeactivatedHousekeeping(m['id'], m['name'])\n\n    @base.updateMethod\n    @defer.inlineCallbacks\n    def masterStopped(self, name, masterid):\n        deactivated = yield self.master.db.masters.setMasterState(\n            masterid=masterid, active=False)\n        if deactivated:\n            yield self._masterDeactivated(masterid, name)\n\n    @defer.inlineCallbacks\n    def _masterDeactivatedHousekeeping(self, masterid, name):\n        log.msg(\"doing housekeeping for master %d %s\" % (masterid, name))\n\n        # common code for deactivating a master\n        yield self.master.data.rtypes.worker._masterDeactivated(\n            masterid=masterid)\n        yield self.master.data.rtypes.builder._masterDeactivated(\n            masterid=masterid)\n        yield self.master.data.rtypes.scheduler._masterDeactivated(\n            masterid=masterid)\n        yield self.master.data.rtypes.changesource._masterDeactivated(\n            masterid=masterid)\n\n        # for each build running on that instance..\n        builds = yield self.master.data.get(('builds',),\n                                            filters=[resultspec.Filter('masterid', 'eq', [masterid]),\n                                                     resultspec.Filter('complete', 'eq', [False])])\n        for build in builds:\n            # stop any running steps..\n            steps = yield self.master.data.get(\n                ('builds', build['buildid'], 'steps'),\n                filters=[resultspec.Filter('results', 'eq', [None])])\n            for step in steps:\n                # finish remaining logs for those steps..\n                logs = yield self.master.data.get(\n                    ('steps', step['stepid'], 'logs'),\n                    filters=[resultspec.Filter('complete', 'eq',\n                                               [False])])\n                for _log in logs:\n                    yield self.master.data.updates.finishLog(\n                        logid=_log['logid'])\n                yield self.master.data.updates.finishStep(\n                    stepid=step['stepid'], results=RETRY, hidden=False)\n            # then stop the build itself\n            yield self.master.data.updates.finishBuild(\n                buildid=build['buildid'], results=RETRY)\n\n        # unclaim all of the build requests owned by the deactivated instance\n        buildrequests = yield self.master.db.buildrequests.getBuildRequests(\n            complete=False, claimed=masterid)\n        yield self.master.db.buildrequests.unclaimBuildRequests(\n            brids=[br['buildrequestid'] for br in buildrequests])\n\n    @defer.inlineCallbacks\n    def _masterDeactivated(self, masterid, name):\n        yield self._masterDeactivatedHousekeeping(masterid, name)\n\n        self.produceEvent(\n            dict(masterid=masterid, name=name, active=False),\n            'stopped')\n", "path": "master/buildbot/data/masters.py"}]}