about summary refs log tree commit homepage
DateCommit message (Collapse)
2009-12-30Rainbows! 0.90.1 v0.90.1
This release contains minor bugfixes/compatibility improvements for ThreadSpawn, ThreadPool and EventMachine users. Excessive error messages from spurious wakeups using ThreadSpawn/ThreadPool under most platforms are silenced. Only Ruby 1.9 users under Linux were unaffected by this bug. EventMachine users may now use EM::Deferrable objects in responses, vastly improving compatibility with existing async_sinatra apps.
2009-12-30update TODO
EM::Deferrables done, NeverBlock updates...
2009-12-30EventMachine: support deferrables in responses
Some async apps rely on more than just "async.callback" and make full use of Deferrables provided by the EM::Deferrable module. Thanks to James Tucker for bringing this to our attention.
2009-12-29gemspec: clamp down unicorn dependency to < 0.97.0
We may be making some changes to Unicorn 0.97.0 and allow us to share more code.
2009-12-29quiet spurious wakeups for accept() in Thread* models
Under all MRI 1.8, a blocking Socket#accept Ruby method (needs to[1]) translate to a non-blocking accept(2) system call that may wake up threads/processes unnecessarily. Unfortunately, we failed to trap and ignore EAGAIN in those cases. This issue did not affect Ruby 1.9 running under modern Linux kernels where a _blocking_ accept(2) system call is not (easily, at least) susceptible to spurious wakeups. Non-Linux systems running Ruby 1.9 may be affected. [1] - using a blocking accept(2) on a shared socket with green threads is dangerous, as noted in commit ee7fe220ccbc991e1e7cbe982caf48e3303274c7 (and commit 451ca6997b4f298b436605b7f0af75f369320425)
2009-12-24doc: update manpage since Unicorn got new features
working_directory and Worker#user got added over time, so recommending Dir.chdir and Process::UID.change_privilege is bad.
2009-12-22gemspec: loosen Unicorn dependency
Unicorn 0.96.x should be released once Rack 1.1 is out.
2009-12-22Rainbows! 0.90.0 v0.90.0
This release should fix ThreadSpawn green thread blocking issues under MRI 1.8. Excessive socket closing is avoided when using Thread* models with Sunshowers (or clients disconnecting during uploads). There is a new RevFiberSpawn concurrency model which combines Rev with the traditional FiberSpawn model.
2009-12-22avoid setting "rainbows.autochunk" by default
No point in becoming the straw that causes a rehash since hardly anybody uses it.
2009-12-22base: fix constant resolution under 1.8 for 1.8 bugfix
2009-12-22update TODO
2009-12-22common Rainbows.sleep(nr) method
We'll export this across the board to all Rack applications to sleep with. This provides the optimum method of sleeping regardless of the concurrency model you choose. This method is still highly not recommended for pure event-driven models like Rev or EventMachine (but the threaded/fiber/actor-based variants are fine).
2009-12-22cleanup in Rainbows.accept definition
2009-12-22fix README speling fail
2009-12-22fix Ruby 1.8 detection for (possible) green thread fix
Thanks to Ben Sandofsky for the extra set of eyes
2009-12-22bin/rainbows: avoid confusing people with shebang
Or it'll confuse them more... Really, it does not matter what the shebang points to as long as long as setup.rb can deal with it.
2009-12-22README: add RevFiberSpawn
2009-12-22tests: enable RevFiberSpawn for 1.9
2009-12-22doc: update comparison for RevFiberSpawn
2009-12-22new RevFiberSpawn concurrency model
This is like the traditional FiberSpawn, but more scalable (but not necessarily faster) as it can use epoll or kqueue.
2009-12-21possible MRI 1.8 thread fix to avoid blocking accept()
Under MRI 1.8, listen sockets do not appear to have the nonblocking I/O flag on by default, nor does it set the nonblocking I/O flag when calling #accept (but it does when using #accept_nonblock, of course). Normally this is not a problem even when using green threads since MRI will internally select(2) on the file descriptor before attempting a blocking (and immediately successful) accept(2). However, when sharing a listen descriptor across multiple processes, spurious wakeups are likely to occur, causing multiple processes may be woken up when a single client connects. This causes a problem because accept(2)-ing on multiple threads/processes for a single connection causes blocking accepts in multiple processes, leading to stalled green threads. This is not an issue under 1.9 where a blocking accept() call unlocks the GVL to let other threads run.
2009-12-21GNUmakefile: push tgz to Rubyforge
Oops.
2009-12-19Thread*: avoid double close of client socket
TeeInput may explicitly close on client disconnects to avoid error messages being written to the socket, likewise with "hack.io" users.
2009-12-19error: (trivial) remove unnecessary whitespace
2009-12-16join_threads method is exclusive to ThreadPool
2009-12-16cleanup: consolidate write_nonblock error handling
2009-12-16fiber/io: split out wait_readable and wait_writable methods
This makes them easier to override in subclasses.
2009-12-16get rid of the magic EvCore.setup
It gets in the way of Rev/EM-based models that won't use EvCore. It doesn't actually do anything useful except making an extra layer of indirection to follow.
2009-12-13share some constants with Unicorn
Make RACK_DEFAULTS == Unicorn::HttpRequest::DEFAULTS and LOCALHOST == Unicorn::HttpRequest::LOCALHOST No point in having a duplicate objects, and it also makes it easier to share runtime constant modifications between servers.
2009-12-13Rakefile: fix fm_update task
2009-12-13Rainbows! 0.9.0 v0.9.0
This release introduces compatibility with Sunshowers, a library for Web Sockets, see http://rainbows.rubyforge.org/sunshowers for more information. Several small cleanups and fixes. Eric Wong (20): add RevThreadPool to README rev: do not initialize a Rev::Loop in master process rainbows.1: update headers do not log IOError raised during app processing move "async.callback" constant to EvCore larger thread pool default sizes ({Rev,}ThreadPool) ev_core: no need to explicitly close TmpIOs EventMachine: allow usage as a base class NeverBlock: resync with recent our EM-related expansion RevThread*: move warning message to a saner place EventMachineDefer: preliminary (and) broken version TODO: add EM Deferrables RevThread*: remove needless nil assignment README: HTML5 Web Sockets may not be supported, yet... env["hack.io"] for Fiber*, Revactor, Thread* models EventMachineDefer is experimental README: add Sunshowers reference Rakefile: resync with Unicorn doc/comparison: add Web Sockets to comparison README updates
2009-12-13README updates
2009-12-13doc/comparison: add Web Sockets to comparison
2009-12-13Rakefile: resync with Unicorn
* cleanup NEWS.atom.xml feed * add freshmeat update task
2009-12-13README: add Sunshowers reference
2009-12-13EventMachineDefer is experimental
Not enough time or interest at the moment to get this fully working...
2009-12-11env["hack.io"] for Fiber*, Revactor, Thread* models
This exposes a client IO object directly to the underlying application.
2009-12-10README: HTML5 Web Sockets may not be supported, yet...
2009-12-09RevThread*: remove needless nil assignment
We no longer explicitly close @input
2009-12-08TODO: add EM Deferrables
EM.defer and EM Deferrables aren't the same thing, guess we'll have to figure out how to support both.
2009-12-08EventMachineDefer: preliminary (and) broken version
There's a good chunk of tests that fail with this, still. Worse, I haven't been able to figure out what's wrong since it looks like it would involve looking at C++ code...
2009-12-08RevThread*: move warning message to a saner place
Don't expect RevThreadPool to work with Rev <= 0.3.1, either.
2009-12-08NeverBlock: resync with recent our EM-related expansion
The last change to our EventMachine support code broke our (lightly-tested) NeverBlock support badly.
2009-12-06EventMachine: allow usage as a base class
We'll be adding EventMachine-based concurrency models.
2009-12-05ev_core: no need to explicitly close TmpIOs
Just let the GC deal with it
2009-12-05larger thread pool default sizes ({Rev,}ThreadPool)
This matches what EM sets for its built-in thread pool
2009-12-05move "async.callback" constant to EvCore
Rev/Packet-based models may support it in the future
2009-12-04do not log IOError raised during app processing
A client disconnect could possibly trigger IOError on close whereas EOFError does not occur.
2009-12-04rainbows.1: update headers
manpage was blatantly copied from the Unicorn one but headers were never updated.
2009-12-04rev: do not initialize a Rev::Loop in master process
It may make it harder to switch between concurrency models with SIGHUP this way...