Странности DELETE и open_file_cache

Igor Sysoev is at rambler-co.ru
Thu Nov 20 17:51:06 MSK 2008


On Thu, Nov 20, 2008 at 05:35:32PM +0300, Монашёв Михаил wrote:

> Получен лог:
> 20/Nov/2008:17:15:28 +0300 89.208.146.215 348 i15.carguru.ru "DELETE /i/users/test.1227190526.css HTTP/1.1" 404 "-" "libwww-perl/5.805"
> 20/Nov/2008:17:15:58 +0300 89.208.146.215 211 i15.carguru.ru "PUT /i/users/test.1227190526.css HTTP/1.1" 201 "-" "libwww-perl/5.805"
> 20/Nov/2008:17:16:21 +0300 89.208.146.215 1064 i15.carguru.ru "GET /i/users/test.1227190526.css HTTP/1.1" 200 "-" "libwww-perl/5.805"
> 20/Nov/2008:17:16:33 +0300 89.208.146.215 203 i15.carguru.ru "DELETE /i/users/test.1227190526.css HTTP/1.1" 204 "-" "libwww-perl/5.805"
> 20/Nov/2008:17:17:14 +0300 89.208.146.215 1064 i15.carguru.ru "GET /i/users/test.1227190526.css HTTP/1.1" 200 "-" "libwww-perl/5.805"
> 
> Как видно из лога второй DELETE почему-то не удаляет файл и GET потом
> этот файл успешно его возвращает. И содержимое файла точно такое же,
> какое записал PUT. Хотя на диске файла не оказывается после второго
> DELETE-а.
> 
> Оказалось, что виной такому поведению open_file_cache .
> 
> Конфиг был вот такой:
> 
>     open_file_cache             off;
>     open_file_cache            max=20000       inactive=120s;
>     open_file_cache_valid      120s;
>     open_file_cache_errors     off;
> 
> Не знаю, бага, это или фича. Но у меня она отняла пол дня. :-)

Фича. Файл удаляется, но в open_file_cache он остаются на время
open_file_cache_valid. Удаление из open_file_cache по DELETE
не решает проблемы, потому что кэши локальны для каждого воркера.
Проблему бы решило сообщение об удалении по kqueue/etc, но в nginx'е
на данный момент есть проблемы из-за которых воркер может упасть
при включении таких сообщений.


-- 
Игорь Сысоев
http://sysoev.ru





More information about the nginx-ru mailing list