/* Ċ Ġ* ĠTencent Ġis Ġplease d Ġto Ġsupport Ġthe Ġopen Ġsource Ġcommunity Ġby Ġmaking ĠB K - CI Ġ èĵĿ é² ¸ æĮģ ç»Ń éĽĨ æĪĲ å¹³åı° Ġavailable . Ċ Ġ* Ċ Ġ* ĠCopyright Ġ( C ) Ġ 2 0 2 1 Ġ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 . common . artifact . manager Ċ Ċ import Ġcom . tencent . bk repo . common . api . constant . HttpStatus Ċ import Ġcom . tencent . bk repo . common . api . exception . ErrorCode Exception Ċ import Ġcom . tencent . bk repo . common . api . message . Common Message Code Ċ import Ġcom . tencent . bk repo . common . artifact . api . Artifact File Ċ import Ġcom . tencent . bk repo . common . artifact . stream . Artifact InputStream Ċ import Ġcom . tencent . bk repo . common . artifact . stream . Empty InputStream Ċ import Ġcom . tencent . bk repo . common . artifact . stream . Range Ċ import Ġcom . tencent . bk repo . common . artifact . util . http . Http Range Utils Ċ import Ġcom . tencent . bk repo . common . service . util . HttpContext 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 . common . storage . inner cos . http . HttpMethod Ċ import Ġcom . tencent . bk repo . repository . api . Node Client Ċ import Ġcom . tencent . bk repo . repository . pojo . node . Node Detail Ċ import Ġcom . tencent . bk repo . repository . pojo . node . service . Node CreateRequest Ċ import Ġorg . slf 4 j . LoggerFactory Ċ Ċ /** Ċ Ġ* Ġ åŃĺåĤ¨ Manager Ċ Ġ* Ċ Ġ* Ġ èĻ½çĦ¶ [ Storage Service ] æıĲä¾ĽäºĨ æŀĦ ä»¶ åŃĺåĤ¨ æľįåĬ¡ ï¼Į ä½Ĩ ä¿ĿåŃĺ ä¸Ģä¸ª æĸĩä»¶ èĬĤçĤ¹ éľĢè¦ģ ä¸¤ æŃ¥ æĵįä½ľ : Ċ Ġ* ĠĠĠ 1 . Ġ[ Storage Service ] ä¿ĿåŃĺ æĸĩä»¶ æķ°æį® Ċ Ġ* ĠĠĠ 2 . Ġ[ Node Client ] å¾® æľįåĬ¡ è°ĥçĶ¨ åĪĽå»º æĸĩä»¶ èĬĤçĤ¹ Ċ Ġ* Ġ è¿Ļæł· ä¼ļ åŃĺåľ¨ åĩłä¸ª éĹ®é¢ĺ : Ċ Ġ* ĠĠĠ 1 . Ġæ¯ı ä¸ª åľ°æĸ¹ éĥ½ä¼ļ è¿Ľè¡Į åĲĮ æł· çļĦ æĵįä½ľ ï¼Į å¢ŀåĬł ä»£çłģ éĩįå¤į çİĩ Ċ Ġ* ĠĠĠ 2 . Ġä¸į æĶ¯æĮģ äºĭåĬ¡ ï¼Į å¦Ĥæŀľ æĸĩä»¶ ä¿ĿåŃĺ æĪĲåĬŁ ï¼Į ä½Ĩ èĬĤçĤ¹ åĪĽå»º å¤±è´¥ ï¼Į ä¼ļ å¯¼èĩ´ äº§çĶŁ åŀ ĥ åľ ¾ æĸĩä»¶ å¹¶ä¸Ķ æĹłæ³ķ æ¸ħ çĲĨ Ċ Ġ* Ċ Ġ* Ġ æīĢä»¥ æıĲä¾Ľ Storage Manager ï¼Į ç®Ģ åĮĸ ä¾Ŀèµĸ æºĲ çļĦ æĵįä½ľ å¹¶ åĩı å°ĳ éĶĻè¯¯ çİĩ Ċ Ġ*/ Ċ @ Suppress (" Too Generic Exception Ca ught ") Ċ class ĠStorage Manager ( ĊĠĠĠ Ġprivate Ġval Ġstorage Service : ĠStorage Service , ĊĠĠĠ Ġprivate Ġval Ġnode Client : ĠNode Client Ċ ) Ġ{ ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġ åŃĺåĤ¨ æŀĦ ä»¶ [ artifact File ] åĪ° [ storage Credentials ] ä¸Ĭ ï¼Į å¹¶ æł¹æį® [ request ] åĪĽå»º èĬĤçĤ¹ ĊĠĠĠĠ Ġ* Ġæĵ įä½ľ æĪĲåĬŁ è¿ĶåĽŀ èĬĤçĤ¹ è¯¦æĥħ [ Node Detail ] ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġstore Artifact File ( ĊĠĠĠĠĠĠĠ Ġrequest : ĠNode CreateRequest , ĊĠĠĠĠĠĠĠ Ġartifact File : ĠArtifact File , ĊĠĠĠĠĠĠĠ Ġstorage Credentials : ĠStorage Credentials ? ĊĠĠĠ Ġ): ĠNode Detail Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġaffected Count Ġ= Ġstorage Service . store ( request . sha 2 5 6 !! , Ġartifact File , Ġstorage Credentials ) ĊĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġnode Client . createNode ( request ). data !! ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( exception : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġå½ĵ æĸĩä»¶ æľī åĪĽå»º ï¼Į åĪĻ åĪłéĻ¤ æĸĩä»¶ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( affected Count Ġ== Ġ 1 ) Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstorage Service . delete ( request . sha 2 5 6 !! , Ġstorage Credentials ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( exception : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlogger . error (" Failed Ġto Ġdelete Ġnew Ġcreated Ġfile [ ${ request . sha 2 5 6 } ]", Ġexception ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġ å¼Ĥå¸¸ å¾Ģ ä¸Ĭ æĬĽ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthrow Ġexception ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġ åĬłè½½ Artifact InputStream ĊĠĠĠĠ Ġ* Ġå¦Ĥæŀľ node ä¸º null ï¼Į åĪĻ è¿ĶåĽŀ null ĊĠĠĠĠ Ġ* Ġå¦Ĥæŀľ ä¸º head è¯·æ±Ĥ åĪĻ è¿ĶåĽŀ empty Ġinput Ġstream ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġload Artifact InputStream ( ĊĠĠĠĠĠĠĠ Ġnode : ĠNode Detail ?, ĊĠĠĠĠĠĠĠ Ġstorage Credentials : ĠStorage Credentials ? ĊĠĠĠ Ġ): ĠArtifact InputStream ? Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( node Ġ== Ġnull Ġ|| Ġnode . folder ) Ġreturn Ġnull ĊĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġrequest Ġ= ĠHttp Context Holder . getRequest OrNull () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġrange Ġ= Ġrequest ?. let Ġ{ ĠHttp Range Utils . resolve Range ( it , Ġnode . size ) Ġ} Ġ?: ĠRange . full ( node . size ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( node . size Ġ== Ġ 0 L Ġ|| Ġrequest ?. method Ġ== ĠHttpMethod . HEAD . name ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠArtifact InputStream ( Empty InputStream . INSTANCE , Ġrange ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġstorage Service . load ( node . sha 2 5 6 . or Empty (), Ġrange , Ġstorage Credentials ) ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( exception : ĠIllegalArgumentException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠErrorCode Exception ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstatus Ġ= ĠHttpStatus . REQUEST ED _ RANGE _ NOT _ SAT IS FI ABLE , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmessage Code Ġ= ĠCommon Message Code . REQUEST _ RANGE _ INVALID ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġprivate Ġval Ġlogger Ġ= ĠLoggerFactory . getLogger ( Storage Manager :: class . java ) ĊĠĠĠ Ġ} Ċ } Ċ