about summary refs log tree commit homepage
path: root/lib/rainbows
DateCommit message (Collapse)
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-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-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-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-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-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-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-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-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-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.
2011-05-03Rainbows! defaults more DRY
We won't forget to reset defaults on SIGHUP anymore.
2011-05-03s/max_bytes/client_max_body_size/ for consistency
Too confusing otherwise...
2011-05-03add client_header_buffer_size tuning parameter
We're changing our default to 1K buffers to save memory. This should reduce memory usage of idle clients and lower pressure on the MRI GC. Rails applications using session cookies (the default) may want to up this to 2K or more.
2011-05-02http_server: default all options to 50 connections
pavinging the way for changing MODEL_WORKER_CONNECTIONS
2011-04-30lower header buffer sizes for synchronous models
HTTP headers are usually smaller than 4K, so 16K was way too much for most users and often caused unnecessary GC runs. EventMachine and Coolio models can all share the same initial read buffer, so it's less urgent that they get this lowered for now...
2011-04-30xepoll_thread_spawn: lower memory usage
This one actually has a realistic chance of running hundreds/thousands of clients, and 32K per-client is a huge amount.
2011-04-29epoll: fix timeout
Epoll#wait and epoll_wait(2) timeouts are in milliseconds, not seconds. This affects xepoll, too.
2011-04-29xepoll_thread_spawn: fix race condition with acceptors
Noticed under 1.8.7
2011-04-29xepoll_thread_spawn: initial implementation
Whee! This is going to be awesome.
2011-04-28document epoll and xepoll
They're probably ready for general use in a very limited capacity...
2011-04-26doc: stop recommending Fiber* stuff
Too much NIH and too fragile.
2011-04-26revactor: remove documentation for internal methods
2011-04-26revactor: do not recommend, upstream is dormant
2011-04-26stream_file: hide internals
No need to expose things that don't need exposing.