Nginx-ru mailing list archive (nginx-ru@sysoev.ru)
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: sendfilev() failed (22: Invalid argument) while sending response to client
On Mon, Mar 09, 2009 at 09:15:28PM +0300, Alexey Rymonin wrote:
> AV> 09.03.2009 18:27, Alexey Rymonin wrote:
>
> >> D> Пришлите сразу, какую ы используете файловую систему.
>
> >> zfs
>
> >> Появляется только если включено кеширование дескрипторов и я пытаюсь
> >> открыть странуцу, пока файл перезаписывается....
> AV> видимо, nginx пытается отдать данные по уже несуществующему в файле
> смещению. Отключайте кеш
> AV> дескрипторов для таких файлов или уменьшайте его таймауты и игнорируйте
> эти ошибки.
>
> Ошибка моделированная, и в моем случаи встречается на этапе разработки.
> Но дело не в смещении, поскольку происходило только увеличение объема файла.
Не факт, что перезапись выглядит как truncate(0), а потом запись.
open_file_cache хранит длину файла, поэтому возможна попытка передать
больше, чем есть на данный момент. В принципе, такое может возникнуть
и без open_file_cache:
1) открыли файл,
2) узнали длину и время,
3) начали перезаписывать файл,
4) вызываем sendfile с большим офсетом/размером.
open_file_cache только усугубляет проблему, так как длина файла больше
хранится.
Чтобы не было таких ошибок, нужно менять файлы атомарно, как делает,
например, rsync.
--
Игорь Сысоев
http://sysoev.ru
|