about summary refs log tree commit homepage
path: root/lib/unicorn
DateCommit message (Collapse)
2009-07-09unicorn 0.8.2 v0.8.2
2009-07-08Re-add support for non-portable socket options
Now that we support tunnelling arbitrary protocols over HTTP as well as "100 Continue" responses, TCP_NODELAY actually becomes useful to us. TCP_NODELAY is actually reasonably portable nowadays; even. While we're adding non-portable options, TCP_CORK/TCP_NOPUSH can be enabled, too. Unlike some other servers, these can't be disabled explicitly/intelligently to force a flush, however. However, these may still improve performance with "normal" HTTP applications (Mongrel has always had TCP_CORK enabled in Linux). While we're adding OS-specific features, we might as well support TCP_DEFER_ACCEPT in Linux and FreeBSD the "httpready" accept filter to prevent abuse. These options can all be enabled on a per-listener basis. (cherry picked from commit 563d03f649ef31d2aec3505cbbed1e015493b8fc)
2009-05-28unicorn 0.8.1 v0.8.1
2009-05-28Make our HttpRequest object a global constant
This should be faster/cheaper than using an instance variable since it's accessed in a critical code path. Unicorn was never designed to be reentrant or thread-safe at all, either.
2009-05-26unicorn 0.8.0 v0.8.0
2009-05-25Switch to autoload to defer requires
This should prevent Rack from being required too early on so "-I" being passed through the unicorn command-line can modify $LOAD_PATH for Rack
2009-05-22Merge commit 'v0.7.1'
* commit 'v0.7.1': unicorn 0.7.1 Conflicts: lib/unicorn/const.rb
2009-05-22unicorn 0.7.1 v0.7.1
2009-05-22http_response: allow string status codes
Rack::Lint says they just have to work when to_i is called on the status, so that's what we'll do.
2009-05-22Enforce minimum timeout at 3 seconds
2 seconds is still prone to race conditions under high load. We're intentionally less accurate than we could be in order to reduce syscall and method dispatch overhead.
2009-05-22configurator: fix rdoc formatting
2009-05-22Preserve 1.9 IO encodings in reopen_logs
Ensure we preserve both internal and external encodings when reopening logs.
2009-05-22Safer timeout handling and test case
Timeouts of less than 2 seconds are unsafe due to the lack of subsecond resolution in most POSIX filesystems. This is the trade-off for using a low-complexity solution for timeouts. Since this type of timeout is a last resort; 2 seconds is not entirely unreasonable IMNSHO. Additionally, timing out too aggressively can put us in a fork loop and slow down the system. Of course, the default is 60 seconds and most people do not bother to change it.
2009-05-22app/old_rails: correctly log errors in output
"out" was an invalid variable in that context...
2009-05-22app/exec_cgi: GC prevention
Don't allow newly created IO objects to get GC'ed and subsequently close(2)-ed. We're not reopening the {$std,STD}{in,out,err} variables since those can't be trusted to have fileno 1, 2 and 3 respectively.
2009-05-13privatize constants only used by old_rails/static
Unicorn proper no longer needs these constants, so don't bother with them.
2009-05-13http_response: allow string status codes
Rack::Lint says they just have to work when to_i is called on the status, so that's what we'll do.
2009-05-13Require Rack for HTTP Status codes
Preventing needless duplication since Rack already has these codes for us. Also, put the status codes in HttpResponse since nothing else needs (or should need) them.
2009-05-11exec_cgi: don't assume the body#each consumer is a socket
If we're using middleware that pushes the body into an array, bad things will happen if we're clobbering the string for each iteration of body#each.
2009-05-11HttpRequest::DEF_PARAMS => HttpRequest::DEFAULTS
Give this a more palatable name and unfreeze it, allowing users to modify it more easily.
2009-05-10Enforce minimum timeout at 3 seconds
2 seconds is still prone to race conditions under high load. We're intentionally less accurate than we could be in order to reduce syscall and method dispatch overhead.
2009-05-10app/exec_cgi: use explicit buffers for read/sysread
This reduces garbage generation to improve performance. Rack 1.0 allows InputWrapper to read with an explicit buffer.
2009-05-10http_request: use Rack::InputWrapper-compatible methods
This allows alternative I/O implementations to be easier to use with Unicorn...
2009-05-10configurator: fix rdoc formatting
2009-05-04Preserve 1.9 IO encodings in reopen_logs
Ensure we preserve both internal and external encodings when reopening logs.
2009-05-04Inline and remove the HttpRequest#reset method
These potentially leaves an open file handle around until the next request hits the process, but this makes the common case faster.
2009-05-03Safer timeout handling and test case
Timeouts of less than 2 seconds are unsafe due to the lack of subsecond resolution in most POSIX filesystems. This is the trade-off for using a low-complexity solution for timeouts. Since this type of timeout is a last resort; 2 seconds is not entirely unreasonable IMNSHO. Additionally, timing out too aggressively can put us in a fork loop and slow down the system. Of course, the default is 60 seconds and most people do not bother to change it.
2009-05-03http_request: switch to readpartial over sysread
readpartial is actually as low-level as sysread is, except it's less likely to throw exceptions and won't change the blocking/non-blocking status of a file descriptor (we explicitly enable blocking I/O)
2009-05-03http_response: luserspace buffering is barely faster
Simpler code on our end can be just a tick faster because syscalls are still not as cheap as normal functions and this still manages to play well with our lack of keepalive support as closing the socket will flush it immediately.
2009-05-03http_request: avoid StringIO.new for GET/HEAD requests
Since the vast majority of web traffic is GET/HEAD requests without bodies, avoid creating a StringIO object for every single request that comes in.
2009-05-03app/old_rails: correctly log errors in output
"out" was an invalid variable in that context...
2009-05-02app/exec_cgi: GC prevention
Don't allow newly created IO objects to get GC'ed and subsequently close(2)-ed. We're not reopening the {$std,STD}{in,out,err} variables since those can't be trusted to have fileno 1, 2 and 3 respectively.
2009-04-25unicorn 0.7.0 v0.7.0
2009-04-25Rack 1.0.0 compatibility
Keep in mind that it's plenty possible to use Unicorn as a library without using Rack itself. Most of the unit tests do not depend on Rack, for example.
2009-04-24configurator: "listen" directive more nginx-like
The following specifications to bind port 8080 on all interfaces are now accepted in the configuration file: listen "8080" # (with quotes) listen 8080 # (without quotes)
2009-04-24unicorn 0.6.0 v0.6.0
2009-04-23http_response: minor performance gains
Avoid creating garbage every time we lookup the status code along with the message. Also, we can use global const arrays for a little extra performance because we only write one-at-a time Looking at MRI 1.8, Array#join with an empty string argument is slightly better because it skips an append for every iteration.
2009-04-23http_response: just barely faster
2009-04-23http_request: micro optimizations
This leads to a ~10% improvement in test/benchmark/request.rb Some of these changes will need to be reworked for multi-threaded servers (Mongrel); but Unicorn will always be single-threaded.
2009-04-23Get rid of UNICORN_TMP_BASE constant
It was just a waste of space and would've caused line wrapping. This reinstates the "unicorn" prefix when we create tempfiles, too.
2009-04-23Fix data corruption with small uploads via browsers
StringIO.new(partial_body) does not update the offset for new writes. So instead create the StringIO object and then syswrite to it and try to follow the same code path used by large uploads which use Tempfiles.
2009-04-21Cleanup some unnecessary requires
2009-04-21rename socket.rb => socket_helper.rb
We no longer have anything outside of SocketHelper module in that file, so just give it a more obvious name.
2009-04-21Stop extending core classes
This removes the #unicorn_peeraddr methods from TCPSocket and UNIXSocket core classes. Instead, just move that logic into the only place it needs to be used in HttpRequest.
2009-04-21http_response: small speedup by eliminating loop
This avoids creating yet another binding. socket.syswrite() should really only be called once since we use blocking sockets, but just in case, we emulate a do+while loop with begin+while
2009-04-21const: remove unused QUERY_STRING constant
2009-04-21HttpParser: set QUERY_STRING for Rack-compliance
2009-04-21http_request: freeze modifiable elements
Otherwise applications can change them behind our back and affect subsequent requests.
2009-04-21Move absolute URI parsing into HTTP parser
It's part of the HTTP/1.1 (rfc2616), so we might as well handle it in there and set PATH_INFO while we're at it. Also, make "OPTIONS *" test not fail Rack::Lint
2009-04-16unicorn 0.5.3 v0.5.3