Баг появлялся в 0,001% случаев. Виноваты оказались два формата одного ответа
MySQL-запрос иногда возвращал пустой результат вместо строк. В Hyperdrive ошибка возникала только с включённым кешем, а поймать её трассировкой долго не удавалось.
У Cloudflare нашлось объяснение: два узла могли пользоваться общим кешем, но записывали туда разные байты. Один сохранял ответ в формате Hyperdrive, другой — уже преобразованный под возможности клиентского драйвера.
Разница касалась пакетов EOF и OK, обозначающих границы результата. Чужая версия ответа могла выглядеть как преждевременный конец данных или приводить к зависанию.
Исправление: всегда хранить в кеше один канонический формат, а преобразование выполнять перед отправкой клиенту. После этого проблема с пустыми ответами исчезла.
Post #14936
4.02K

- ❤ 7
- 👍 3
- 😈 3
- ☃ 2
- 👏 2
- 🤷♂ 1
- 🔥 1
- 🌭 1
- 😐 1
- 🍾 1
- 👻 1