about summary refs log tree commit homepage
path: root/lib
DateCommit message (Collapse)
2010-12-03Rainbows! 2.0.1 - upload pipelining fixes v2.0.1
For HTTP clients living on the edge and pipelining uploads, we now fully support pipelined requests (as long as the application consumes each request in its entirety).
2010-12-03fix pipelining of requests with bodies
All synchronous models have this fixed in unicorn 3.0.1, so only Rev and EventMachine-based concurrency models require code changes.
2010-12-02ev_core: refactor and split cap_input out
Hopefully it makes more sense now and is easier to digest for new hackers.
2010-12-01ev_core: split out prepare_request_body
We may have other uses for this in the future...
2010-11-20Rainbows! 2.0.0 - minority rules! v2.0.0
This release is targeted at the minority of web applications that deal heavily with uploads. Thanks to Unicorn 3.x, we now support HTTP keepalive for requests with bodies as long as the application consumes them. Unicorn 3.x also allows disabling the rewindability requirement of "rack.input" (in violation of the Rack 1.x spec). The global client_body_max_size may also be applied per-endpoint using the Rainbows::MaxBody middleware described in: http://rainbows.rubyforge.org/Rainbows/MaxBody.html
2010-11-19revactor: fix braindamaged commit/coding style
Oops, last commit was rushed
2010-11-19simpler keepalive check for synchronous models
Unicorn 3.x includes HttpParser#next? which will reset the parser for keepalive requests without extra steps.
2010-11-19max_body: rewrite wrappers to be safer
To avoid denial-of-service attacks, the wrappers need to intercept requests *before* they hit the memory allocator, so we need to reimplement the read(all) and gets cases to use smaller buffers whenever the application does not specify one.
2010-11-19max_body: do not enable for RevThread* models
Those already use CapInput, just like the rest of the evented Rainbows! world.
2010-11-19upgrade to Kgio 2.x and Unicorn 3.x
Kgio 2.0.0 has a superior API and less likely to conflict or blow up with other applications. Unicorn 3.x requires Kgio 2.x, too.
2010-11-16reimplement client_max_body_size handlers
This allows the client_max_body_size implementation to not rely on Unicorn::TeeInput internals, allowing it to be used with Unicorn::StreamInput (or any other (nearly) Rack::Lint-compatible input object).
2010-11-05avoid Errno::EAGAIN, harder
Errno::EAGAIN is still a problem under Ruby 1.9.2, so try harder to avoid it and use kgio methods. Even when 1.9.3 is available, kgio will still be faster as exceptions are slower than normal return values.
2010-11-04avoid Kgio::WaitReadable/WaitWritable constants
The underlying symbolic names are easier to type and recommended.
2010-11-04process_client: fix attempted keepalive on HTTP 0.9
The long-term goal is to make the Unicorn API more terse when handling keepalive.
2010-10-28Rainbows! 1.0.0 - internal cleanups v1.0.0
This release is merely a milestone in our evolving internal API. Use of kgio may result in performance improvements under Ruby 1.9.2 with non-blocking I/O-intensive workloads. The only bugfix is that SIGHUP reloads restores defaults on unset settings. A similar fix is included in Unicorn 2.0.0 as well.
2010-10-28rev+event_machine: small cleanups with new parser API
These allow for small reductions in the amount of variables we have to manage, more changes coming with later Unicorns.
2010-10-28HUP reload restores defaults on unset settings
For consistency, changed settings are reset back to their default values if they are removed or commented out from the config file.
2010-10-26Rainbows! 1.0.0pre1 - kinder, gentler I/O v1.0.0pre1
Mostly internal changes for kgio (and Unicorn) integration. There should be no (supported) user-visible changes from Rainbows! 0.97.0. kgio should improve performance for concurrency models that use non-blocking I/O internally, especially under Ruby 1.9.2
2010-10-26doc: RDoc updates
Once again we avoid documenting internals on the public website and use code comments for other developers.
2010-10-25reduce dependency on IO#write_nonblock
kgio_trywrite is superior if it is available.
2010-10-23http_request: remove this (sub)class
It does not appear to be needed, for now, since the parser and Unicorn::HttpRequest are one and the same.
2010-10-22unindent most files
This simplifies and disambiguates most constant resolution issues as well as lowering our identation level. Hopefully this makes code easier to understand.
2010-10-22dev_fd_response: do not wrap for Fiber-aware IOs
Applications may use wait_readable-aware methods directly to work with Rainbows!
2010-10-22fiber_{pool,spawn}: unindent
Reduces confusion for constant resolution/scoping rules and lowers LoC.
2010-10-22fiber_pool: no need for old Fiber::IO
Rainbows::Client takes care of the I/O wait/read-ability for us already.
2010-10-22code shuffling for kgio
Despite the large number of changes, most of it is code movement here.
2010-10-21unicorn 2.x updates + kgio
We get basic internal API changes from Unicorn, code simplifications coming next.
2010-10-21http_server: more descriptive error for debugging
Sometimes we have stupid syntax or constant resolution errors in our code.
2010-09-28start using kgio library
It removes the burden of byte slicing and setting file descriptor flags. In some cases, we can remove unnecessary peeraddr calls, too.
2010-09-17event_machine: remove unnecessary "return"
Noise is bad.
2010-08-28Rainbows! 0.97.0 v0.97.0
We now depend on Unicorn 1.1.3 to avoid race conditions during log cycling. This bug mainly affected folks using Rainbows! as a multithreaded static file server. "keepalive_timeout 0" now works as documented for all backends to completely disable keepalive. This was previously broken under EventMachine, Rev, and Revactor. There is a new Rainbows::ThreadTimeout Rack middleware which gives soft timeouts to apps running on multithreaded backends. There are several bugfixes for proxying IO objects and the usual round of small code cleanups and documentation updates. See the commits in git for all the details.
2010-08-28"keepalive_timeout 0" (really) disables keepalive
Although this behavior is mentioned on the documentation, this was broken under EventMachine, Rev*, and Revactor. Furthermore, we set the "Connection: close" header to allow the client to optimize is handling of non-keepalive connections.
2010-08-28rev_thread_*: fix IO proxy failures w/pipelining
Proxying IO objects with threaded Rev concurrency models occasionally failed with pipelined requests (t0034). By deferring the on_write_complete callback until the next "tick" (similar to what we do in Rev::Client#write), we prevent clobbering responses during pipelining.
2010-08-27rainbows/rev/core: tiny cleanup
Remove an unused constant.
2010-08-27rainbows/rev/master: unindent
No constant resolution changes, avoid redefining modules needlessly since this is not meant to be used standalone.
2010-08-26split out accept() callers to acceptor module
Trying to avoid adding singleton methods since it's too easily accessible by the public and not needed by the general public. This also allows us (or just Zbatery) to more easily add support systems without FD_CLOEXEC or fcntl, and also to optimize away a fcntl call for systems that inherit FD_CLOEXEC.
2010-08-19add Rainbows::ThreadTimeout middleware
This allows for per-dispatch timeouts similar to (but not exactly) the way Mongrel (1.1.x) implemented them with threads.
2010-08-17avoid EBADF with certain middlewares when proxying
First off we use an FD_MAP to avoid creating redundant IO objects which map to the same FD. When that doesn't work, we'll fall back to trapping Errno::EBADF and IOError where appropriate.
2010-08-17rev/client: fix redundant close of client sockets
Our keep-alive timeout mechanism does not need to kick in and redundantly close when a client. Fortunately there is no danger of redundantly closing the same numeric file descriptors (and perhaps causing difficult-to-track-down errors).
2010-08-13dev_fd_response: weaken /dev/fd check for compatibility
/dev/fd/0 may not be stat()-able on some systems after dropping permissions from root to a regular user. So just check for "/dev/fd" which seems to work on RHEL 2.6.18 kernels. This also allow us to be used independently of Unicorn in case somebody ever feels the compelling need to /close/ stdin.
2010-08-10doc: it's always "Rainbows!" with a bang(!)
That is the official name of the project and we will not lead people to believe differently.
2010-08-03Rainbows! 0.96.0 - range support v0.96.0
For concurrency models that use sendfile or IO.copy_stream, HTTP Range requests are honored when serving static files. Due to the lack of known use cases, multipart range responses are not supported. When serving static files with sendfile and proxying pipe/socket bodies, responses bodies are always properly closed and we have more test cases for dealing with prematurely disconnecting clients. Concurrency model specific changes: EventMachine, NeverBlock - * keepalive is now supported when proxying pipes/sockets * pipelining works properly when using EM::FileStreamer * these remain the only concurrency models _without_ Range support (EM::FileStreamer doesn't support ranges) Rev, RevThreadSpawn, RevThreadPool - * keepalive is now supported when proxying pipes/sockets * pipelining works properly when using sendfile RevThreadPool - * no longer supported under 1.8, it pegs the CPU at 100%. Use RevThreadSpawn (or any other concurrency model) if you're on 1.8, or better yet, switch to 1.9. Revactor - * proxying pipes/sockets with DevFdResponse is much faster thanks to a new Actor-aware IO wrapper (used transparently with DevFdResponse) * sendfile support added, along with Range responses FiberSpawn, FiberPool, RevFiberSpawn - * Range responses supported when using sendfile ThreadPool, ThreadSpawn, WriterThreadPool, WriterThreadSpawn - * Range responses supported when using sendfile or IO.copy_stream. See the full git logs for a list of all changes.
2010-08-03doc: hide internal Response416 error constant
It's an internal implementation detail and not for user consumption.
2010-08-02event_machine: protect IO#close from EBADF
EventMachine may close the underlying file descriptor on us if there are unrecoverable errors during write. So IO#closed? is a pointless check because EM does not invalidate the underlying file descriptor.
2010-08-02revactor: implement sendfile and range support
Due to the synchronous nature of Revactor, we can be certain sendfile won't overstep the userspace output buffering done by Rev.
2010-07-29fiber/io: reuse buffer in Rainbows::Fiber::IO#each
This makes life easier for the lazy GC when proxying large responses (and also improves memory locality).
2010-07-29revactor: Actor-aware dev_fd_response proxying
Proxying regular Ruby IO objects while Revactor is in use is highly suboptimal, so proxy it with an Actor-aware wrapper for better scheduling.
2010-07-28event_machine: better handling of staggered pipelines
Since TCP sockets stream, HTTP requests do not come in at well-defined boundaries and it's possible for pipelined requests to come in in a staggered form. We need to ensure our receive_data callback doesn't fire any actions at all while responding with a deferrable @body. We still need to be careful about buffering, since EM does not appear to allow temporarily disabling read events (without pausing writes), so we shutdown the read end of the socket if it reaches a maximum header size limit.
2010-07-27event_machine: prevent double close of client socket
Not sure where this is happening, but this can trigger Errno::EBADF under heavy load.
2010-07-27rev/client: workaround close ordering issue when proxying
When proxying pipes/sockets, it's possible for the Rev::IO#write to fail and close our connection. In that case we do not want our client to continue with the on_write_complete callback.