Vydáno ve v1.824.0, 5. 10. 2026  Oprava ve Windmillu v upstreamu

Windmill: neomezené stahování z S3 u příloh pro AI

Náš skener upozornil, že Windmill, open-source platforma pro skripty, workflow a interní nástroje, stahoval objekty z S3 použité jako přílohy pro AI celé do paměti a kódoval je do base64 bez jakéhokoli limitu velikosti. Jediný velký objekt tak mohl vyčerpat paměť workeru. Náš pull request přidal kontrolu velikosti. Správce Ruben Fiszel upozornil, že přichází příliš pozdě, a připravil lepší opravu, kterou ještě týž den vydal ve v1.824.0.

Co bylo špatně

Když zprávy kroku s AI odkazují na objekt v S3, funkce download_and_encode_s3_image() v backend/windmill-ai/src/image_handler.rs stáhla celý objekt a převedla ho na base64 data URL pro poskytovatele modelu. Velikost nic neomezovalo a úložiště workspace může obsahovat velké výstupy jobů, dumpy nebo archivy. Dost velký objekt znamenal velkou alokaci, k tomu zhruba o třetinu víc na kopii v base64, a mohl workeru vyčerpat paměť.

Jak to bylo opraveno

Náš pull request #11515 odmítal objekty nad 30 MB ještě před kódováním do base64. Review Rubena Fiszela bylo přesné:

„With the check here, a 2 GB object still gets fully buffered before the 30 MiB check runs, so it can still cause the OOM this aims to prevent.“

Souhlasili jsme a náš PR byl uzavřen ve prospěch jeho pull requestu #11534. Ten umožní pomocné funkci pro stahování z S3 převzít limit v bajtech, odmítne deklarovaný Content-Length nad limitem ještě před čtením těla a přestane číst streamovanou odpověď, jakmile překročí 30 MiB; obojí pokrývají regresní testy. Vstupy z S3 pro SQL se dál stahují bez limitu.

Časová osa

Jak to číst

Náš patch ušetřil jen kopii v base64; celý objekt se stejně nejdřív načetl do paměti. Review správce to odhalilo a oprava v upstreamu je lepší než ta naše. Přínos skenu byl v tom, že ukázal na neomezenou alokaci; správnou opravu připravil ten, kdo kód zná. Nálezy jsou podněty pro lidi, ne rozsudky.

Zdroje

← Zpět na příběhy úspěchu