ПРОЕКТЫ 


  АРХИВ 


Apache-Talk @lexa.ru 

Inet-Admins @info.east.ru 

Filmscanners @halftone.co.uk 

Security-alerts @yandex-team.ru 

nginx-ru @sysoev.ru 


  СТАТЬИ 


  ПЕРСОНАЛЬНОЕ 


  ПРОГРАММЫ 



ПИШИТЕ
ПИСЬМА












     АРХИВ :: nginx-ru
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



 




Copyright © Lexa Software, 1996-2009.