LINUX.ORG.RU
ФорумTalks

Зачем создаются файлы нулевой длины при ошибках?

 ,


1

1

Например, попытка скачать что-то с сайта возвращает 503-ю ошибку, но wget все-равно создает файл нулевой длины. Особое западло, что иногда на сервере и в самом деле файл по каким-то причинам нулевой длины.

По-моему, это баг с точки зрения логики работы. Из-за этого, для разных автоматизированных закачек приходится дополнительные проверки делать.

Может с философской, так сказать точки зрения, это и вовсе баг архитектуры файловых систем. Если бы файл мог быть не только с данными или нулевой длины, но и имел состояние «неопределено» или «не инициализирован» (undefined). И это третье состояние сигнализировало только о том, что создано имя файла, но в него никогда не записывались данные, которые не известны. А данные нулевой длины - это тоже в некотором роде данные.

★★★★★

Последнее исправление: praseodim (всего исправлений: 1)

По-моему, это баг с точки зрения логики работы.

Пропатч и собери свой wget.

WARNING ★★★★
()

сообщи своё ценное мнение аффтарам wget-а

Harald ★★★★★
()

Из-за этого, для разных автоматизированных закачек приходится дополнительные проверки делать.

wget -O <имя файла> <URL>
test "$?" != "0" && echo "achtung!" && rm <имя файла> && exit 1

Одна строчка, проверяет также валидность завершения закачек. Удаляет недокачанные. Не благодари.

DawnCaster ★★
()

А вообще, при любой автоматизации делать проверку кода выхода программ, которые в зависимости от внешних условий могут вылететь с ошибкой - в любом случае нужно, иначе это говно а не автоматизация. Так что от пары лишних строчек в скрипте руки, чай, не отвалятся.

DawnCaster ★★
()
Ответ на: комментарий от DawnCaster

Так что от пары лишних строчек в скрипте руки, чай, не отвалятся.

Если аккуратно делать не пара лишних, но это по-любому усложнение логики работы.

Вообще, по опыту скажу, что удалять чего-нибудь в автоматически работающем скрипте надо крайне осторожно, могут быть факапы. Например, если файл уже есть до закачки или если имя какое-то очень странное.

praseodim ★★★★★
() автор топика
Последнее исправление: praseodim (всего исправлений: 1)
Ответ на: комментарий от praseodim

Ну, это уже в условия начальной задачи не входило. Как бы там ни было, проверять успешность завершения работы wget - нужно. А там уже внутри условия по обработки ошибки загрузки (не докаченной или даже не начатой) добавить одну строчку на проверку длины файла и его удаления при нулевой длине.

DawnCaster ★★
()
Ответ на: комментарий от praseodim

Работать с файлами при автоматизации вообще нужно осторожно. И тестировать всё перед использованием в продакшене. А если руки кривые, то факап - это только вопрос времени.

DawnCaster ★★
()
Ответ на: комментарий от DawnCaster

Это понятно, но просто вопрос что такая логика кажется не только в wget.

Может с философской, так сказать точки зрения, это и вовсе баг архитектуры файловых систем. Если бы файл мог быть не только с данными или нулевой длины, но и имел состояние «неопределено» или «не инициализирован» (undefined). И это третье состояние сигнализировало только о том, что создано имя файла, но в него никогда не записывались данные, которые не известны. А данные нулевой длины - это тоже в некотором роде данные.

praseodim ★★★★★
() автор топика
Ответ на: комментарий от WindowsXP

тогда если не докачался, то удалит всё, что успел утянуть

WerNA ★★★★★
()

при попытке чтения несуществующих файлов из своих программ тоже создаются файлы нулевой длины, это надо сказать раздражало...

WerNA ★★★★★
()

Потому что эти идиоты открывают файл на запись до начала закачки. В curl так же.
Из-за этого приходится мутить костыли, чтобы fanotify/inotify не срабатывал на нулевые файлы.

iSage ★★★★
()
Ответ на: комментарий от iSage

А как ты хотел? Браузер так же делает + еще и временный файл. Да, браузер потом удаляет нагаженное, но на то он и браузер. А тут просто прилага чтобы качнуть — и делай потом с этим все что хочешь — код ответа тебе дали, файл тебе дали.

deep-purple ★★★★★
()
Ответ на: комментарий от deep-purple

Я хотел, чтобы у меня не появлялись пустые файлы.
К моменту удаления уже поздно - fanotify отработал.

iSage ★★★★
()
Ответ на: комментарий от iSage

Они обосновали свою позицию и добавили свои патчи.

Твоё утверждение с обработкой fanotify тоже имеет смысл. Рекомендую запостить баг с предложением добавить опцию к curl, чтобы не создавать файлы в случае неудачи именно для юзкейса с fanotify/inotify. Таким образом и дефолтное поведение не пострадает, и ты получишь возможность решить свою проблему.

Chaser_Andrey ★★★★★
()

Зачем создаются файлы нулевой длины при ошибках?

Запись в имени файла и его атрибутах, это тоже информация, по которой можно выяснить, что тогда-то, от такого-то пользователя, программа пыталась-пыталась но не шмогла.

Napilnik ★★★★★
()

ЯННП

Может с философской, так сказать точки зрения, это и вовсе баг архитектуры файловых систем. Если бы файл мог быть не только с данными или нулевой длины, но и имел состояние «неопределено» или «не инициализирован» (undefined). И это третье состояние сигнализировало только о том, что создано имя файла, но в него никогда не записывались данные, которые не известны. А данные нулевой длины - это тоже в некотором роде данные.

Зачем нужно какое-то „особое состояние” если данные нулевой длины — это тоже данные?

данные, которые не известны

Из /dev/random чтоль?

h578b1bde ★☆
()

А вообще с точки зрения логики работы wget костыльное говно. Например, чтобы нормально с ним работать необходимо указать как минимум две дополнительные опции.

h578b1bde ★☆
()
Ответ на: комментарий от WerNA

при попытке чтения несуществующих файлов из своих программ тоже создаются файлы нулевой длины, это надо сказать раздражало...

даже если открывать в режиме толькочтения?

hint: O_CREAT

Loki13 ★★★★★
()
Последнее исправление: Loki13 (всего исправлений: 1)

Curl возвращает результат работы. Уверен, что и wget тоже возвращает результат. Следовательно никаких лишних проверок делать ненужно.

andreyu ★★★★★
()

Нет, просто wget не должен создавать никаких файлов при ошибках.

slovazap ★★★★★
()

Это называется консистентное, предсказуемое поведение программы.

Deleted
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.