/* Ċ Ġ* Ġ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 . bk repo . job . batch Ċ Ċ import Ġcom . tencent . bk repo . common . service . log . Logger Holder Ċ import Ġcom . tencent . bk repo . common . storage . core . Storage Service Ċ import Ġcom . tencent . bk repo . common . storage . credentials . Storage Credentials Ċ import Ġcom . tencent . bk repo . job . COUNT Ċ import Ġcom . tencent . bk repo . job . CRED ENTIAL S Ċ import Ġcom . tencent . bk repo . job . ID Ċ import Ġcom . tencent . bk repo . job . SH ARD ING _ COUNT Ċ import Ġcom . tencent . bk repo . job . batch . base . File Job Context Ċ import Ġcom . tencent . bk repo . job . batch . base . Mongo Db Batch Job Ċ import Ġcom . tencent . bk repo . job . batch . base . Job Context Ċ import Ġcom . tencent . bk repo . job . config . Mong odb Job Properties Ċ import Ġcom . tencent . bk repo . job . exception . Job Execute Exception Ċ import Ġcom . tencent . bk repo . repository . api . Storage Credentials Client Ċ import Ġorg . springframework . data . mongodb . core . Mongo Template Ċ import Ġorg . springframework . data . mongodb . core . query . Criteria Ċ import Ġorg . springframework . data . mongodb . core . query . Query Ċ import Ġorg . springframework . data . mongodb . core . query . isEqualTo Ċ import Ġorg . springframework . scheduling . annotation . Scheduled Ċ import Ġjava . time . Duration Ċ import Ġjava . util . concurrent . Concurrent HashMap Ċ Ċ /** Ċ Ġ* Ġæ¸ ħ çĲĨ å¼ķçĶ¨ = 0 çļĦæĸĩä»¶ Ċ Ġ*/ Ċ class ĠFile Reference Cleanup Job ( ĊĠĠĠ Ġprivate Ġval Ġstorage Service : ĠStorage Service , ĊĠĠĠ Ġprivate Ġval Ġmongo Template : ĠMongo Template , ĊĠĠĠ Ġprivate Ġval Ġstorage Credentials Client : ĠStorage Credentials Client , ĊĠĠĠ Ġproperties : ĠMong odb Job Properties Ċ ) Ġ: ĠMongo Db Batch Job < File Reference Cleanup Job . File Reference Data >( properties ) Ġ{ ĊĊĠĠĠ Ġ@ Scheduled ( cron Ġ= Ġ" 0 Ġ 0 Ġ 4 / 6 Ġ* Ġ* Ġ? ") Ġ// Ġ 4 çĤ¹ å¼Ģå§ĭ ï¼Į 6 å°ı æĹ¶ æī§è¡Į ä¸Ģæ¬¡ ĊĠĠĠ Ġoverride Ġfun Ġstart (): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġsuper . start () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġcreate Job Context (): ĠJob Context Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn ĠFile Job Context () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġentity Class (): ĠClass < File Reference Data > Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn ĠFile Reference Data :: class . java ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġcollection Names (): ĠList < String > Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġ( 0 Ġuntil ĠSH ARD ING _ COUNT ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. map Ġ{ Ġ"$ COLLECTION _ NAME _ PREFIX $ it " Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. toList () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġbuild Query (): ĠQuery Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn ĠQuery ( Criteria . where ( COUNT ). isEqualTo ( 0 )) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġrun ( row : ĠFile Reference Data , Ġcollection Name : ĠString , Ġcontext : ĠJob Context ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġcredentials Key Ġ= Ġrow . credentials Key ĊĠĠĠĠĠĠĠ Ġval Ġsha 2 5 6 Ġ= Ġrow . sha 2 5 6 ĊĠĠĠĠĠĠĠ Ġval Ġid Ġ= Ġrow . id ĊĠĠĠĠĠĠĠ Ġval Ġstorage Credentials Ġ= Ġcredentials Key ?. let Ġ{ Ġget Credentials ( credentials Key ) Ġ} ĊĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( sha 2 5 6 . isNotBlank () Ġ&& Ġstorage Service . exist ( sha 2 5 6 , Ġstorage Credentials )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstorage Service . delete ( sha 2 5 6 , Ġstorage Credentials ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ( context Ġas ĠFile Job Context ). file Missing . increment AndGet () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlogger . warn (" File [$ sha 2 5 6 ] Ġis Ġmissing Ġon Ġ[$ storage Credentials ], Ġskip Ġcleaning Ġup .") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmongo Template . remove ( Query ( Criteria ( ID ). isEqualTo ( id )), Ġcollection Name ) ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠJob Execute Exception (" Failed Ġto Ġdelete Ġfile [$ sha 2 5 6 ] Ġon Ġ[$ storage Credentials ]. ", Ġe ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġget Lock At Most For (): ĠDuration Ġ= ĠDuration . of Days ( 7 ) ĊĊĠĠĠ Ġprivate Ġfun Ġget Credentials ( key : ĠString ): ĠStorage Credentials ? Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġcache Map . get Or Put ( key ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġstorage Credentials Client . findBy Key ( key ). data Ġ?: Ġreturn Ġnull ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġval Ġcache Map : ĠConcurrent HashMap < String , ĠStorage Credentials ?> Ġ= ĠConcurrent HashMap () ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġprivate Ġval Ġlogger Ġ= ĠLogger Holder . job Logger ĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠCOL LECTION _ NAME _ PREFIX Ġ= Ġ" file _ reference _" ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġdata Ġclass ĠFile Reference Data ( private Ġval Ġmap : ĠMap < String , ĠAny ?> ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġid : ĠString ? Ġby Ġmap ĊĠĠĠĠĠĠĠ Ġval Ġsha 2 5 6 : ĠString Ġby Ġmap ĊĠĠĠĠĠĠĠ Ġval Ġcredentials Key : ĠString ? Ġ= Ġmap [ CRED ENTIAL S ] Ġas ĠString ? ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġmap ToObject ( row : ĠMap < String , ĠAny ?> ): ĠFile Reference Data Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn ĠFile Reference Data ( row ) ĊĠĠĠ Ġ} Ċ } Ċ