about summary refs log tree commit homepage
DateCommit message (Collapse)
2009-10-14Rev: general module documentation + caveats
2009-10-14rack.multithread is only true for Thread* models
Enabling thread-safe or thread-aware code paths in applications may even be dangerous in some cases and cause deadlocks in code that otherwise does not expect threads. This is especially true of the Revactor case where being a "drop-in" replacement for IO routines is dangerous if a mutex is held while an Actor performs a "blocking" I/O operation. Basically start to assume that anybody writing an app using Rev or Revactor already takes Rev/Revactor concurrency into account and won't need the rack.multithread flag set to do special things.
2009-10-14local.mk.sample: use ksh93 as default $(SHELL)
It's faster than bash and the newer versions I have fixed a bug where the all-important pipefail option got dropped in subshells.
2009-10-14preliminary Rev support
There is no TeeInput (streaming request body) support, yet, as that does not seem fun nor easy to do (or even possible without using Threads or Fibers or something to save/restore the stack...)
2009-10-12README: alter reply conventions for the mailing list
Mailman is now configured to munge Reply-To: to point back to the mailing list. This might make things easier for folks on low traffic mailing lists like ours.
2009-10-12vs Unicorn: fix copy+paste errors and grammar fail
2009-10-12vs Unicorn: fix wording to be consistent with diagrams
2009-10-12vs Unicorn: use diagrams for concurrency models
A picture is worth a thousand words, even in ASCII art.
2009-10-12tests: add reopen logs test for revactor
Just in case Rev/Revactor does weird things when faced with signals.
2009-10-12DEPLOY: update with notes on DoS potential
2009-10-12tests: check for common exceptions with "Error"
And fix existing tests that use "grep -v" since that is almost always true...
2009-10-11SIGINT/SIGTERM shuts down instantly in workers
Just like in Unicorn...
2009-10-11Fix graceful shutdowns for threaded models
They were completely broken in the refactoring :x
2009-10-11revactor: fix graceful shutdown timeouts
2009-10-11cleanup thread models, threads no longer time out
The process-based heartbeat continues, but we no longer time threads out just because a client is idle for any reason (for now).
2009-10-11revactor: continue fchmod beat in graceful exit
Avoid overloading the "alive" variable here and wakeup less frequently as well to do the fchmod.
2009-10-11revactor: graceful death of keepalive clients
We'll finish processing the current request and set the "Connection: close" header if possible.
2009-10-11No need to be halving timeout, already done for us
In Unicorn by HttpServer#init_worker_process
2009-10-11revactor: cleanups and remove redundancy
2009-10-11revactor: break on EBADF in the accepting actors
Once our listeners get closed, we're as good as dead so we should exit to avoid spinning.
2009-10-11expand and share init_worker_process
This can be common across everything
2009-10-11graceful exit on trap TypeError from IO.select
Avoid potential race conditions with signal handlers, this makes exits cleaner since the LISTENERS array will get map!-ed to nils in the :QUIT signal handler.
2009-10-11factor out common listen loop error handling
It'll be easier to maintain a common language for logging and debugging.
2009-10-10thread_spawn: clean up nuking of timed-out threads
We log thread destruction times now and also make a best-effort to avoid race conditions on threads that just finished.
2009-10-10tests: create a bad exit code by default
In case the test doesn't complete and somehow doesn't write the exit code, we always want to start with one.
2009-10-10tests: update TRACER examples in makefile
2009-10-10tests: TEST_OPTS => SH_TEST_OPTS
These variables are only for shells in tests
2009-10-10README for test suite
2009-10-10tests: enable pipefail shell option if possible
pipefail is extremely useful for detecting bad exits _anywhere_ in pipelines, not just the last command. Combined with "set -e", pipefail leads to very unforgiving scripts that bail out at the first sign of error, exactly what we want in tests.
2009-10-10thread_spawn: non-blocking accept() shouldn't EINTR
Something is probably wrong with the OS if it does, so make sure it gets logged and hopefully reported.
2009-10-10thread_spawn: more robust loop
Bad stuff happens, even in our own code because sometimes we don't know what we're doing. So log it so we'll know to fix it and let life go on...
2009-10-08thread_spawn: trap EAGAIN on accept_nonblock
EAGAIN is common on accept_nonblock with multiple processes sharing the same listen descriptors. oops :x
2009-10-08tests: add revactor pipelining/keepalive test
Revactor model uses a different process_client method than our Thread* models.
2009-10-08fchmod heartbeat flips between 0/1
This is for compatibility with OpenBSD as reported by Jeremy Evans for Unicorn.
2009-10-08tests: add dbgcat() utility method
Useful for prefixing individual lines of a temporary file while catting it to stdout. This helps make tests easier to write and test.
2009-10-08tests: simplify temporary file management
Since we rely heavily on temporary files in tests, make sure management of them is easy and reliable.
2009-10-07t0000: basic test includes keepalive + pipelining
2009-10-06tests: move trash files to their own trash/ directory
Avoid cluttering the directory we write tests in
2009-10-06tests: generate random_blob once for all tests
We don't need to repeatedly waste cycles and memory bandwidth to generate random throwaway data.
2009-10-05doc: better "Rainbows!" RDoc examples and linkage
2009-10-05SIGNALS: add Rainbows!-specific notes
Mainly need to note the unfortunate minor difference in log reopening semantics.
2009-10-05add SIGNALS doc to RDoc
sort .document while we're at it so it's easier to scan
2009-10-05Rainbows! 0.1.1 v0.1.1
Fixed Ruby 1.8 support (and all 1.9 systems without Revactor). Process-wide timeout handling for the ThreadSpawn concurrency model should now work properly. Small cleanups everywhere. Eric Wong (16): Rakefile: add publish_news target Fix NEWS generation on single-paragraph tag messages README: move RDoc links down to fix gem description README: add install instructions summary: s/slow apps/sleepy apps/g Avoid naming names in LICENSE/README files rainbows/base: cleanup constant include tests: quiet down bin installation Add top-level "test" target for make local.mk.sample: sync to my current version tests: allow "make V=2" to set TEST_OPTS += -x cleanup temporary file usage in tests local.mk.sample: fix revactor dependency Thread* models: cleanup timeout management thread_spawn: fix timeout leading to worker death less error-prone timeouts for Thread models
2009-10-05less error-prone timeouts for Thread models
Avoid calling chmod on "false" leading to NoMethodError and rely entirely on LISTENERS.first being valid.
2009-10-05thread_spawn: fix timeout leading to worker death
2009-10-05Thread* models: cleanup timeout management
Ensure we reset the per-thread time Thread.current[:t] with each connection so we don't timeout long-lived connections.
2009-10-05local.mk.sample: fix revactor dependency
This makes the Ruby 1.9 tests take much longer now, ~14s because the SHA1 test is fairly intensive.
2009-10-05cleanup temporary file usage in tests
mktemp(1) requires files to end with "XXXXXXXX", not just have that template anywhere. Also, add pid files to the TEST_RM_LIST since test failures can leave a pid file dangling. Lastly, since the config.ru files are 100% static, just check them as standalone files in instead of allocating a tempfile on them for easier maintenance.
2009-10-05tests: allow "make V=2" to set TEST_OPTS += -x
Normally we can run "make V=1" for medium verbosity
2009-10-05local.mk.sample: sync to my current version
This allows the "full-test" target to run 1.9 and 1.8 tests together and sets up gem paths so I don't have to load rubygems. Currently I can run "make -j full-test" in 5.3 seconds on my box vs ~20 seconds without the "-j". Hopefully this time continues to stay low as more tests are added...