nginx patches for Igor Sysoev

Михаил Монашёв postmaster at softsearch.ru
Sat Jul 19 13:01:08 MSD 2008


Привет.

Томаш (Tomash Brechko <tomash.brechko at gmail.com>)прислал разработанные
им  и  немного  Максимом  Дуниным  патчи для более корректной работы с
несколькими  мемкашедами  со  сжатыми ключиками. nginx с этими патчами
работает  на  моих серверах уже более полугода. Эти патчи совместимы с
перловым модулем Cache::Memcached::Fast. Если в конфиге менять флажок,
отвечающий  за  сжатие, то сжатые ключики можно отдавать даже если они
записаны  в  мемкашед другими клиентами. У разных клиентов этот флажок
задаётся  в  разных  битах.  Также можно менять алгоритм распределения
ключиков  по  мемкашедам:  namespace  может  или  учитываться,  или не
учитываться  при  расчёте  мемкашед-бэкенда. Также реализована ketama.
Вот что написал Томаш:

----------------------------------------------------------------------

Присоединены патчи для Игоря Сысоева. Все патчи против 0.7.6. В каждом
патче есть комментарий, что именно он делает. Также дай ему ссылки:

  http://openhack.ru/nginx-patched/wiki/MemcachedGzip
  http://openhack.ru/nginx-patched/wiki/MemcachedHash

Ссылки  могут  помочь  понять, что именно мы реализовали. Я сам уже не
нестолько  хорошо разбираюсь в этом коде, чтобы отвечать на вопросы "а
почему  здесь  так?".  Поэтому  пусть  старается  разобраться  сам  по
возможности.  В  принципе  memcached_hash  можно  включить в релиз как
есть,  и  делегировать  баги  мне  (если  будут). Так что сложный патч
только  для  gunzip.  Но  там  тоже  все не так трагично: в код сжатия
добавлено  расжатие,  по флажку r->gunzip. Разобраться можно. Там есть
еще небольшой фикс с таким commit message (в отдельный патч не выделял
сейчас):

    Move (ctx->zstream.avail_out == 0) test after (rc == Z_STREAM_END) test.
    
    (ctx->zstream.avail_out == 0) doesn't necessary means that zlib will
    output more data.  First we test (ctx->flush == Z_SYNC_FLUSH).  If true
    we flush current buffer, and there will be one more with the trailer.
    If false we test (rc == Z_STREAM_END) and act accordingly.  Only if this
    test is false (ctx->zstream.avail_out == 0) would mean that there'd be
    more output from zlib.
    
    You may test the effect of this patch by setting buffer size with
    gzip_buffers to some small value, say 1 byte.  The bug may be triggered
    with any buffer size actually when the last chunk of compressed data
    will fill the whole buffer.  Note that during 1-byte test a warning may
    be given that zero size buffer was in the write queue.  This happens
    when gzip flushes the last buffer, enqueues the next empty buffer
    (of 1 byte), but 8-byte header doesn't fit there, so this empty buffer
    is passed down as-is.


В общем можешь все это Игорю переслать.  И удачи ему ;).


-- 
   Tomash Brechko
 
-------------- next part --------------
An embedded and charset-unspecified text was scrubbed...
Name: 0001-Enhance-next-upstream-logic.patch
URL: <http://nginx.org/pipermail/nginx-ru/attachments/20080719/ded5b5a7/attachment.ksh>
-------------- next part --------------
An embedded and charset-unspecified text was scrubbed...
Name: 0002-Gunzip-the-reply-if-ngx_http_request_t-gunzip-is-se.patch
URL: <http://nginx.org/pipermail/nginx-ru/attachments/20080719/ded5b5a7/attachment-0001.ksh>
-------------- next part --------------
An embedded and charset-unspecified text was scrubbed...
Name: 0003-Add-memcached_gzip_flag-config-parameter-and-memcach.patch
URL: <http://nginx.org/pipermail/nginx-ru/attachments/20080719/ded5b5a7/attachment-0002.ksh>
-------------- next part --------------
An embedded and charset-unspecified text was scrubbed...
Name: 0004-Add-memcached_hash-module.patch
URL: <http://nginx.org/pipermail/nginx-ru/attachments/20080719/ded5b5a7/attachment-0003.ksh>


More information about the nginx-ru mailing list