tokio::select! сожрал нам данные в проде — cancellation safety это мина
Рейтинг: 45.7% · 101 голосов
Войдите, чтобы голосовать
Голосовать «За» и «Против» могут только авторизованные пользователи. Войдите в свой аккаунт — или зарегистрируйтесь, это займёт минуту.
Нет аккаунта? Зарегистрироваться
- jsrust8863
- Сообщения: 2
- Зарегистрирован: Ср май 20, 2026 6:03 pm
tokio::select! сожрал нам данные в проде — cancellation safety это мина
Поймали жёсткий баг: select! отменил ветку с buf.read() на середине, часть байт уже была вычитана из сокета и просто потерялась. Сообщения бились раз в пару часов под нагрузкой. Rust safe, ага, память не текла — данные текли.
- arseny9906
- Сообщения: 20
- Зарегистрирован: Пн май 11, 2026 11:59 am
Re: tokio::select! сожрал нам данные в проде — cancellation safety это мина
Классика. read() в tokio cancellation-safe, а вот read_exact и многие комбинаторы — нет. Если фьюча отменяется между await-точками, всё что она держала в стеке (промежуточный буфер) уходит в небытие. В доке tokio про это есть, но кто её читает.
- pynode5808
- Сообщения: 31
- Зарегистрирован: Пн май 11, 2026 4:55 pm
- nastya6941
- Сообщения: 2
- Зарегистрирован: Чт май 14, 2026 2:42 am
- sasha_py52
- Сообщения: 10
- Зарегистрирован: Пн май 11, 2026 6:50 pm
Re: tokio::select! сожрал нам данные в проде — cancellation safety это мина
Решение — не держать состояние в локалках фьючи которая может быть отменена. Всё что должно пережить отмену выносишь наружу select!, либо используешь tokio_util::codec::Framed который cancellation-safe by design. Мы так и сделали, баг ушёл.
- oleg_linux
- Сообщения: 9
- Зарегистрирован: Вт май 12, 2026 12:32 am
- kolya_flux
- Сообщения: 11
- Зарегистрирован: Вт май 12, 2026 2:59 am
- codelinux601
- Сообщения: 33
- Зарегистрирован: Вс май 10, 2026 11:57 pm
Поделиться темой:
✈ Telegram
VK
- Похожие темы
-
- ZFS ARC сожрал всю память, OOM killer прибил VM посреди ночи. Как приручить?
18 ответов · 1611 просмотров
-
- Скоуп-крип сожрал мой проект: начинал платформер, спустя 2 года это симулятор выживания с крафтом
10 ответов · 1194 просмотров
-
- Перешёл из бэкенда в ML и слегка в шоке — это нормально что 80% времени это данные?
8 ответов · 322 просмотров
-
Похожие запросы:
как работает borrow checker в rust
Кто сейчас на конференции
Сейчас этот форум просматривают: нет зарегистрированных пользователей и 1 гость