about summary refs log tree commit homepage
DateCommit message (Collapse)
2009-10-27Rainbows! 0.4.0 v0.4.0
Basic single-threaded EventMachine support is now included. It supports async_synatra[1] via the "async.callback" Rack environment[2]. For EventMachine, we rely on the updated attach/watch API in EventMachine 0.12.10. As Revactor 0.1.5 is now available, our Revactor support now depends on it as it adds the ability to listen on UNIX domain sockets. For developers/QA folks, the integration tests are completely revamped for easier maintenance when new concurrency models are introduced and should also produce TAP-compliant output. The test suite remains highly parallelizable using GNU make. There are immediate plans to expand support for both Rev and EventMachine to support use with threaded application dispatch. Eric Wong (41): rev: remove Revactor-specific workaround README: change ordering of concurrency model listing tests: more correct HTTP/0.9 test test-lib: avoid stalling due to bad FIFO handling rev: fix static file responses under HTTP/0.9 add news bodies to site NEWS.atom.xml tests: avoid needlessly remaking "rainbows" initial EventMachine support tests: hopefully fix stalls in input trailer tests tests: avoid race condition in reopen logs test tests: prefer "RUBY" to lowercased "ruby" tests: common setup and wait_start functions tests: add a TAP producer shell library tests: port all existing tests to TAP library tests: remove symlinks and small files, use Make t9000: bail if run with an unsupported/pointless model tests: allow "make $model" to run tests for that model rev: spell ECONNABORTED correctly rev/evma: move common code for event models into ev_core ev_core: do not drop deferred bodies on graceful quits eventmachine: get basic tests working rev: do not File.expand_path on result of body.to_path eventmachine 0.12.8 passes all tests tests: make large file memory tests more reliable eventmachine: require EM 0.12.10 update gem dependencies in comments/local.mk.sample rev: enforce Rev::VERSION >= 0.3.0 eventmachine: add async_sinatra support tests: only load Revactor tests under 1.9.1 tests: gracefully exit if EventMachine is not available tests: error out if socat + curl aren't reachable thread*: fix MRI 1.8.6 compatibility local.mk.sample: cleanups and minor reorg eventmachine: remove unnecessary ivar assignment eventmachine: document our support of "async_synatra" doc: Update TODO and README tests: generate all dependencies atomically app_pool: update RDoc test-lib: DWIM handling of temp UNIX sockets revactor: require 0.1.5, remove 0.1.4 workarounds gemspec: bump up Unicorn dep version to 0.93.4 [1] http://github.com/raggi/async_sinatra [2] this is not 100% Rack::Lint compatible, but we'll let it slide since there are already folks depending on the async_sinatra gem
2009-10-27gemspec: bump up Unicorn dep version to 0.93.4
It's easier to support especially for Thread* models which are affected by the BSD stdio weirdness 0.93.4 works around.
2009-10-27revactor: require 0.1.5, remove 0.1.4 workarounds
Also new are added basic HTTP tests for UNIX domain socket handling (for all models, now, of course).
2009-10-27test-lib: DWIM handling of temp UNIX sockets
2009-10-27app_pool: update RDoc
Now that we have EM support (which is basically like Rev), update our docs for that. Also, expand on why Revactor isn't supported just yet...
2009-10-26tests: generate all dependencies atomically
Using a "+" suffix alone was not enough protection since we use evil recursive makes and can't share dependency info with parent makes. While this could be done more efficiently (even with recursive make), but it'd be harder to maintain. So we generate the dependencies later to and sacrifice efficiency on the initial run (but rarely/never again).
2009-10-26doc: Update TODO and README
We have basic EventMachine and :async support.
2009-10-26eventmachine: document our support of "async_synatra"
ref: http://github.com/raggi/async_sinatra
2009-10-26eventmachine: remove unnecessary ivar assignment
It shouldn't be needed, really, favor simpler code here until proven otherwise.
2009-10-26local.mk.sample: cleanups and minor reorg
define the Ruby prefix once to make it easier on Rubies outside of home. Organize gem listings logically by dependency chains.
2009-10-26thread*: fix MRI 1.8.6 compatibility
Array#count is not available until MRI 1.8.7
2009-10-26tests: error out if socat + curl aren't reachable
This makes it easier to figure out why tests are failing for people that forget to read t/README
2009-10-26tests: gracefully exit if EventMachine is not available
2009-10-26tests: only load Revactor tests under 1.9.1
Even though our tests do an extra check, it's faster to not unnecessarily invoke the check in the first place.
2009-10-26eventmachine: add async_sinatra support
This is should be compatible with how the Thin webserver provides async callback support. See http://github.com/raggi/async_sinatra for the details
2009-10-26rev: enforce Rev::VERSION >= 0.3.0
We depend on the ability to create listeners from existing IO objects here.
2009-10-26update gem dependencies in comments/local.mk.sample
Rack 1.0.1 is out and works nicely.
2009-10-26eventmachine: require EM 0.12.10
The EM::attach/EM::watch API changed incompatibly in 0.12.10
2009-10-26tests: make large file memory tests more reliable
Use a bigger random_blob and run GC before checking RSS
2009-10-26eventmachine 0.12.8 passes all tests
This means Rainbows::DevFdBody async responses and large file streaming without slurping. This is only with eventmachine 0.12.8, it looks like 0.12.10 changes the attach/watch API...
2009-10-26rev: do not File.expand_path on result of body.to_path
Rack::Lint requires File::exist? to be true on this, so there's no need to expand the path name to resolve it here.
2009-10-26eventmachine: get basic tests working
log reopens, graceful shutdown, HTTP error responses should all be working now.
2009-10-26ev_core: do not drop deferred bodies on graceful quits
Graceful quit means we finish sending everything we have before exiting. Additionally, only signal quits after we've queued the error response up.
2009-10-26rev/evma: move common code for event models into ev_core
EventMachine and Rev models seem to be able to share a lot of common code, so lets share. We may support Packet in the future, too, and end up with a similar programming model there as well.
2009-10-26rev: spell ECONNABORTED correctly
Odd that Ruby didn't barf on this until now...
2009-10-24tests: allow "make $model" to run tests for that model
This makes it easier to filter functionality by model.
2009-10-24t9000: bail if run with an unsupported/pointless model
We'll probably make AppPool at least not break down and die in the future, but for now just disable it if run directly.
2009-10-24tests: remove symlinks and small files, use Make
This will make it easier to enable and manage tests for new concurrency models.
2009-10-24tests: port all existing tests to TAP library
Everything passes, and "set -e" prevents us from making any stupid mistakes...
2009-10-24tests: add a TAP producer shell library
This will eventually allow our test output to be consumed by any TAP[1]-compatible consumers. Like the rest of our shell scripts, this only relies on POSIX behavior and has no bashisms. mktemp(1) is a requirement only if using the verbose output in this library. This library aims to be useful outside of Rainbows! [1]: Test Anything Protocol: http://testanything.org/
2009-10-24tests: common setup and wait_start functions
Instead of sleeping and waiting for a PID file to appear, just use a named-pipe and block on it in the test scripts since we know Unicorn won't attempt to fork until sockets are already bound.
2009-10-24tests: prefer "RUBY" to lowercased "ruby"
It's more common form for externally-visible/modifiable variables in Makefiles and shell scripts.
2009-10-24tests: avoid race condition in reopen logs test
Ensure our workers are capable of processing requests before we can continue to setup signal handlers. The later "kill -USR1" signal may fire in our test script before the workers have a chance to setup the handlers. So by the time we receive a positive response, we _know_ signal handlers are ready.
2009-10-22tests: hopefully fix stalls in input trailer tests
utee is line-oriented on _read_, so avoid messing with that for this. Additionally, spawn our FIFO cats before we start writing gobs of data out since it could cause the writers to block otherwise.
2009-10-22initial EventMachine support
Working for simple GET requests, completely untested otherwise and most definitely not able to handle async/Comet-style requests yet, either. No tests for this are enabled. This could share a lot of code with the existing Rev model.
2009-10-20tests: avoid needlessly remaking "rainbows"
The cmp test was completely unnecessary and pointless.
2009-10-20add news bodies to site NEWS.atom.xml
While we're at it, remove trailing whitespace for author names, too.
2009-10-19rev: fix static file responses under HTTP/0.9
Since HTTP/0.9 responses have no headers to write, the on_write_complete handler we rely on never got triggered, leading to additional reads to never get queued up. Additionally, we need to explicitly detect and close client sockets if we've written the last response body since HTTP/0.9 clients never know when it's time to close a connection.
2009-10-19test-lib: avoid stalling due to bad FIFO handling
Don't try to clobber FIFOs at startup since sometimes traps may not fire. And while we're at it, avoid trying to unlink them twice.
2009-10-19tests: more correct HTTP/0.9 test
The extra CRLF is not needed for HTTP/0.9
2009-10-19README: change ordering of concurrency model listing
Revactor was our first take on the "rainbows" branch of Unicorn and probably less confusing to people that may have tracked that branch. ThreadPool was used in the "gossamer" branch of Unicorn before, but since this project is named Rainbows!, it's less logical. I'll freely admit to having some personal bias here and not being a fan of threads (and especially not pthreads!).
2009-10-19rev: remove Revactor-specific workaround
This was blindly copied and pasted from the Revactor code.
2009-10-19Rainbows! 0.3.0 v0.3.0
The major feature of this release is the new DeferredResponse middleware for the Rev-based concurrency model. It should be transparently compatible with non-Rev models, as well. As a pleasant side effect, this change also allows large files to be streamed to the client with Rev as the socket becomes writable instead of slurping the entire file into an IO::Buffer first. Bugfixes to graceful shutdowns support for all concurrency models. The Rev-based model also gets a working heartbeat mechanism (oops!) and fixed HTTP/1.1 pipelining support. Eric Wong (37): app_pool: note it being currently broken with Revactor Revactor tests can sleep more easily tests: sleep.ru handles "Expect: 100-continue" Fix graceful shutdown handling of Thread* models harder DRY setting of rack.multithread test-lib: dbgcat adds headers with key name use timeout correctly to join threads on SIGQUIT Rev: simplification to error handling tests: sleep.ru slurps rack.input stream refactor graceful shutdowns again, harder tests: introduce require_for_model function tests: add unbuffered tee(1)-like helper tests: rack.input trailer tests for all models tests: fix issues with non-portable shell constructs tests: fix random_blob dependency tests: factor out a common parser error "library" tests: DRY setting of the "model" environment var tests: DRY Ruby requires based on model test-lib: quiet down pipefail error message tests: DRY require tests for Rev/Revactor rev: handle fully-buffered, pipelined requests rev: avoid stack overflow through pipelining tests: common basic HTTP tests for all models tests: rack.input hammer concurrency testing tests: for log reopening for all concurrency models http_response: filter out X-Rainbows-* headers rev: fix heartbeat timeouts revactor: switch to a 1 second heartbeat rev: async response bodies with DevFdResponse middleware tests: more reliable error checking tests: DWIM FIFO creation tests: predictable and simpler tempfile management rev: AsyncResponse => DeferredResponse API cleanup rev: update documentation for this model TUNING: update documentation notes TODO: update with new items local.mk.sample: sync with BDFL's version
2009-10-19local.mk.sample: sync with BDFL's version
2009-10-19TODO: update with new items
2009-10-19TUNING: update documentation notes
2009-10-19rev: update documentation for this model
2009-10-19rev: AsyncResponse => DeferredResponse API cleanup
The "async" moniker wasn't appropriate since this API also handles static files without slurping, so "deferred" is a more appropriate term (even if I have trouble speling words with double conssonants in them). The DeferredResponse.write method now emulates the HttpResponse.write method for consistency.
2009-10-18tests: predictable and simpler tempfile management
Instead of using completely random names, we'll use predictable ones since we already depend on them for exit codes and such. This drops our ability to run the same test for the same version of Ruby in the same working tree, but that's an unlikely scenario. While we're at it, avoid remove tempfiles if a test failed. This should make debugging easier.
2009-10-18tests: DWIM FIFO creation
If we're going to name a variable "fifo", it'll be for descriptive reasons...