Хотя интернету 55 лет, мы до сих пор не починили пробел в урлах.

На выходных была ситуация: упали крон-джобы, и вообще произошла какая-то фигня. Файлы в S3 есть, а клиенты жалуются, что нету.

Смотрю — кто-то поменял название папки в S3. Раньше было Daily_Reports, а теперь Daily Reports (с пробелом). Половина клиентов пишет файлы нормально. Но есть другие клиенты на питоне и баше, которые кодируют урлы дважды. В результате Daily Reports становится новой папкой Daily%20Reports в S3. Один клиент пишет в Daily Reports и ему ок. Второй клиент ищет файлы в Daily%20Reports, не находит и падает.

Увы, мой быдлокод тоже упал. У меня такая задача: прилетает S3-урл вида

s3://some.bucket.com/path/to/file.txt

и мне нужно вытащить из него бакет, в данном случае хост. Делаю так:

(-> s3-url java.net.URI. .getHost)

Но когда в урле оказался пробел, класс URI валится — вай, не по стандарту, не знаю-не могу. Поменял на класс URL — он парсит урлы с пробелами нормально, но теперь ему не нравится схема s3:// — опять не по стандарту. Сделал так: беру урл, меняю схему автозаменой на http://, оборачиваю в URL и достаю хост. Обмазал тестами.

“Какая шаткая система, если её может разрушить пригоршня ягод!” (с)