/* Ċ Ġ* ĠCopyright Ġ 2 0 1 7 ĠNet flix , ĠInc . Ċ Ġ* Ċ Ġ* ĠLicensed Ġunder Ġthe ĠApache ĠLicense , ĠVersion Ġ 2 . 0 Ġ( the Ġ" License ") Ċ Ġ* Ġyou Ġmay Ġnot Ġuse Ġthis Ġfile Ġexcept Ġin Ġcompliance Ġwith Ġthe ĠLicense . Ċ Ġ* ĠYou Ġmay Ġobtain Ġa Ġcopy Ġof Ġthe ĠLicense Ġat Ċ Ġ* Ċ Ġ* ĠĠ Ġhttp :// www . apache . org / licenses / LICENSE - 2 . 0 Ċ Ġ* Ċ Ġ* ĠUnless Ġrequired Ġby Ġapplicable Ġlaw Ġor Ġagreed Ġto Ġin Ġwriting , Ġsoftware Ċ Ġ* Ġdistributed Ġunder Ġthe ĠLicense Ġis Ġdistributed Ġon Ġan Ġ" AS ĠIS " ĠBASIS , Ċ Ġ* ĠWITHOUT ĠWARRANTIES ĠOR ĠCONDITIONS ĠOF ĠANY ĠKIND , Ġeither Ġexpress Ġor Ġimplied . Ċ Ġ* ĠSee Ġthe ĠLicense Ġfor Ġthe Ġspecific Ġlanguage Ġgoverning Ġpermissions Ġand Ċ Ġ* Ġlimitations Ġunder Ġthe ĠLicense . Ċ Ġ*/ Ċ Ċ package Ġcom . netflix . spin n aker . or ca . q . handler Ċ Ċ import Ġcom . netflix . spin n aker . or ca . Execution Status . RUNNING Ċ import Ġcom . netflix . spin n aker . or ca . exceptions . ExceptionHandler Ċ import Ġcom . netflix . spin n aker . or ca . ext . parent Ċ import Ġcom . netflix . spin n aker . or ca . pipeline . model . Execution Ċ import Ġcom . netflix . spin n aker . or ca . pipeline . model . Stage Ċ import Ġcom . netflix . spin n aker . or ca . pipeline . model . Task Ċ import Ġcom . netflix . spin n aker . or ca . pipeline . persistence . Execution NotFoundException Ċ import Ġcom . netflix . spin n aker . or ca . pipeline . persistence . Execution Repository Ċ import Ġcom . netflix . spin n aker . or ca . pipeline . persistence . Execution Repository . Execution Criteria Ċ import Ġcom . netflix . spin n aker . or ca . q .* Ċ import Ġcom . netflix . spin n aker . q . Message Ċ import Ġcom . netflix . spin n aker . q . MessageHandler Ċ Ċ internal Ġinterface ĠO rc a MessageHandler < M Ġ: ĠMessage > Ġ: ĠMessage Handler < M > Ġ{ ĊĠ Ġval Ġrepository : ĠExecution Repository ĊĊĠ Ġfun ĠCollection < ExceptionHandler >. should Retry ( ex : ĠException , Ġtask Name : ĠString ?): ĠException Handler . Response ? Ġ{ ĊĠĠĠ Ġval Ġexception Handler Ġ= Ġfind Ġ{ Ġit . handles ( ex ) Ġ} ĊĠĠĠ Ġreturn Ġexception Handler ?. handle ( task Name Ġ?: Ġ" un specified ", Ġex ) ĊĠ Ġ} ĊĊĠ Ġfun ĠTask Level . with Task ( block : Ġ( Stage , ĠTask ) Ġ-> ĠUnit ) Ġ= ĊĠĠĠ Ġwith Stage Ġ{ Ġstage Ġ-> ĊĠĠĠĠĠ Ġstage ĊĠĠĠĠĠĠĠ Ġ. task ById ( taskId ) ĊĠĠĠĠĠĠĠ Ġ. let Ġ{ Ġtask Ġ-> ĊĠĠĠĠĠĠĠĠĠ Ġif Ġ( task Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġqueue . push ( Invalid TaskId ( this )) ĊĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġblock . invoke ( stage , Ġtask ) ĊĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠ Ġfun ĠStage Level . with Stage ( block : Ġ( Stage ) Ġ-> ĠUnit ) Ġ= ĊĠĠĠ Ġwith Execution Ġ{ Ġexecution Ġ-> ĊĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠ Ġexecution ĊĠĠĠĠĠĠĠĠĠ Ġ. stage ById ( stage Id ) ĊĠĠĠĠĠĠĠĠĠ Ġ. let ( block ) ĊĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠIllegalArgumentException ) Ġ{ ĊĠĠĠĠĠĠĠ Ġqueue . push ( Invalid Stage Id ( this )) ĊĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠ Ġfun ĠExecution Level . with Execution ( block : Ġ( Execution ) Ġ-> ĠUnit ) Ġ= ĊĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠ Ġval Ġexecution Ġ= Ġrepository . retrieve ( execution Type , Ġexecution Id ) ĊĠĠĠĠĠ Ġblock . invoke ( execution ) ĊĠĠĠ Ġ} Ġcatch Ġ( e : ĠExecution NotFoundException ) Ġ{ ĊĠĠĠĠĠ Ġqueue . push ( Invalid Execution Id ( this )) ĊĠĠĠ Ġ} ĊĊĠ Ġfun ĠStage . start Next () Ġ{ ĊĠĠĠ Ġexecution . let Ġ{ Ġexecution Ġ-> ĊĠĠĠĠĠ Ġval Ġdownstream Stages Ġ= Ġdownstream Stages () ĊĠĠĠĠĠ Ġval Ġphase Ġ= Ġsynthetic Stage Owner ĊĠĠĠĠĠ Ġif Ġ( down stream Stages . isNotEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠ Ġdownstream Stages . forEach Ġ{ ĊĠĠĠĠĠĠĠĠĠ Ġqueue . push ( Start Stage ( it )) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠ Ġ} Ġelse Ġif Ġ( phase Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠ Ġqueue . push ( Continue Parent Stage ( parent (), Ġphase )) ĊĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠ Ġqueue . push ( Complete Execution ( execution )) ĊĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĠ Ġ} ĊĊĠ Ġfun ĠExecution . should Queue (): ĠBoolean Ġ{ ĊĠĠĠ Ġval Ġconfig Id Ġ= Ġpipeline Config Id ĊĠĠĠ Ġreturn Ġwhen Ġ{ ĊĠĠĠĠĠ Ġ! is Limit Concurrent Ġ-> Ġfalse ĊĠĠĠĠĠ Ġconfig Id Ġ== Ġnull ĠĠ Ġ-> Ġfalse ĊĠĠĠĠĠ Ġelse ĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ-> Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġcriteria Ġ= ĠExecution Criteria (). set Limit ( 2 ). set Statuses ( RUNNING ) ĊĠĠĠĠĠĠĠ Ġrepository ĊĠĠĠĠĠĠĠĠĠ Ġ. retrieve P ipelines For Pipeline Config Id ( config Id , Ġcriteria ) ĊĠĠĠĠĠĠĠĠĠ Ġ. filter Ġ{ Ġit . id Ġ!= Ġid Ġ} ĊĠĠĠĠĠĠĠĠĠ Ġ. count () ĊĠĠĠĠĠĠĠĠĠ Ġ. to Blocking () ĊĠĠĠĠĠĠĠĠĠ Ġ. first () Ġ> Ġ 0 ĊĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĠ Ġ} Ċ } Ċ