ПРОЕКТЫ 


  АРХИВ 


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: [BUG] sendfile on; & output_buffers 1 128k;



Hello!

On Mon, Sep 12, 2011 at 08:06:36PM +0300, Андрей Василишин wrote:

> 
> >А можно ещё для чистоты эксперимента патч откатить, и убедиться
> >что без патча проблема воспроизводится?
> >
> >Потому как я решительно не вижу причин, по которым данный патч мог
> >бы помочь.
> >
> 
> В общем опять проблема воспроизвелась, при перемотке прыгает на
> начало (нгинкс тут без патча).

Судя по debug log'у, файл 110912-v.flv писали в процессе его 
скачивания клиентами, в результате закешированная длина в 
open_file_cache в разных рабочих процессах разная.  Соответственно 
если запрос со start=<много> попадал в рабочий процесс, считавший, 
что длина файла меньше, в ответ отдавался полный файл.

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

В данном случае, судя по всему, ситуация усугублялась проблемой в  
open_file_cache: после дописывания файла закешированный размер не 
обновлялся.  Прилагающийся патч проблему исправляет.

Maxim Dounin
# HG changeset patch
# User Maxim Dounin <mdounin@xxxxxxxxxx>
# Date 1315864171 -14400
# Node ID 0786be1906af99a4ba20edeb8b24348ba6a88bef
# Parent  83b74d7020ba5d02b51f9e2e162bca943d47c486
Bugfix: open_file_cache did not update file info on retest.

If file inode was not changed, cached file information was not updated
on retest.  As a result stale information might be cached forever if file
attributes was changed and/or file was extended.

diff --git a/src/core/ngx_open_file_cache.c b/src/core/ngx_open_file_cache.c
--- a/src/core/ngx_open_file_cache.c
+++ b/src/core/ngx_open_file_cache.c
@@ -284,13 +284,11 @@ ngx_open_cached_file(ngx_open_file_cache
 
             if (of->uniq == file->uniq) {
 
-                file->count++;
-
                 if (file->event) {
                     file->use_event = 1;
                 }
 
-                goto renew;
+                goto update;
             }
 
             /* file was changed */
@@ -394,8 +392,6 @@ update:
         }
     }
 
-renew:
-
     file->created = now;
 
 found:
_______________________________________________
nginx-ru mailing list
nginx-ru@xxxxxxxxx
http://mailman.nginx.org/mailman/listinfo/nginx-ru


 




Copyright © Lexa Software, 1996-2009.