@ -567,6 +567,7 @@ class Scheduler(threading.Thread):
continue
self . log . debug ( " Re-enqueueing changes for pipeline %s " % name )
items_to_remove = [ ]
builds_to_remove = [ ]
for shared_queue in old_pipeline . queues :
for item in shared_queue . queue :
item . item_ahead = None
@ -582,32 +583,25 @@ class Scheduler(threading.Thread):
continue
item . change . project = project
for build in item . current_build_set . getBuilds ( ) :
build . job = layout . jobs . get ( build . job . name ,
build . job )
job = layout . jobs . get ( build . job . name )
if job :
build . job = job
else :
builds_to_remove . append ( build )
if not new_pipeline . manager . reEnqueueItem ( item ) :
items_to_remove . append ( item )
builds_to_remove = [ ]
for build , item in old_pipeline . manager . building_jobs . items ( ) :
if item in items_to_remove :
for item in items_to_remove :
for build in item . current_build_set . getBuilds ( ) :
builds_to_remove . append ( build )
self . log . warning (
" Deleting running build %s for change %s whose "
" item was not re-enqueued " % ( build , item . change ) )
if build . job not in new_pipeline . getJobs ( item . change ) :
builds_to_remove . append ( build )
self . log . warning (
" Deleting running build %s for change %s because "
" the job is not defined " % ( build , item . change ) )
for build in builds_to_remove :
self . log . warning (
" Canceling build %s during reconfiguration " % ( build , ) )
try :
self . launcher . cancel ( build )
except Exception :
self . log . exception (
" Exception while canceling build %s "
" for change %s " % ( build , item . change ) )
del old_pipeline . manager . building_jobs [ build ]
new_pipeline . manager . building_jobs = \
old_pipeline . manager . building_jobs
self . layout = layout
for trigger in self . triggers . values ( ) :
trigger . postConfig ( )
@ -668,9 +662,12 @@ class Scheduler(threading.Thread):
if self . merger . areMergesOutstanding ( ) :
waiting = True
for pipeline in self . layout . pipelines . values ( ) :
for build in pipeline . manager . building_jobs . keys ( ) :
self . log . debug ( " %s waiting on %s " % ( pipeline . manager , build ) )
waiting = True
for item in pipeline . getAllItems ( ) :
for build in item . current_build_set . getBuilds ( ) :
if build . result is None :
self . log . debug ( " %s waiting on %s " %
( pipeline . manager , build ) )
waiting = True
if not waiting :
self . log . debug ( " All builds are complete " )
return True
@ -888,7 +885,6 @@ class BasePipelineManager(object):
def __init__ ( self , sched , pipeline ) :
self . sched = sched
self . pipeline = pipeline
self . building_jobs = { }
self . event_filters = [ ]
if self . sched . config and self . sched . config . has_option (
' zuul ' , ' report_times ' ) :
@ -1157,7 +1153,6 @@ class BasePipelineManager(object):
build = self . sched . launcher . launch ( job , item ,
self . pipeline ,
dependent_items )
self . building_jobs [ build ] = item
self . log . debug ( " Adding build %s of job %s to item %s " %
( build , job , item ) )
item . addBuild ( build )
@ -1173,24 +1168,17 @@ class BasePipelineManager(object):
def cancelJobs ( self , item , prime = True ) :
self . log . debug ( " Cancel jobs for change %s " % item . change )
canceled = False
to_remove = [ ]
old_build_set = item . current_build_set
if prime and item . current_build_set . ref :
item . resetAllBuilds ( )
for build , build_item in self . building_jobs . items ( ) :
if build_item == item :
self . log . debug ( " Found build %s for change %s to cancel " %
( build , item . change ) )
try :
self . sched . launcher . cancel ( build )
except :
self . log . exception ( " Exception while canceling build %s "
" for change %s " % ( build , item . change ) )
to_remove . append ( build )
canceled = True
for build in to_remove :
self . log . debug ( " Removing build %s from running builds " % build )
for build in old_build_set . getBuilds ( ) :
try :
self . sched . launcher . cancel ( build )
except :
self . log . exception ( " Exception while canceling build %s "
" for change %s " % ( build , item . change ) )
build . result = ' CANCELED '
del self . building_jobs [ build ]
canceled = True
for item_behind in item . items_behind :
self . log . debug ( " Canceling jobs for change %s , behind change %s " %
( item_behind . change , item . change ) )
@ -1306,31 +1294,17 @@ class BasePipelineManager(object):
self . sched . launcher . setBuildDescription ( build , desc )
def onBuildStarted ( self , build ) :
if build not in self . building_jobs :
# Or triggered externally, or triggered before zuul started,
# or restarted
return False
self . log . debug ( " Build %s started " % build )
self . updateBuildDescriptions ( build . build_set )
return True
def onBuildCompleted ( self , build ) :
if build not in self . building_jobs :
# Or triggered externally, or triggered before zuul started,
# or restarted
return False
self . log . debug ( " Build %s completed " % build )
change = self . building_jobs [ build ]
self . log . debug ( " Found change %s which triggered completed build %s " %
( change , build ) )
del self . building_jobs [ build ]
item = build . build_set . item
self . pipeline . setResult ( change , build )
self . log . debug ( " Change %s status is now: \n %s " %
( change , self . pipeline . formatStatus ( change ) ) )
self . pipeline . setResult ( item , build )
self . log . debug ( " Item %s status is now: \n %s " %
( item , self . pipeline . formatStatus ( item ) ) )
self . updateBuildDescriptions ( build . build_set )
return True