about summary refs log tree commit homepage
AgeCommit message (Collapse)AuthorFilesLines
2011-06-27Rainbows! 4.0.0 - MOAR concurrency for MOAR COARS v4.0.0Eric Wong2-2/+2
Rainbows! now scales to more than 1024 worker processes without special privileges. To enable this, Rainbows! now depends on Unicorn 4.x and thus raindrops[1]. client_max_header_size directive is added to limit per-client memory usage in headers. An experimental StreamResponseEpoll concurrency option now exists to buffer outgoing responses without any thread-safe dependencies. Unlike the rest of Rainbows! which works fine without nginx, this concurrency option is /only/ supported behind nginx, even more strongly so than Unicorn itself. non-nginx LAN clients are NOT supported for this. This relies on the sleepy_penguin[2] RubyGem (and Linux). There are some minor bug fixes and cleanups all around. See "git log v3.4.0.." for details. [1] http://raindrops.bogomips.org/ [2] http://bogomips.org/sleepy_penguin/
2011-06-27bump dependencies (kgio, unicorn, raindrops)Eric Wong2-3/+4
We now rely on Unicorn 4.0.0. We'll use the latest kgio and raindrops versions anyways.
2011-06-27remove unused arg in Rainbows::Response.setupEric Wong3-3/+3
It hasn't been used in a while, but we kept it for Zbatery version compatibility.
2011-06-22epoll/client: properly close on all pipe responsesEric Wong1-1/+1
Some pipe responses can trigger the on_deferred_write_complete method without ever re-running the event loop. This appears to be the result of the occasional t0050 failures.
2011-06-22t0050: improve diagnostics for this testEric Wong1-1/+3
This test seems to fail sometimes with Epoll and XEpoll...
2011-06-22t/test_isolate: remove unneeded commentEric Wong1-1/+1
That's been around forever, and we think Rubinius supports that...
2011-06-22dev_fd_response: enable under RubiniusEric Wong1-10/+0
Untested, but it should work nowadays...
2011-06-22Unicorn 4.x resync for tickerEric Wong2-4/+3
This removes the extra per-process file descriptor and replaces it with Raindrops.
2011-06-22t/test_isolate: drop Unicorn test dependency for nowEric Wong1-1/+0
It's already a runtime dependency
2011-06-15remove IO_PURGATORY dependencyEric Wong1-3/+0
We no longer need to put all listeners away since Unicorn uses kgio.
2011-06-11configurator: add client_max_header_size directiveEric Wong3-0/+107
Lowering this will lower worst-case memory usage and mitigate some denial-of-service attacks. This should be larger than client_header_buffer_size. The default value is carried over from Mongrel and Unicorn.
2011-06-11doc: remove docs for Rainbows::Fiber::* APIsEric Wong5-6/+6
Do not encourage their use, really.
2011-06-10stream_response_epoll: update documentationEric Wong1-4/+7
Yes, this concurrency model is our strangest yet.
2011-06-11remove Rainbows.run methodEric Wong2-7/+1
We can get away with a single stack frame reduction. Unicorn itself has more stack reductions, but Rainbows! is further behind in this area.
2011-06-10ev_core: do not autochunk HTTP/1.0 (and 0.9) responsesEric Wong3-16/+40
Do not assume middlewares/applications are stupid and blindly add chunking to responses (we have precedence set by Rack::Chunked).
2011-06-10ev_core: use add_parse for trailers, tooEric Wong1-1/+1
HttpParser#trailers and #headers are actually the same method, so we'll just continue on.
2011-06-10gemspec: add GPLv3 to commented-out licenses sectionEric Wong1-1/+2
Reduces inconsistency.
2011-06-10use HttpParser#add_parse API in Unicorn 3.7.0Eric Wong3-8/+4
It's easier-to-use in some cases.
2011-06-09tests: more fixes for StreamResponseEpollEric Wong2-6/+5
2011-06-09response: sendfile_range fis for Rack::File in rack 1.3.0Eric Wong1-1/+9
Rack::File already sets Content-Range, so don't repeat work and reparse Content-Length.
2011-06-09t/t9002: use Rack::HeadEric Wong1-0/+1
We send HEAD requests and expect body-less responses. Noticed while running a newer rack version after re-isolating.
2011-06-09update various RubyGem dependenciesEric Wong2-5/+5
Gotta keep using the latest and greatest.
2011-06-09stream_response_epoll: our most "special" concurrency option yetEric Wong31-0/+160
This doesn't use Rainbows::Base so we have no keepalive support at all. This could eventually be an option for streaming applications.
2011-06-09move reopen_worker_logs to baseEric Wong2-8/+7
We may not always use Rainbows! :Base since we don't want keepalive/immediate log reopening in some cases.
2011-06-06doc: remove --sanitize-html for pandocEric Wong1-1/+1
pandoc 1.8 no longer supports this, and we don't need it anyways since we only generate documentation from our repository.
2011-05-31xepoll_thread_*: update docs for Linux 3Eric Wong2-2/+2
Linux 3.0.0 is just around the corner and of course newer than 2.6.
2011-05-30test-lib: enable splice(2) for Linux 3.xEric Wong1-0/+3
The latest Linux series is now 3.x, not 2.6.x
2011-05-21Rainbows 3.4.0 - minor updates and fixes v3.4.0Eric Wong1-1/+1
SIGQUIT (graceful shutdown) now drops idle keepalive clients for the concurrency models where maintaining an idle client is relatively inexpensive: Coolio, CoolioThreadPool, CoolioThreadSpawn, Epoll, EventMachine, XEpoll, XEpollThreadPool, XEpollThreadSpawn. Kgio.autopush now works properly for all multi-threaded concurrency models (if you're using :tcp_nopush).
2011-05-21pkg.mk: update to the latest versionEric Wong1-2/+2
* locale fix for grep
2011-05-21use and recommend sleepy_penguin 3.0.1Eric Wong5-5/+5
It's better under 1.9.3 (sleepy_penguin 3.0.1 was bogus)
2011-05-21use and recommend sleepy_penguin 3.0.0Eric Wong5-5/+5
It's better under 1.9.3
2011-05-21t0044: increase test reliabilityEric Wong1-35/+36
2011-05-21try_defer: enable documentationEric Wong2-12/+15
It should hopefully give this more visibility even though it's an internal feature.
2011-05-21xepoll_thread_pool/client: improve autopush supportEric Wong1-1/+1
We need to trigger a recv() to uncork the response. This won't affect fairness (much) since all recv()s are non-blocking and a successful header parse will put us in the back of the queue.
2011-05-20.gitignore: add tags/TAGS filesEric Wong1-0/+2
Some folks use them.
2011-05-20add tests for Kgio autopush on LinuxEric Wong2-0/+122
We can support it fully for a subset of concurrency models where we have full control over buffering and HTTP/1.1 keepalive clients.
2011-05-20add test for SIGQUIT disconnectEric Wong1-0/+59
This will only be supported for certain concurency models, but it's probably good enough.
2011-05-20event_machine: disconnect idle clients at on SIGQUITEric Wong1-4/+4
Since it's cheap to maintain keepalive clients with EM, we need a way of disconnecting them in a timely fashion on rare SIGQUIT events.
2011-05-20client: use kgio_write across the boardEric Wong1-0/+2
This should enable Kgio "autopush" support for ThreadSpawn, ThreadPool, XEpollThreadSpawn, and XEpollThreadPool. (still needs tests)
2011-05-20coolio* + *epoll*: drop keepalive clients on SIGQUITEric Wong6-4/+12
In concurrency models long keepalive times are cheap (and thus more likely to be used), this allows Rainbows! to gracefully shut down more quickly.
2011-05-20epoll/xepoll: more consistent client implementationsEric Wong6-35/+42
There's less logic in the server this way and easier to potentially share code this way.
2011-05-17doc: recommend io_splice 4.1.1 or laterEric Wong2-2/+4
io_splice 4.1.1 works around issues with socket buffers filling up pipe buffers on blocking splice. See http://lkml.org/lkml/2009/1/13/478 for a better explanation.
2011-05-16Rainbows! 3.3.0 - doc improvements and more v3.3.0Eric Wong2-2/+2
* improved documentation all around, suggestions/comments to further improve documentation is greatly welcome at: rainbows-talk@rubyforge.org * added GPLv3 option to the license (now (Ruby|GPLv2|GPLv3), though Unicorn is still (Ruby|GPLv2) for now) * added client_header_buffer_size config directive (default 1K) * small default header buffer size (16K => 1K) to reduce memory usage, Rails apps with cookie sessions may want to increase this (~2K) * all concurrency models default to 50 connections per process * all concurrency models with a secondary :pool_size parameter also default to 50 (threads/fibers/whatever) * RLIMIT_NOFILE and RLIMIT_NPROC are automatically increased if needed * Rainbows::ThreadTimeout middleware rewritten, still not recommended, lazy people should be using Unicorn anyways :) * Several experimental Linux-only edge-triggered epoll options: XEpollThreadSpawn, XEpollThreadPool, XEpoll, and Epoll. The latter two were in previous releases but never announced. These require the "sleepy_penguin", "raindrops", and "sendfile" RubyGems === Deprecations * Rainbows::Fiber::IO* APIs all deprecated, Rainbows! will avoid having any concurrency model-specific APIs in the future and also avoid introducing new APIs for applications. * Fiber-based concurrency models are no longer recommended, they're too fragile for most apps, use at your own risk (they'll continue to be supported, however). Linux NPTL + Ruby 1.9 is pretty lightweight and will be even lighter in Ruby 1.9.3 if you're careful with stack usage in your C extensions.
2011-05-16writer_thread_*: fix sendfile detection under Ruby 1.8Eric Wong2-2/+2
I can't wait until I stop supporting Ruby 1.8
2011-05-16document RubyGem requirementsEric Wong9-2/+39
Hopefully makes things easier to try out.
2011-05-16doc: cleanup rdoc for Rainbows moduleEric Wong1-12/+10
The only supported method is Rainbows.sleep in here
2011-05-16use :pool_size for RLIMIT_NPROC with thread pool modelsEric Wong1-0/+2
Only needed for Ruby 1.9
2011-05-16more reliable shutdown for epoll concurrency modelsEric Wong5-0/+10
Just close the epoll descriptor, since the sleepy_penguin epoll_wait wrapper may not return EINTR in the future.
2011-05-16tests: unify checks for copy_stream and threaded app dispatchEric Wong6-55/+36
This makes things easier to maintain as we add more concurrency options.
2011-05-16add "copy_stream" config directiveEric Wong9-13/+194
This allows using IO::Splice.copy_stream from the "io_splice" RubyGem on recent Linux systems. This also allows users to disable copy_stream usage entirely and use traditional response_body.each calls which are compatible with all Rack servers (to workaround bugs in IO.copy_stream under 1.9.2-p180).