Date | Commit message (Collapse) |
|
|
|
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.
|
|
It's faster than bash and the newer versions I have fixed a bug
where the all-important pipefail option got dropped in
subshells.
|
|
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...)
|
|
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.
|
|
|
|
|
|
A picture is worth a thousand words, even in ASCII art.
|
|
Just in case Rev/Revactor does weird things when faced
with signals.
|
|
|
|
And fix existing tests that use "grep -v" since that
is almost always true...
|
|
Just like in Unicorn...
|
|
They were completely broken in the refactoring :x
|
|
|
|
The process-based heartbeat continues, but we no longer time
threads out just because a client is idle for any reason (for
now).
|
|
Avoid overloading the "alive" variable here and wakeup less
frequently as well to do the fchmod.
|
|
We'll finish processing the current request and
set the "Connection: close" header if possible.
|
|
In Unicorn by HttpServer#init_worker_process
|
|
|
|
Once our listeners get closed, we're as good as
dead so we should exit to avoid spinning.
|
|
This can be common across everything
|
|
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.
|
|
It'll be easier to maintain a common language for logging
and debugging.
|
|
We log thread destruction times now and also make a best-effort
to avoid race conditions on threads that just finished.
|
|
In case the test doesn't complete and somehow
doesn't write the exit code, we always want to
start with one.
|
|
|
|
These variables are only for shells in tests
|
|
|
|
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.
|
|
Something is probably wrong with the OS if it does,
so make sure it gets logged and hopefully reported.
|
|
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...
|
|
EAGAIN is common on accept_nonblock with multiple processes
sharing the same listen descriptors.
oops :x
|
|
Revactor model uses a different process_client method
than our Thread* models.
|
|
This is for compatibility with OpenBSD as reported
by Jeremy Evans for Unicorn.
|
|
Useful for prefixing individual lines of a temporary
file while catting it to stdout. This helps make tests
easier to write and test.
|
|
Since we rely heavily on temporary files in tests, make
sure management of them is easy and reliable.
|
|
|
|
Avoid cluttering the directory we write tests in
|
|
We don't need to repeatedly waste cycles and memory
bandwidth to generate random throwaway data.
|
|
|
|
Mainly need to note the unfortunate minor difference in log
reopening semantics.
|
|
sort .document while we're at it so it's easier to scan
|
|
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
|
|
Avoid calling chmod on "false" leading to NoMethodError
and rely entirely on LISTENERS.first being valid.
|
|
|
|
Ensure we reset the per-thread time Thread.current[:t] with each
connection so we don't timeout long-lived connections.
|
|
This makes the Ruby 1.9 tests take much longer now, ~14s
because the SHA1 test is fairly intensive.
|
|
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.
|
|
Normally we can run "make V=1" for medium verbosity
|
|
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...
|