本文整理汇总了Python中buildbot.process.buildrequestdistributor.BuildRequestDistributor.disownServiceParent方法的典型用法代码示例。如果您正苦于以下问题:Python BuildRequestDistributor.disownServiceParent方法的具体用法?Python BuildRequestDistributor.disownServiceParent怎么用?Python BuildRequestDistributor.disownServiceParent使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类buildbot.process.buildrequestdistributor.BuildRequestDistributor
的用法示例。
在下文中一共展示了BuildRequestDistributor.disownServiceParent方法的1个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的Python代码示例。
示例1: BotMaster
# 需要导入模块: from buildbot.process.buildrequestdistributor import BuildRequestDistributor [as 别名]
# 或者: from buildbot.process.buildrequestdistributor.BuildRequestDistributor import disownServiceParent [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)
@defer.inlineCallbacks
def cleanShutdown(self, quickMode=False, stopReactor=True, _reactor=reactor):
"""Shut down the entire process, once all currently-running builds are
complete.
quickMode will mark all builds as retry (except the ones that were triggered)
"""
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
yield self.brd.disownServiceParent()
# Double check that we're still supposed to be shutting down
# The shutdown may have been cancelled!
while self.shuttingDown:
if quickMode:
for builder in self.builders.values():
# As we stop the builds, builder.building might change during loop
# so we need to copy the list
for build in list(builder.building):
# if build is waited for then this is a sub-build, so
# no need to retry it
if sum(br.waitedFor for br in build.requests):
results = CANCELLED
else:
results = RETRY
is_building = build.workerforbuilder.state == States.BUILDING
build.stopBuild("Master Shutdown", results)
if not is_building:
# if it is not building, then it must be a latent worker
# which is substantiating. Cancel it.
build.workerforbuilder.worker.insubstantiate()
# then wait for all builds to finish
l = []
for builder in self.builders.values():
for build in builder.building:
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))
yield defer.DeferredList(l)
# Check that there really aren't any running builds
n = 0
for builder in self.builders.values():
if builder.building:
num_builds = len(builder.building)
log.msg("Builder %s has %i builds running" %
(builder, num_builds))
n += num_builds
if n > 0:
log.msg(
"Not shutting down, there are %i builds running" % n)
log.msg("Trying shutdown sequence again")
yield util.asyncSleep(1)
else:
if stopReactor and self.shuttingDown:
log.msg("Stopping reactor")
_reactor.stop()
break
if not self.shuttingDown:
yield self.brd.setServiceParent(self)
def cancelCleanShutdown(self):
"""Cancel a clean shutdown that is already in progress, if any"""
#.........这里部分代码省略.........