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