本文整理汇总了Python中buildbot.process.buildrequestdistributor.BuildRequestDistributor.startService方法的典型用法代码示例。如果您正苦于以下问题:Python BuildRequestDistributor.startService方法的具体用法?Python BuildRequestDistributor.startService怎么用?Python BuildRequestDistributor.startService使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类buildbot.process.buildrequestdistributor.BuildRequestDistributor
的用法示例。
在下文中一共展示了BuildRequestDistributor.startService方法的2个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的Python代码示例。
示例1: BotMaster
# 需要导入模块: from buildbot.process.buildrequestdistributor import BuildRequestDistributor [as 别名]
# 或者: from buildbot.process.buildrequestdistributor.BuildRequestDistributor import startService [as 别名]
class BotMaster(config.ReconfigurableServiceMixin, service.AsyncMultiService):
"""This is the master-side service which manages remote buildbot slaves.
It provides them with BuildSlaves, and distributes build requests to
them."""
debug = 0
def __init__(self, master):
service.AsyncMultiService.__init__(self)
self.setName("botmaster")
self.master = master
self.builders = {}
self.builderNames = []
# builders maps Builder names to instances of bb.p.builder.Builder,
# which is the master-side object that defines and controls a build.
# self.slaves contains a ready BuildSlave instance for each
# potential buildslave, i.e. all the ones listed in the config file.
# If the slave is connected, self.slaves[slavename].slave will
# contain a RemoteReference to their Bot instance. If it is not
# connected, that attribute will hold None.
self.slaves = {} # maps slavename to BuildSlave
self.watchers = {}
# self.locks holds the real Lock instances
self.locks = {}
# self.mergeRequests is the callable override for merging build
# requests
self.mergeRequests = None
self.shuttingDown = False
self.lastSlavePortnum = None
# subscription to new build requests
self.buildrequest_consumer = None
# a distributor for incoming build requests; see below
self.brd = BuildRequestDistributor(self)
self.brd.setServiceParent(self)
def cleanShutdown(self, _reactor=reactor):
"""Shut down the entire process, once all currently-running builds are
complete."""
if self.shuttingDown:
return
log.msg("Initiating clean shutdown")
self.shuttingDown = True
# first, stop the distributor; this will finish any ongoing scheduling
# operations before firing
d = self.brd.stopService()
# then wait for all builds to finish
def wait(_):
l = []
for builder in self.builders.values():
for build in builder.builder_status.getCurrentBuilds():
l.append(build.waitUntilFinished())
if len(l) == 0:
log.msg("No running jobs, starting shutdown immediately")
else:
log.msg("Waiting for %i build(s) to finish" % len(l))
return defer.DeferredList(l)
d.addCallback(wait)
# Finally, shut the whole process down
def shutdown(ign):
# Double check that we're still supposed to be shutting down
# The shutdown may have been cancelled!
if self.shuttingDown:
# Check that there really aren't any running builds
for builder in self.builders.values():
n = len(builder.builder_status.getCurrentBuilds())
if n > 0:
log.msg("Not shutting down, builder %s has %i builds running" % (builder, n))
log.msg("Trying shutdown sequence again")
self.shuttingDown = False
self.cleanShutdown()
return
log.msg("Stopping reactor")
_reactor.stop()
else:
self.brd.startService()
d.addCallback(shutdown)
d.addErrback(log.err, 'while processing cleanShutdown')
def cancelCleanShutdown(self):
"""Cancel a clean shutdown that is already in progress, if any"""
if not self.shuttingDown:
return
log.msg("Cancelling clean shutdown")
self.shuttingDown = False
@metrics.countMethod('BotMaster.slaveLost()')
def slaveLost(self, bot):
metrics.MetricCountEvent.log("BotMaster.attached_slaves", -1)
#.........这里部分代码省略.........
示例2: BotMaster
# 需要导入模块: from buildbot.process.buildrequestdistributor import BuildRequestDistributor [as 别名]
# 或者: from buildbot.process.buildrequestdistributor.BuildRequestDistributor import startService [as 别名]
class BotMaster(service.ReconfigurableServiceMixin, service.AsyncMultiService):
"""This is the master-side service which manages remote buildbot workers.
It provides them with Workers, and distributes build requests to
them."""
debug = 0
name = "botmaster"
def __init__(self):
service.AsyncMultiService.__init__(self)
self.builders = {}
self.builderNames = []
# builders maps Builder names to instances of bb.p.builder.Builder,
# which is the master-side object that defines and controls a build.
self.watchers = {}
# self.locks holds the real Lock instances
self.locks = {}
self.shuttingDown = False
# subscription to new build requests
self.buildrequest_consumer = None
# a distributor for incoming build requests; see below
self.brd = BuildRequestDistributor(self)
self.brd.setServiceParent(self)
def cleanShutdown(self, _reactor=reactor):
"""Shut down the entire process, once all currently-running builds are
complete."""
if self.shuttingDown:
return
log.msg("Initiating clean shutdown")
self.shuttingDown = True
# first, stop the distributor; this will finish any ongoing scheduling
# operations before firing
d = self.brd.stopService()
# then wait for all builds to finish
@d.addCallback
def wait(_):
l = []
for builder in self.builders.values():
for build in builder.builder_status.getCurrentBuilds():
l.append(build.waitUntilFinished())
if len(l) == 0:
log.msg("No running jobs, starting shutdown immediately")
else:
log.msg("Waiting for %i build(s) to finish" % len(l))
return defer.DeferredList(l)
# Finally, shut the whole process down
@d.addCallback
def shutdown(ign):
# Double check that we're still supposed to be shutting down
# The shutdown may have been cancelled!
if self.shuttingDown:
# Check that there really aren't any running builds
for builder in self.builders.values():
n = len(builder.builder_status.getCurrentBuilds())
if n > 0:
log.msg(
"Not shutting down, builder %s has %i builds running" % (builder, n))
log.msg("Trying shutdown sequence again")
self.shuttingDown = False
self.cleanShutdown()
return
log.msg("Stopping reactor")
_reactor.stop()
else:
self.brd.startService()
d.addErrback(log.err, 'while processing cleanShutdown')
def cancelCleanShutdown(self):
"""Cancel a clean shutdown that is already in progress, if any"""
if not self.shuttingDown:
return
log.msg("Cancelling clean shutdown")
self.shuttingDown = False
@metrics.countMethod('BotMaster.workerLost()')
def workerLost(self, bot):
metrics.MetricCountEvent.log("BotMaster.attached_workers", -1)
for name, b in iteritems(self.builders):
if bot.workername in b.config.workernames:
b.detached(bot)
@metrics.countMethod('BotMaster.getBuildersForWorker()')
def getBuildersForWorker(self, workername):
return [b for b in itervalues(self.builders)
if workername in b.config.workernames]
def getBuildernames(self):
return self.builderNames
#.........这里部分代码省略.........