/* Ċ Ġ* ĠTencent Ġis Ġplease d Ġto Ġsupport Ġthe Ġopen Ġsource Ġcommunity Ġby Ġmaking ĠB K - CI Ġ èĵĿ é² ¸ æĮģ ç»Ń éĽĨ æĪĲ å¹³åı° Ġavailable . Ċ Ġ* Ċ Ġ* ĠCopyright Ġ( C ) Ġ 2 0 1 9 ĠTH L ĠA 2 9 ĠLimited , Ġa ĠTencent Ġcompany . Ġ ĠAll Ġrights Ġreserved . Ċ Ġ* Ċ Ġ* ĠB K - CI Ġ èĵĿ é² ¸ æĮģ ç»Ń éĽĨ æĪĲ å¹³åı° Ġis Ġlicensed Ġunder Ġthe ĠMIT Ġlicense . Ċ Ġ* Ċ Ġ* ĠA Ġcopy Ġof Ġthe ĠMIT ĠLicense Ġis Ġincluded Ġin Ġthis Ġfile . Ċ Ġ* Ċ Ġ* Ċ Ġ* ĠTerms Ġof Ġthe ĠMIT ĠLicense : Ċ Ġ* Ġ------------------------------------------------ --- Ċ Ġ* ĠPermission Ġis Ġhereby Ġgranted , Ġfree Ġof Ġcharge , Ġto Ġany Ġperson Ġobtaining Ġa Ġcopy Ġof Ġthis Ġsoftware Ġand Ġassociated Ċ Ġ* Ġdocumentation Ġfiles Ġ( the Ġ" Software "), Ġto Ġdeal Ġin Ġthe ĠSoftware Ġwithout Ġrestriction , Ġincluding Ġwithout Ġlimitation Ġthe Ċ Ġ* Ġrights Ġto Ġuse , Ġcopy , Ġmodify , Ġmerge , Ġpublish , Ġdistribute , Ġsublicense , Ġand / or Ġsell Ġcopies Ġof Ġthe ĠSoftware , Ġand Ġto Ċ Ġ* Ġpermit Ġpersons Ġto Ġwhom Ġthe ĠSoftware Ġis Ġfurnished Ġto Ġdo Ġso , Ġsubject Ġto Ġthe Ġfollowing Ġconditions : Ċ Ġ* Ċ Ġ* ĠThe Ġabove Ġcopyright Ġnotice Ġand Ġthis Ġpermission Ġnotice Ġshall Ġbe Ġincluded Ġin Ġall Ġcopies Ġor Ġsubstantial Ġportions Ġof Ċ Ġ* Ġthe ĠSoftware . Ċ Ġ* Ċ Ġ* ĠTHE ĠSOFTWARE ĠIS ĠPROVIDED Ġ" AS ĠIS ", ĠWITHOUT ĠWARRANTY ĠOF ĠANY ĠKIND , ĠEXPRESS ĠOR ĠIMPLIED , ĠINCLUDING ĠBUT ĠNOT Ċ Ġ* ĠLIMITED ĠTO ĠTHE ĠWARRANTIES ĠOF ĠMERCHANTABILITY , ĠFITNESS ĠFOR ĠA ĠPARTICULAR ĠPURPOSE ĠAND ĠNONINFRINGEMENT . ĠIN Ċ Ġ* ĠNO ĠEVENT ĠSHALL ĠTHE ĠAUTHORS ĠOR ĠCOPYRIGHT ĠHOLDERS ĠBE ĠLIABLE ĠFOR ĠANY ĠCLAIM , ĠDAMAGES ĠOR ĠOTHER ĠLIABILITY , Ċ Ġ* ĠWHETHER ĠIN ĠAN ĠACTION ĠOF ĠCONTRACT , ĠTORT ĠOR ĠOTHERWISE , ĠARISING ĠFROM , ĠOUT ĠOF ĠOR ĠIN ĠCONNECTION ĠWITH ĠTHE Ċ Ġ* ĠSOFTWARE ĠOR ĠTHE ĠUSE ĠOR ĠOTHER ĠDEALINGS ĠIN ĠTHE ĠSOFTWARE . Ċ Ġ*/ Ċ Ċ package Ġcom . tencent . devops . process . service Ċ Ċ import Ġcom . tencent . devops . common . api . util . Json Util Ċ import Ġcom . tencent . devops . common . pipeline . Model Ċ import Ġcom . tencent . devops . common . pipeline . container . Container Ċ import Ġcom . tencent . devops . common . pipeline . pojo . element . Element Ċ import Ġcom . tencent . devops . common . redis . Redis Operation Ċ import Ġcom . tencent . devops . process . engine . control . Control Utils Ċ import Ġcom . tencent . devops . process . engine . dao . Pipeline Pause Value Dao Ċ import Ġcom . tencent . devops . process . engine . pojo . Pipeline Pause Value Ċ import Ġcom . tencent . devops . process . engine . utils . Pause Redis Utils Ċ import Ġorg . jooq . DSL Context Ċ import Ġorg . slf 4 j . LoggerFactory Ċ import Ġorg . springframework . beans . factory . annotation . Autowired Ċ import Ġorg . springframework . stereotype . Service Ċ Ċ @ Service Ċ class ĠPipeline Task Pause Service Ġ@ Autowired Ġconstructor ( ĊĠĠĠ Ġprivate Ġval Ġpipeline Pause Value Dao : ĠPipeline Pause Value Dao , ĊĠĠĠ Ġprivate Ġval Ġd sl Context : ĠDSL Context , ĊĠĠĠ Ġprivate Ġval Ġredis Operation : ĠRedis Operation Ċ ) Ġ{ ĊĠĠĠ Ġ// Ġ éĩį ç½® æļĤ åģľ ä»»åĬ¡ æļĤ åģľ çĬ¶æĢģ ä½į ĊĠĠĠ Ġfun Ġpause Task Finish Execute ( build Id : ĠString , ĠtaskId : ĠString ) Ġ{ ĊĠĠĠĠĠĠĠ Ġredis Operation . delete ( Pause Redis Utils . get Pause Redis Key ( build Id , ĠtaskId )) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġsave Pause Value ( pipeline Pause Value : ĠPipeline Pause Value ) Ġ{ ĊĠĠĠĠĠĠĠ Ġpipeline Pause Value Dao . save ( dsl Context , Ġpipeline Pause Value ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġget Pause Task ( build Id : ĠString , ĠtaskId : ĠString ): ĠPipeline Pause Value ? Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġpipeline Pause Value Dao . convert ( pipeline Pause Value Dao . get ( dsl Context , Ġbuild Id , ĠtaskId )) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Suppress (" Nested Block Depth ") ĊĠĠĠ Ġfun Ġreset Element When Pause Retry ( build Id : ĠString , Ġmodel : ĠModel ) Ġ{ ĊĠĠĠĠĠĠĠ Ġmodel . stages . forEach Ġ{ Ġstage Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġstage . containers . forEach Ġ{ Ġcontainer Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreset Element In Container ( container , Ġbuild Id ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcontainer . fetch Group Containers ()?. forEach Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreset Element In Container ( it , Ġbuild Id ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġreset Element In Container ( container : ĠContainer , Ġbuild Id : ĠString ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġnew Elements Ġ= ĠArrayList < Element >( container . elements . size ) ĊĠĠĠĠĠĠĠ Ġcontainer . elements . forEach Ġnext Element @{ Ġelement Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( element . id Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn @ nextElement ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġ éĩį ç½® æıĴä»¶ çĬ¶æĢģ å¼Ģåıĳ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġpause Flag Ġ= Ġredis Operation . get ( Pause Redis Utils . get Pause Redis Key ( build Id , Ġelement . id !! )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( pause Flag Ġ!= Ġnull ) Ġ{ Ġ// Ġ èĭ¥ æıĴä»¶ å·²ç»ı æļĤ åģľ è¿ĩ , éĩį è¯ķ æŀĦå»º éľĢ å¤į ä½į å¯¹åºĶ æŀĦå»º æļĤ åģľ çĬ¶æĢģ ä½į ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlogger . info (" Refresh Ġpause Flag | Ġ$ build Id | ${ element . id }") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpause Task Finish Execute ( build Id , Ġelement . id !! ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( Control Utils . pause Flag ( element . additional Options )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdefault Element Ġ= Ġget Pause Task ( build Id , Ġelement . id !! ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( default Element Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlogger . info (" Refresh Ġelement | Ġ$ build Id | ${ element . id }") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġæ ģ ¢å¤į detail è¡¨ model åĨħ çļĦ å¯¹åºĶ element ä¸º é»ĺè®¤ åĢ¼ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnew Elements . add ( Json Util . to ( default Element . defaultValue , ĠElement :: class . java )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnew Elements . add ( element ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnew Elements . add ( element ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġcontainer . elements Ġ= Ġnew Elements ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġprivate Ġval Ġlogger Ġ= ĠLoggerFactory . getLogger ( Pipeline Task Pause Service :: class . java ) !! ĊĠĠĠ Ġ} Ċ } Ċ