yahns 0.0.3 - more bugfixes, still working! / 2013-11-10 -------------------------------------------------------- There are several important bugfixes around graceful shutdown. The shutdown_timeout directive should work more consistently and work even if an app is streaming/trickling slowly to a client. This also plugs an odd FD leak in response buffering. There's also some internal comments/documentation for folks reviewing the strange internals of yahns. Otherwise, it seems to be capable of serving its own website, http://yahns.yhbt.net/README quite well. Rack application authors merely need to write code as if they have a gun to their head if they expect to keep code running on yahns. Again, yahns is extremely intolerant of bugs in the applications it hosts. Otherwise I'm comfortable in the stability of yahns itself. Eric Wong (17): http_client: do not dump backtrace on ETIMEDOUT ensure we close response body if buffering caught up http_response: reorder wbuf_maybe on successful early flush wbuf: document reasoning for the design of these clases build: improve NEWS generation, add atom feed exec_cgi: release pipe/pid sooner SIGWINCH works after SIGUSR2 upgrades shutdown_timeout works around long-running response/apps doc: recommend worker_processes if the app uses SIGCHLD fdmap: simplify IO expiry interface fdmap: document + fix for level-trigger queue_epoll: document epoll concurrency caveats doc: caution users against disabling buffering queue: eliminate :wait_readwrite test: exec_cgi test uses worker_processes test_server: remove unneccessary IO#wait call test: workaround sockets not being binary on rbx yahns 0.0.2 - barely working! / 2013-11-06 ------------------------------------------ Lots of bugfixes and tweaks, but everything appears to mostly work for Rack and HTTP. We are self-hosting our site: http://yahns.yhbt.net/README (And if you can't access it, I screwed something up!) There is a yahns-rackup(1) wrapper for quick-starting Rack applications without having to read any documentation, as it works exactly like rackup(1) (just leave "-s/--server" out) New manpages: yahns(1), yahns_config(5), yahns-rackup(1) Eric Wong (110): test/helper: correctly handle exit code in test runner log: workaround atomicity issues for stdio vs non-stdio descriptors tests: improve output to show RUBY_DESCRIPTION and full path tests: support disabling parallelization env test_output_buffering: workaround a rbx bug socket_helper: do not log sizes on rbx for now config: do not set cloexec on stdout/stderr test_wbuf: avoid floating point arg to read_nonblock rework shutdown for systems w/o rb_thread_fd_close SIGUSR2 uses fork + exec again instead of Process.spawn wip for EADDRINUSE failure test_bin: shutdown socket when not inheriting README: update with support status for MRI/RBX server: skip killing acceptors on rbx for now server (cleanup): avoid interning word for log message server: abort loudly if we have old threads running reinstate retry delay for binding new listeners test/helper: Dir.mktmpdir works without blocks rework acceptor thread shutdown (again) server (minor cleanup): use Symbol#to_proc test_server: remove skipped multi-process balance test tests: do not lose exceptions on quit timeouts tests: enforce close_on_exec on all client sockets server: switch abort to raise on BUG config: implement atfork handlers test/server_helper: fix undefined variable favor client timeout if lower than desperate timeout tests: enable checks for desperate client expiry implement + test Expect: 100-continue handling quitter: save one syscall and implement for non-eventfd enforce FD_CLOEXEC on all pipes, including tests test_expect_100: cleanup unused var http_client: reduce the size of the yahns_step method output_buffering handles odd EAGAIN cases fix output buffer corner-case for static files tests: increase mkserver use to reduce LoC fix SIGCHLD w/o workers + PID file renames test_client_expire: disable output buffering in test StreamFile and TmpIO attempt expiry on EMFILE/ENFILE server: avoid metaclass for acceptors support SO_REUSEPORT on new listeners (:reuseport) doc: ignore RDoc for all internal classes rack: leave RACK_ENV unset by us associate private/anonymous queues correctly queue_epoll: remove check for closed descriptor config: disallow defining new, named queues inside app doc: preliminary manpages for yahns(1), yahns_config(5) config: comment for atfork_* hook definitions implement user switching configurator: validate :reuseport for boolean-ess config: working_directory is only called at top-level server: fix out-of-date comment regarding bind/pid order config: reject negative float for client_expire_ratio lower client_body_buffer_size to 8K (from 114K) implement client_timeout for streaming inputs gem: install manpages in the RubyGems package stream_input: use thread-local rbuf to avoid some garbage test output_buffering with hijacked responses test_input: close client when we're done with it allow multiple blocking threads per listen socket acceptor: account for inheriting dead descriptors server: fix incorrect receiver of method call socket_helper: account for undefined options test for binding Unix stream sockets Rack hijack issues EPOLL_CTL_DEL config: raise ArgumentError for consistency tests for SIGTTIN and SIGTTOU use Hash#each instead of Hash#each_pair add test for working_directory config parameter test_unix_socket: remember to close IO when done test for overriding rack.errors destination test_server: improve working_directory test robustness fdmap: prevent possible/theoretical race implement shutdown_timeout and expiry on graceful shutdown doc: fix client_timeout documentation in yahns_config implement before_exec hook comment to explain YAHNS_FD env remove "worker_" prefix from atfork hooks remove arity enforcement for atfork_* hooks allow atfork_* hooks inside app blocks for ease-of-management doc: disambiguate threads: option for listen directive yahns-rackup launcher enable client expiry for non-TCP sockets config: allow Float for timeouts tests: more intelligent waiting for output buffering doc: add HACKING/INSTALL docs + minitest dependency wbuf: bypass buffering if buffers are caught up wbuf: reset FS (sendfile) buffer if caught up wbuf: only enable bypass if we've truncated input and output buffers support tmpdir: arguments tests: further speed up output buffering test test trysendfile usage with UNIX sockets client_expire_generic: drop kgio_write wrapper remove unnecessary map(&:to_s) before Array#join account for truncated/expanded static files http: do not drop Content-Range from response headers worker-less server should not waitpid indiscriminately stream_file: only close FDs we opened ourselves tests: smaller buffer for big header test add extras for exec_cgi and try_gzip_static http_response: fix app-controlled close + test examples: flesh out the example configs a bit README: add disclaimer server: improve shutdown messages extras: add README extras: add autoindex module extras: add proxy_pass Rack app rackup_handler: fix ordering of working_directory worker: avoid double SIGQUIT on unexpected parent death server: log error instead of raising for leftover socks yahns 0.0.1 - many small fixes and test coverage / 2013-10-20 ------------------------------------------------------------- Just a bunch of improvements found while running tests. It's still incomplete and missing a bunch of features from existing servers, but maybe it works... Clone git://yhbt.net/yahns.git for full details Eric Wong (18): test/helper: fix __covmerge race for forked processes wire up client_max_body_size limits fix and test Rack hijack support SIGUSR2 handling uses Process.spawn + tests fix USR1 log reopening when using worker_processes test_bin: add additional tests for SIGHUP test_server: skip test_mp_balance for now test/server_helper: dump entire log on errors ensure we stop all threads at exit GNUmakefile: avoid calling exit in test-mt test_bin: set close-on-exec for Ruby 1.9.3 compatibility test_server: bigger delays for graceful shutdown test tests: disable $-w on 1.9.3 to quiet down warnings test/helper: prevent minitest at_exit from running in children recheck IO#closed? on thread pools after a short delay test_config: isolate directories with logs test_reopen_logs: workaround timing problem with worker_processes set close-on-exec on all long-lived descriptors yahns 0.0.0 - hopefully fix installation problems / 2013-10-18 -------------------------------------------------------------- Installing prrerelease versions are strange on RubyGems. Anyways, new project, no risk of breakage, so maybe this works better... COPYRIGHT --------- Copyright (C) 2013, Eric Wong and all contributors License: GPLv3 or later (http://www.gnu.org/licenses/gpl-3.0.txt)