about summary refs log tree commit homepage
path: root/lib
DateCommit message (Collapse)
2010-07-19rev + em: more easily allow Content-Length in pipe responses
If a response proxying a pipe (or socket) includes a Content-Length, do not attempt to outsmart the application and just use the given Content-Length. This helps avoid exposing applications to weird internals such as env["rainbows.autochunk"] and X-Rainbows-* response headers.
2010-07-19event_machine: ResponseChunkPipe style cleanup
No need to double up on begin blocks since we know @client.write won't raise exceptions @io.read_nonblock does. Also prefer @client.write to @client.send_data since it looks more in line with other IO interfaces.
2010-07-19event_machine: garbage avoidance for pipe responses
Since the EM loop runs entirely in one thread, we can get away with using a single buffer across all pipe/socket responses.
2010-07-19event_machine: avoid race in unchunked fast pipe responses
Using EM.enable_proxy with EM.attach seems to cause EM::Connection#receive_data callbacks to be fired before the proxy has a chance to act, leading the first few chunks of data being lost in the default receive_data handler. Instead just rely on EM.watch like the chunked pipe.
2010-07-19remove unnecessary header munging for static file serving
Rack::File already sets the Content-Length header for us, so there's no reason to ever set this ourselves.
2010-07-19dev_fd_response: remove needless begin block
2010-07-19no need to pass 'rb' as File.open flags
IO#read always returns a binary string buffer if passed an explicit length to read, and we always do that. This is a small garbage reduction.
2010-07-19sendfile middleware: various style cleanups
Favor constants over literal strings for a small garbage reduction.
2010-07-19refactor response handling for each concurrency model
This will give each concurrency model more control over particular code paths and serving static files.
2010-07-11Rainbows! v0.95.1 - depend on newer Unicorn v0.95.1
Eric Wong (3): test_isolate: document why we test with Rack 1.1.0 doc: make RDoc skip private methods bump Unicorn dependency to 1.1.1
2010-07-10Rainbows! 0.95.0 - sendfile() support! v0.95.0
In addition to the 1.9-only IO.copy_stream, the new sendfile 1.0.0 gem may optionally be used with most concurrency models (even under 1.8). See http://rainbows.rubyforge.org/Static_Files.html for more info Other changes: * 1.9 encoding bugfix for (Rev)FiberSpawn and FiberPool * fixed potential rack.input corruption with Revactor * ThreadPool graceful shutdown no longer blocks until timeout * optional ServerToken middleware for to display Server: header * Dependencies bumped to Rack 1.1+ and Unicorn 1.1.0+ * numerous internal cleanups, small bugfixes and speedups * more concise website oriented at users
2010-07-10doc: avoid documenting internals on RDoc website
Since we suck at building websites, we just rely on RDoc as a website builder. And since Rainbows! is an application server (and not a programming library), our internal API should be of little interest to end users. Anybody interested in Rainbows! (or any other project) internals should be reading the source.
2010-07-09event_machine: rename response_write => em_write_response
For consistency with rev_write_response (and the existing "write_response").
2010-07-09http_response: allow Cramp 0.11 to send proper WS headers
Cramp needs to override our normal header sending for (old) WebSockets connections.
2010-07-08restore Rainbows::HttpResponse.write for Cramp
Cramp monkey patches Rainbows internals for WebSockets support and we forgot about it. Add a new integration test to ensure this continues to work in the future (and force us to update the test for newer Cramp).
2010-07-08bump TCP_DEFER_ACCEPT default value
Unicorn 1.1.0 lets us change this default, and we need it higher to avoid wasting workers against stupidly (or maliciously) slow clients.
2010-07-08stream_file: split this out from rev/sendfile
Other concurrency models will eventually be able to use it, too.
2010-07-06byte_slice: String#[range] is faster than String#slice!(range)
rb_str_slice_bang() allocates a new string internally and calls rb_str_aref_m() AND rb_str_aset_m(), too. String#[] just calls rb_str_aref_m() directly, so it's a much quicker code path. Also, "[]" methods dispatch faster under 1.9, too.
2010-07-06fix string slicing under 1.9 after short writes
Fortunately this only affects the hardly-used FiberSpawn and FiberPool concurrency models, and also unreleased revisions of Rev. 1.9 encoding is tricky to handle right when doing I/O in Ruby...
2010-07-06rev/client: more aggressive non-blocking write
non-blocking write() may cause kernel buffers to be allocated behind the scenes, so retry the write() even if it's short because it may succeed the next time around.
2010-07-06cleanup error handling for aborted downloads
We shouldn't ever spew errors to the stderr/logger on client disconnects (ECONNRESET/EPIPE/etc...).
2010-07-06rev: avoid unnecessary seeking when using sendfile
There's no need to ever change the underlying offset of a file descriptor when using sendfile(), so don't. This allows us to avoid contention in the kernel/filesystem and eventually reuse the same filesystem file descriptor for serving multiple requests.
2010-07-05rev: properly enable post-fork sendfile() usage
We need to load sendfile-using parts after the "sendfile" library is loaded.
2010-07-04refactor response body handling for sendfile(2)
This hopefully allows the "sendfile" gem to be required anywhere in the Rainbows!/Unicorn config file, and not have to be required via RUBYOPT or the '-r' command-line switch. We also modularize HttpResponse and avoids singleton methods in the response path. This (hopefully) makes it easier for individual concurrency models to share code and override individual methods.
2010-07-04rev/client: s/sendfile/rev_sendfile/
Avoid confusing people with an overloaded method name
2010-07-04revactor: properly zero buffer on zero reads
While we're at it, fix a comment, too.
2010-07-04thread_pool: force threads to wakeup on shutdown
We may use a blocking accept() loop if there is only a single listener. In that case threads may not be able to exit if a SIGQUIT is received, so force them to run when joining.
2010-06-30rev: add sendfile support
This should improve performance for static file responses.
2010-06-30dev_fd_response: avoid redeclaring Rainbows module
slowly cleaning up the generated RDoc
2010-06-30deferred_response: remove needless include
2010-06-28add preliminary sendfile (1.0.0) gem support
This still needs work and lots of cleanup, but the basics are there. The sendfile 1.0.0 RubyGem is now safe to use under MRI 1.8, and is superior to current (1.9.2-preview3) versions of IO.copy_stream for static files in that it supports more platforms and doesn't truncate large files on 32-bit platforms.
2010-06-28fiber/base: reuse process_client logic in base
This fleshes out Rainbows::Fiber::IO with a few more methods for people using it.
2010-06-28(style) prefer "until" instead of "while !"
2010-06-28revactor: constant/namespace cleanups
2010-06-28base: constant/namespace cleanup
2010-06-27http_response: make this a module, not a class
No point in using a class here, there's no object
2010-06-27http_response: (nitpick) simplify conditional logic
2010-06-27http_response: cleanup documentation
No point in documenting our internals and overwhelming users.
2010-06-24sendfile: update docs for Rack::Sendfile
Rack::Contrib::Sendfile moved into Rack in December 2009.
2010-06-21add Rainbows::Configurator module
Make it easier to link to the Rainbows! configuration documentation without anchors. This also reduces the amount of code we spew into Unicorn::Configurator.
2010-06-21rev: documentation update for #write method
2010-06-21dev_fd_response: disable under Rubinius for now
We can't use it effectively in Rubinius yet, and it's broken due to the issue described in: http://github.com/evanphx/rubinius/issues/379
2010-06-21dev_fd_response: cleanup and reorganization
There's no need to #dup the middleware object, just use a custom Rainbows::DevFdResponse::Body object.
2010-06-21rev: restore Ruby 1.8.6 compatibility
2010-06-18rev: cleanup write method
I was originally experimenting with setsockopt to increase the kernel buffer sizes in a loop, but the benefits were negligible at best.
2010-06-18rev: avoid extraneous data copy for small responses
For small responses that can fit inside a kernel socket buffer, copying that data into an IO::Buffer object is a waste of precious memory bandwidth.
2010-06-18fiber/{base,io}: use arrays instead of hashes for r/w accounting
This gives a tiny performance improvement to the FiberSpawn and FiberPool concurrency models.
2010-06-18fiber/base: more accurate sleep timeout
Not that many people will actually call Rainbows.sleep outside of tests...
2010-06-18avoid needless HeaderHash#to_hash calls
HeaderHash objects can only be used as headers without violating Rack::Lint in Rack 1.1.0 or later.
2010-06-18prefer Array#[] lookup to Array#first/Array#last
Array#[] lookups are slightly faster under both rbx and 1.9, and easier to read.