about summary refs log tree commit homepage
DateCommit message (Collapse)
2013-04-24test_isolate: update raindrops to 0.11.0
raindrops 0.11.0 was released several days ago and contains minor improvements + fixes.
2013-03-01epoll+xepoll: clarify intent of these concurrency options
Via private communication, I learned of a user using XEpoll when he should not have been.
2013-02-27Rainbows! 4.5.0 - hijacking support v4.5.0
This release adds hijacking support for Rack 1.5.x users. See Rack documentation for more information about hijacking. Lin Jen-Shin also provided the -N/--no-default-middleware option. Minor packaging cleanups and new HACKING document. There are also some corner-case bugfixes for *Epoll* users (sleepy_penguin, these bugs do not affect EM or Cool.io users) and test suite portability improvements.
2013-02-26manpage: update middleware-related documentation
-N/--no-default-middleware needs a corresponding manpage entry. Additionally, the Rack::Chunked/ContentLength middleware comment is out-of-date as of unicorn v4.1.0
2013-02-26epoll/*: remove user-space array as active queue
This prevents pathological starvation cases where the user-space ready-list can be repopulated infinitely. With EPOLLONESHOT, epoll itself may be used for this task (at a slightly higher cost) by enabling read/write checks, as the epoll ready-list preserves event ordering when used with EPOLLONESHOT.
2013-02-26xepoll_thread_*/client: EPOLLONESHOT implies EPOLLET
No need to specify both flags for epoll (confirmed by reading fs/eventpoll.c in the Linux kernel).
2013-02-26doc: add HACKING document
Thanks to Alex Wolfe for noticing.
2013-02-26tests: update checks for Ruby 2.0.0
EventMachine/NeverBlock currently do not build on Ruby 2.0.0
2013-02-26bump unicorn dependency to 4.6.2+ for Ruby 2.0.0
This ensures we're compatible with the latest stable Ruby version.
2013-02-26gemspec: set licenses= attribute
Old versions of RubyGems which could not handle this attribute are likely no longer in use.
2013-02-16GIT-VERSION-GEN: rewrite to manage RAINBOWS_VERSION const
This DRYs up versioning and makes packages easier to distribute.
2013-02-11hijacking support for Rack 1.5.x users
This requires Rack 1.5.x and unicorn 4.6.0 for hijacking support. Older versions of Rack continue to work fine, but we must use unicorn 4.6.0 features to support this.
2013-02-04tests: "wc -l" portability for *BSDs
On FreeBSD 9.0, "wc -l" emits leading whitespace, so filter it through tr -d '[:space:]' to eliminate it.
2013-02-01tests: bump version dependencies for Isolate
Most of these test dependencies may be safely bumped.
2013-02-01tests: "wc -c" portability for *BSDs
On FreeBSD 9.0, "wc -c" emits leading whitespace, so filter it through tr -d '[:space:]' to eliminate it.
2013-02-01tests: replace non-portable "date +%s" with ruby equivalent
"date +%s" is not in POSIX (it is in GNU, and at least FreeBSD 9.0, possibly earlier). The Ruby equivalent should be sufficiently portable between different Ruby versions. This change was automated via: perl -i -p -e 's/date \+%s/unix_time/' t/*.sh
2013-02-01tests: remove utee and use tee(1) instead
POSIX already stipulates tee(1) must be unbuffered. I think my decision to use utee was due to my being misled by a bug in older curl where -N did not work as advertised (but --no-buffer did).
2013-01-29Add -N or --no-default-middleware option.
This would prevent Unicorn (Rainbows) from adding default middleware, as if RACK_ENV were always none. (not development nor deployment) This is implemented in Unicorn, so we only need to update the option parser here. Discussion thread on Unicorn mailing list: http://rubyforge.org/pipermail/mongrel-unicorn/2013-January/001675.html Signed-off-by: Eric Wong <normalperson@yhbt.net>
2013-01-24epoll: ensure closing of pipelined clients if required
on_read normally relies on the close checking in on_readable, but on_deferred_write_complete may be called from on_writable instead (bypassing the close check of on_readable). This affects both Epoll and XEpoll users, but only if they were sending responses via body#to_path and triggering on_deferred_write_complete. While we're at it, favor non-recursive want_more instead of calling on_readable recursively in ev_write_responses to prevent stack growth.
2013-01-18Rainbows! 4.4.3 - bugfixes for EventMachine users v4.4.3
This release fixes two EventMachine bugfixes from Lin Jen-Shin and Mark J. Titorenko. There are also some minor cleanups. Lin Jen-Shin (1): event_machine: avoid close on deferred response Mark J. Titorenko (1): event_machine: join reactor_thread if it is already running Eric Wong (2): event_machine: cleanup confusing assignment t/GNUmakefile: cleanup test dependencies
2013-01-17t/GNUmakefile: cleanup test dependencies
The missing random_blob dependency was causing the following to fail on a fresh clone: make -C t ThreadPool.t0005-large-file-response.sh
2013-01-11event_machine: join reactor_thread if it is already running
...rather than falling through worker_loop Prior to the application of this patch, if an EventMachine reactor_thread has already been started elsewhere before the worker_loop is entered, the worker_loop exits as a second call to EM.run does not block the current thread. This patch causes the worker_loop thread to join the reactor_thread if it is running. [ew: commit message formatting] Signed-off-by: Eric Wong <normalperson@yhbt.net>
2012-12-19event_machine: cleanup confusing assignment
2012-12-18event_machine: avoid close on deferred response
close_connection_after_writing only if not deferred, as in cool.io Deferred responses may buffer more data down the line, so keep the connection alive if we have a deferred response body. [ew: clear @deferred when we really want to quit, updated commit message] Acked-by: Eric Wong <normalperson@yhbt.net>
2012-12-06Rainbows! 4.4.2 - EventMachine async.callback fix v4.4.2
One bugfix allows stream(:keep_open) in Sinatra to work properly. Thanks to W. Andrew Loe III for the informative bug report and reproducible test case. ref: http://mid.gmane.org/CA+-9oNd1EFqsniPkkPTwu5opTCinbM7-2KHoXov7+y3LE4s4Tg@mail.gmail.com
2012-12-05test_isolate: bump eventmachine and sinatra deps
Always ensuring we work with the latest versions.
2012-12-05event_machine: properly defer body.close for async
Calling body.close in the normal write_response() code path is incorrect, and only worked out of sheer luck with Cramp and async_sinata. This change allows stream(:keep_open) in Sinatra to work properly. Thanks to W. Andrew Loe III for the informative bug report and reproducible test case. ref: http://mid.gmane.org/CA+-9oNd1EFqsniPkkPTwu5opTCinbM7-2KHoXov7+y3LE4s4Tg@mail.gmail.com
2012-08-31Rainbows! 4.4.1 - a minor bugfix for Fiber users v4.4.1
Fiber-based concurrency options avoids negative sleep intervals. Thanks to Lin Jen-Shin for pointing this out.
2012-08-27fiber/base: avoid negative sleep interval
Also clarify the code while we're at it. Thanks to Lin Jen-Shin for pointing this out. ref: http://mid.gmane.org/CAA2_N1unOXb7Z4Jr8oKoSLu266O9Ko4o=oWzAcMA1w3=9X74KA@mail.gmail.com
2012-08-18Rakefile: freshmeat.net -> freecode.com
freecode.com now requires HTTPS, too.
2012-08-18Rainbows! 4.4.0 - minor improvements v4.4.0
For epoll/Cool.io-based concurrency models, shutdown() is now used to timeout keepalive clients to avoid race conditions. Minor documentation improvements.
2012-07-19thread_timeout: document additional caveats
Again, for the one thousandth time, timing out threads is very tricky business :<
2012-07-01test_isolate: bump raindrops dependency
As usual, test with the latest released version to avoid surprises.
2012-07-01coolio+xepoll_thread*: use shutdown() for keepalive timeout
Triggering Errno::EBADF is tricky in multithreaded situations due to possible race conditions and yet-to-be discovered bugs. shutdown(2) is also safe against apps the fork() internally but do not execve(2) nor set FD_CLOEXEC. n.b. calling fork() after pthreads are spawned may not be safe on all platforms w.r.t. malloc, but /is/ the case for glibc on GNU/Linux. Follow-up-to: commit a5b987619f4b793203f6a50e424fe98c5b0794ba
2012-06-18epoll*: favor shutdown(2) for keepalive timeout
Triggering Errno::EBADF is tricky in multithreaded situations due to possible race conditions and yet-to-be discovered bugs. shutdown(2) is also safe against apps the fork() internally but do not execve(2) nor set FD_CLOEXEC. n.b. calling fork() after pthreads are spawned may not be safe on all platforms w.r.t. malloc, but /is/ the case for glibc on GNU/Linux.
2012-05-09fiber_pool: take Fibers from larger pools faster
Array#pop can be significantly faster than Array#shift on large arrays (especially since we push into the Array). This is because Array#shift needs to shift all elements in the array, and Array#pop only needs to shorten the array by one element. The Fiber stack may also be hotter in CPU caches when we choose the most-frequently used stack.
2012-05-09test_isolate: update deps for EM tests
async_sinatra and rack-fiber_pool had new versions since we last updated.
2012-05-09test_isolate: bump unicorn and kgio versions for testing
Users will pull the latest upstream, ensure things keep working.
2012-05-09stream_response_epoll: fix for unicorn 4.3.x
unicorn 4.3.x now calls shutdown() explicitly on the socket, so we can't just rely on a dup()-ed FD to keep a socket around.
2012-05-08tests: require sleepy_penguin 3.1.0 or later
We'll be making the XEpollThreadPool users depend on this, too.
2012-04-12doc: some spelling fixes
Found with rdoc-spellcheck
2012-02-23t/test_isolate: update test dependencies
At least for the gems I'm most familiar with...
2011-10-12t0501: fix ambiguous shell construct for capture + subshells
Starting with "$((" can be ambiguous and confused for shell arithmetic.
2011-10-12http_server: fix log message if using Base (no concurrency)
Telling the user worker_connections=50 when using the Base concurrency model is misleading.
2011-09-02Rainbows! 4.3.1 - small bugfix v4.3.1
This release fixes a potential reentrancy deadlock when using the default logger from the Ruby standard library.
2011-08-30avoid potential Logger deadlock in SIGQUIT and SIGUSR1
If any combination of SIGQUIT and SIGUSR1 are sent to a Rainbows! worker in a /very/ short period of time, the Mutex used by the default Logger implementation may deadlock since Mutex synchronization is not reentrant-safe. Users of alternative logger implementations (or monkey-patched ones) are possibly not affected. Users of the logger_mp_safe.rb monkey-patch distributed[1] with unicorn are not affected. [1] http://unicorn.bogomips.org/examples/logger_mp_safe.rb
2011-08-20Rainbows! 4.3.0 - pull in changes from unicorn 4.1.0 v4.3.0
The deprecated Rainbows::HttpResponse class is finally gone thanks to Pratik Naik. Logging of errors is more consistent with the changes in unicorn 4.1.0. There are also minor documentation updates. See the unicorn 4.1.0 release notes for more details: http://bogomips.org/unicorn.git/tag/?id=v4.1.0
2011-08-20bump unicorn dependency version
We want the stricter parser the error log filtering in unicorn 4.1.0
2011-08-20TODO: remove splice(2) item
Rainbows! 3.3.0 added the copy_stream Configurator directive
2011-08-20rdoc: cleanup and stop depending on :enddoc:
It doesn't seem to work at the top of the file...