данные записываются в файл. На "сервере" — файл пустой (ось при этом одна и та же, arch linux). Как такое может быть?
file.sync_data().await?; вроде спасает положение, но как-то неожиданно что оно нужно...
io_uring ещё не завезли?
Ну отдельным крейтом только (и afaic по другому только через миллион лет в tokio 2.0 т.к. у уринга другой интерфейс)
Но причём тут это вообще?
Ну sync_data это не fsync?
Был же tokio_uring который делал ещё одну вариацию File, хотя он вроде умер
> Ну отдельным крейтом только Я про него и говорю
хз, мне лень копаться
почитай описание man 2 fsync, оно про сброс данных из кеша на диск. фактически создание файла и запись в файл - две разных операции. при этом "локально" у тебя данные могут быть записаны как есть, а до fsync у тебя данные на "сервере" могут отличаться. почитай про O_DIRECT и O_SYNC флаги в man 2 open, там тоже немного про это рассказывается. ну и спроси у человека выше, почему O_DIRECT не работает и откуда в постгрес много боли. потом спроси почему fsync может иногда не работать. потом пострадай и прими как данность. io_uring может улучшить ситуацию, но я пока еще не видел норм крейтов. может и отстал от жизни.
Можешь пожалуйста подсказать где про неработающий O_DIRECT почитать? В некоторых ситуациях его использование вполне оправдано (во всяком случае по тому что мне попадалось)
спасибо. погуглил, лет 10 назад вопросы про поддержу O_DIRECT стали исчезать. остались артефакты в выдаче, но ничего интересного.
Это хорошо :) Из нового мне попалась хорошая статья от автора Glommio/ бывшего разработчика ScyllaDB. Кмк достаточно хорошо описывает текущее положение вещей и есть полезные ссылки: https://itnext.io/direct-i-o-writes-the-best-way-to-improve-your-credit-score-bd6c19cdfe46
Обсуждают сегодня