@Fleuz

На какие ошибки ввода-вывода падать, а какие пытаться исправить?

Я начинающий программист на Rust, пишу бекенды и чувствуя что в продакшене нельзя просто падать на все ошибки ввода-вывода столкнулся с вопросом их корректной обработки.
Понятно что делать если файла нет, прав нет, место кончилось или файл занят, но как быть с такими линуксовыми ошибками?
EIO (I/O error)
EINTR (Interrupted system call) //что вообще могло прервать системный вызов?
EL2NSYNC (Level 2 not synchronized)
EL3HLT (Level 3 halted)
EL3RST (Level 3 reset)
ENOANO (No anode)

Каков вообще тот список ошибок которые вообще имеет смысл обрабатывать если мы говорим о работе с локальными файлами и сокетами? На какие ошибки стоит убивать проблемный поток, но продолжать работу? А может есть какие-то ошибки при которых стоит паниковать и не пытаясь что-либо сохранить сразу падать?
  • Вопрос задан
  • 103 просмотра
Пригласить эксперта
Ответы на вопрос 1
mayton2019
@mayton2019
Bigdata Engineer
Исключения I/O - одни из самых сложных п принятии решения. Это связано с тем что сеть - это часть внешнего мира. Того на который ты не влияешь. В чем может быть причина? На каждый класс ошибок и на каждый источник данных должна быть таблица принятия решений. Например ты знаешь что в каждый четверг данный rest сервис имеет возможный регламент обновлений. Выдавай на UI плитку с сообщением о регламенте и проси повторить через какое то время. А другий рест сервис просто висит на слабом канале. И к нему надо применять RetryLogic. Молча. Просто другого выхода нет.

Общих рекомендаций нет.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы