about summary refs log tree commit homepage
DateCommit message (Collapse)
2011-05-21Rainbows 3.4.0 - minor updates and fixes v3.4.0
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 version
* locale fix for grep
2011-05-21use and recommend sleepy_penguin 3.0.1
It's better under 1.9.3 (sleepy_penguin 3.0.1 was bogus)
2011-05-21use and recommend sleepy_penguin 3.0.0
It's better under 1.9.3
2011-05-21t0044: increase test reliability
2011-05-21try_defer: enable documentation
It should hopefully give this more visibility even though it's an internal feature.
2011-05-21xepoll_thread_pool/client: improve autopush support
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 files
Some folks use them.
2011-05-20add tests for Kgio autopush on Linux
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 disconnect
This will only be supported for certain concurency models, but it's probably good enough.
2011-05-20event_machine: disconnect idle clients at on SIGQUIT
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 board
This should enable Kgio "autopush" support for ThreadSpawn, ThreadPool, XEpollThreadSpawn, and XEpollThreadPool. (still needs tests)
2011-05-20coolio* + *epoll*: drop keepalive clients on SIGQUIT
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 implementations
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 later
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.0
* 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.8
I can't wait until I stop supporting Ruby 1.8
2011-05-16document RubyGem requirements
Hopefully makes things easier to try out.
2011-05-16doc: cleanup rdoc for Rainbows module
The only supported method is Rainbows.sleep in here
2011-05-16use :pool_size for RLIMIT_NPROC with thread pool models
Only needed for Ruby 1.9
2011-05-16more reliable shutdown for epoll concurrency models
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 dispatch
This makes things easier to maintain as we add more concurrency options.
2011-05-16add "copy_stream" config directive
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).
2011-05-10configurator: update user-facing documentation
Finally, we have all methods in configurator and it's much easier to document!
2011-05-10max_body: documentation updates
It can't be used as middleware for fully-buffering concurrency models.
2011-05-10LICENSE: add GPLv3 to license terms
GPLv2 and Ruby-specific terms remain intact, but this means we can be combined and redistributed with GPLv3-only software (once Unicorn has GPLv3 added to its license).
2011-05-10configurator: move validation logic over
There's actually no reason we can't have these methods in Rainbows::Configurator where it's easier to document nowadays.
2011-05-09doc: better document :pool_size options
CoolioThreadPool has had it supported forever, but only NeverBlock had it documented.
2011-05-09TODO: misc updates
Some things were never going to get done due to lack of interest from users.
2011-05-09doc: update comparison and README
Clearly users need to know about more options
2011-05-09xepoll_thread_*: add rdoc for users
It's good to describe what they're useful for.
2011-05-09xepoll_thread_spawn/client: remove rdoc
It's an internal implementation detail.
2011-05-09max_body: rdoc updates
speling ficks and less confusing #initialize documentation
2011-05-09xepoll_thread_pool: add optional :pool_size argument
We're now able to configure the number of threads independently of worker_connections.
2011-05-09split out pool_size module
coolio_thread_pool, neverblock both use it, and xepoll_thread_pool will support it next, too.
2011-05-09t0041: less confusing skip message
Just the test name is irrelevant
2011-05-09add XEpollThreadPool concurrency option
This is probably friendlier on server resources in the worst case than XEpollThreadSpawn but may perform worse in the client client-visible way, too.
2011-05-08Revert "epoll: fixes for Ruby 1.9.3dev"
Fixed in kgio 2.4.0 now This reverts commit a1168e7d2bfe182896f139d051ef099616fd1646.
2011-05-08join_threads: simplify thread stoppage check
No need for a string comparison
2011-05-08require kgio 2.4.0
kgio 2.4.0 has some 1.9.3dev fixes which affect us
2011-05-08epoll_wait: flags argument is unused
We only poll for one event (EPOLLIN/EPOLLOUT) at a time, so there's no need to actually check since they're too rare.
2011-05-08xepoll: cleanup acceptor logic
worker_yield is safer than setting a threshold with multiple acceptors when thread limits are hit. Also, avoid sleep + Thread#run since it's potentially racy if threads are extremely unfairly scheduled. Same things applied to xepoll_thread_spawn.
2011-05-08xepoll_thread_spawn: rework acceptor logic
Infinite sleep is too dangerous due to possible race conditions, so use worker_yield which is safer and cheaper in the general case. We can also avoid sleeping on new threads by only spawning when the client module is included.
2011-05-08xepoll_thread_spawn/client: close returns nil
Otherwise pipeline_ready can false positive on us
2011-05-08xepoll_thread_spawn: inline needless method
shorter line and 3 lines of code killed!
2011-05-08process_client: fix pipeline_ready arity
Not that it's actually used, right now.
2011-05-06remove unnecessary variable assignments
2011-05-06test_isolate: update to latest raindrops and unicorn
Newer versions should be better
2011-05-06ensure some requires get loaded in master
More sharing, faster startups, and most importantly, better error reporting if some things are missing.
2011-05-05http_server: XEpollThreadSpawn sets RLIMIT_NPROC
It *can* have as many threads as it does idle connections.