about summary refs log tree commit homepage
DateCommit message (Collapse)
2009-04-24unicorn 0.6.0 v0.6.0
2009-04-24cleanup: avoid duped self-pipe init/replacement logic
We do this in both the worker and master processes, so avoid repeating ourselves.
2009-04-24SIGTT{IN,OU} {in,de}crements worker_processes
This allows dynamic tuning of the worker_processes count without having to restart existing ones. This also allows worker_processes to be set to a low initial amount in the config file for low-traffic deployments/upgrades and then scaled up as the old processes are killed off. Remove the proposed reexec_worker_processes from TODO since this is far more flexible and powerful. This will allow not-yet-existent third-party monitoring tools to dynamically change and scale worker processes according to site load without increasing the complexity of Unicorn itself.
2009-04-24Allow std{err,out}_path to be changed via HUP
Seems like a good idea to be able to relocate log files on a config reload.
2009-04-24minor cleanups and save a few variables
Saying to the world that I may have OCD...
2009-04-24Avoid getppid() if serving heavy traffic
As long as our speculative accept()s are succeeding, then avoid checking for master process death and keep processing requests. This allows us to save some syscalls under extremely heavy traffic spikes.
2009-04-24Fixup reference to a dead variable
Oops, this was broken in another yak-shaving commit: 9206bb5e54a0837e394e8b1c1a96e27ebaf44e77
2009-04-23Describe the global constants we use.
Avoid scaring the thread-safety-first crowd (as much :)
2009-04-23make SELF_PIPE is a global constant
Since it has to work inside signal handlers, there's no point in making it a per-object instance variable given the price of an instance variable in MRI...
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-23test_socket_helper: disable GC for this test
Otherwise the GC will unlink sockets. A better solution (purgatory?) may be needed...
2009-04-23Make LISTENERS and WORKERS global constants, too
Instance variables are expensive and we'd be encouraging something like a thread-safe mentality for using ivars when dealing with things that are global to the entire process.
2009-04-23IO_PURGATORY should be a global constant
Since file descriptors are only private to a process, do not treat them as Object-specific.
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-23Merge commit 'v0.5.4'
* commit 'v0.5.4': unicorn 0.5.4 Fix data corruption with small uploads via browsers Conflicts: lib/unicorn/http_request.rb
2009-04-23test_exec: cleanup stale socket on exit
2009-04-23unicorn_rails: avoid nesting lambdas
I've experienced occasional problems with this so it's probably best to stay on the safe side.
2009-04-23GNUmakefile: mark test_upload as a slow test
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-23unicorn 0.5.4 v0.5.4
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-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 GNUmakefile and fix dependencies
Installation dependencies weren't being resolved correctly (since "install-test") wasn't .PHONY. Removed the "install-test" target entirely since it should never be invoked by hand. On the other hand, "ragel" can be useful to invoke by hand so add a target for that.
2009-04-21Cleanup some unnecessary requires
2009-04-21test: empty port test for absolute URIs
2009-04-21http11: support underscores in URI hostnames
They aren't common, but apparently there exist URLs with them, so we'll support them.
2009-04-21Remove @start_ctx instance variable
It's pointless to support multiple instances of it since this is per-process. However, the constant itself is now modifiable if anybody needs to tweak things for reexecution using a before_exec hook.
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-21http11: rfc2616 handling of absolute URIs
We now parse the scheme, host and port from Absolute URIs and ignore them if the equivalents are specified in the other headers.
2009-04-21http11: cleanup some CPP macros
Use the "do {} while (0)" idiom to wrap the macros we can wrap to avoid having to worry about semi-colons when using them. Unfortunately DEF_MAX_LENGTH can't be wrapped with "do {} while (0)". But we do now correctly constify the strings DEF_MAX_LENGTH creates and also make them static to reduce visibility.
2009-04-21http11: make parser obey HTTP_HOST with empty port
This means "Host: foo-bar:" (trailing colon) will assume server_port is 80, not a blank string.
2009-04-21http11: minor cleanups in return types
While we're at it, replace a bunch of zero assignments with a memset to avoid forgetting a struct element in case we change the struct.
2009-04-21replace DATA_GET macro with a function
I don't see the point of using a macro here as it's never called in a hot path. It's a very minor size reduction in the binary, but also makes the rest of the code less noisy/screamy.
2009-04-21http11: remove callbacks from structure
There's no point in having redefinable callbacks if they're always going to be pointed to the same function. This reduces the size of the http_parser structure to half its original size. This change may actually make more sense in servers Mongrel/Thin than Unicorn since Unicorn only has one parser per-process while other servers can have hundreds or even thousands.
2009-04-21http11: formatting cleanups
2009-04-21const: remove unused QUERY_STRING constant
2009-04-21GNUmakefile: mark test_signals as a slow test
It's fast under 1.8, but 1.9 performance is really terrible, so run the tests in parallel.
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-21http11: remove unused variables/elements
We don't do anything special with content length in the parser other than forcing the headers without the "HTTP_" prefix for Rack-compliance.
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-21GNUmakefile: kill trailing whitespace after ragel
I have a nice hook in git that complains when trailing whitespace is present.
2009-04-21GNUmakefile: Fix ragel dependencies
2009-04-21http11: cleanup #includes and whitespace
Remove ctype.h and stdio.h #includes. We avoid ctype.h functions since it is locale-dependent and HTTP itself is locale-independent. Also, regenerate http11_parser.c against Ragel 6.4
2009-04-16test_upload: ensure StringIO objects are binary
Sockets always return binary encoded data, so when StringIO.new(string) is called, that StringIO object inherits the encoding of the initial string it was created with. And yes, Ruby 1.9 still makes me seriously uncomfortable with I/O manipulation since the encoding layer does things behind my back. UNIX is (and should always be) just a bag of bytes! Signed-off-by: Eric Wong <normalperson@yhbt.net>
2009-04-16unicorn 0.5.3 v0.5.3
2009-04-16Small garbage reduction in HttpResponse
Avoid creating new string objects and then discarding them right away by stuffing non-constant but always-present headers into the initial output.