NEWS in yahns-1.9.0 vs NEWS in yahns-1.10.0

- old
+ new

@@ -1,505 +1,495 @@ -yahns 1.9.0 - minor updates / 2015-07-21 ----------------------------------------- +=== yahns 1.10.0 - minor updates / 2015-11-01 09:08 UTC -This release improves socket inheritance support. TCP socket -options are now applied to inherited sockets. We also emulate -the sd_listen_fds function to allow inheriting sockets from -systemd. + * test_client_expire: favor Process.spawn over fork+exec + * extras/try_gzip_static: require readability on HEAD requests + * proxy_pass: quiet down ECONNRESET and EPIPE, too + * copyright updates + * update various comments + * proxy_http_response: use frozen string literal optimization + * README: add link to NNTP archive endpoint + * use olddoc 1.1.0 for generating NEWS + NEWS.atom.xml + * gemspec fixes for various RubyGems versions + * bytecode golfing to cut a few bytes of memory + * simplify sd_listen_fds emulation + * gemspec: allow compatibility with unicorn 5 -HTTP status strings are now generated dynamically, allowing -applications to modify Rack::Utils::HTTP_STATUS_CODES to -apply changes in the Rack response. Unfortunately, this leads -to minor (likely unnoticeable) performance regressions. +=== yahns 1.9.0 - minor updates / 2015-07-21 20:29 UTC -However, our code is not optimized for Ruby 2.2+, so users on -the latest released Ruby will benefit from reduced inline cache -and constant lookups as we reduced our constant footprint. -Expect further minor performance regressions if you are running -Ruby 2.2 and earlier. + This release improves socket inheritance support. TCP socket + options are now applied to inherited sockets. We also emulate + the sd_listen_fds function to allow inheriting sockets from + systemd. -For Ruby 2.2 users, overall performance should be largely -unchanged from 1.7.0 to 1.8.0 + HTTP status strings are now generated dynamically, allowing + applications to modify Rack::Utils::HTTP_STATUS_CODES to + apply changes in the Rack response. Unfortunately, this leads + to minor (likely unnoticeable) performance regressions. -shortlog of changes since 1.7.0: + However, our code is not optimized for Ruby 2.2+, so users on + the latest released Ruby will benefit from reduced inline cache + and constant lookups as we reduced our constant footprint. + Expect further minor performance regressions if you are running + Ruby 2.2 and earlier. -* use opt_str_freeze for Hash#delete -* test/helper: warn atomically -* generate response status strings dynamically -* reduce constants and optimize for Ruby 2.2+ -* http_response: reduce bytecode size -* apply TCP socket options on inherited sockets -* test/test_rack_hijack.rb: try to increase test reliability -* emulate sd_listen_fds for systemd support -* test/test_rack_hijack: ensure proper ordering of log messages + For Ruby 2.2 users, overall performance should be largely + unchanged from 1.7.0 to 1.8.0 -yahns 1.8.0 - minor updates / 2015-06-11 ----------------------------------------- + shortlog of changes since 1.7.0: -Most notably, the Rack response body is now closed during rack.hijack. + * use opt_str_freeze for Hash#delete + * test/helper: warn atomically + * generate response status strings dynamically + * reduce constants and optimize for Ruby 2.2+ + * http_response: reduce bytecode size + * apply TCP socket options on inherited sockets + * test/test_rack_hijack.rb: try to increase test reliability + * emulate sd_listen_fds for systemd support + * test/test_rack_hijack: ensure proper ordering of log messages - Middlewares such as Rack::Lock (used by Rails) break badly unless - the response body is closed on hijack, so we will close it to follow - the lead of other popular Rack servers. +=== yahns 1.8.0 - minor updates / 2015-06-11 19:54 UTC - While it's unclear if there's anybody using rack.hijack besides - yahns/proxy_pass we'll try to emulate the behavior of other servers - as much as possible. + Most notably, the Rack response body is now closed during rack.hijack. - ref: https://github.com/ngauthier/tubesock/issues/10 + Middlewares such as Rack::Lock (used by Rails) break badly unless + the response body is closed on hijack, so we will close it to follow + the lead of other popular Rack servers. -We'll also support SIGWINCH if not daemonized + While it's unclear if there's anybody using rack.hijack besides + yahns/proxy_pass we'll try to emulate the behavior of other servers + as much as possible. - This has no effect for the (default) single process case with - no master/worker relationship as that does not support SIGWINCH. + ref: https://github.com/ngauthier/tubesock/issues/10 - Some process managers such as foreman and daemontools rely on - yahnsnot daemonizing, but we still want to be able to process - SIGWINCH in that case. + We'll also support SIGWINCH if not daemonized - stdout and stderr may be redirected to a pipe (for cronolog or - similar process), so those are less likely to be attached to a TTY - than stdin. This also allows users to process SIGWINCH when running - inside a regular terminal if they redirect stdin to /dev/null. + This has no effect for the (default) single process case with + no master/worker relationship as that does not support SIGWINCH. - This follows unicorn commit a6077391bb62d0b13016084b0eea36b987afe8f0 - Thanks to Dan Moore for suggesting it on the unicorn list. + Some process managers such as foreman and daemontools rely on + yahnsnot daemonizing, but we still want to be able to process + SIGWINCH in that case. -A few more minor changes, more memory reduction changes coming... + stdout and stderr may be redirected to a pipe (for cronolog or + similar process), so those are less likely to be attached to a TTY + than stdin. This also allows users to process SIGWINCH when running + inside a regular terminal if they redirect stdin to /dev/null. -* proxy_pass: no point in closing StringIO -* proxy_pass: allow filtering or overriding response headers -* support SIGWINCH even if not daemonized -* use Unicorn::HttpParser#response_start_sent accessor -* reduce inline constant cache overheads -* proxy_pass: skip tests if kcar is missing -* ensure body is closed during hijack + This follows unicorn commit a6077391bb62d0b13016084b0eea36b987afe8f0 + Thanks to Dan Moore for suggesting it on the unicorn list. -yahns 1.7.0 - rack.hijack improvements and more / 2015-05-11 ------------------------------------------------------------- + A few more minor changes, more memory reduction changes coming... -Nothing really significant, so there's no need to upgrade if -you're not affected by the minor fixes and changes in this -release. + * proxy_pass: no point in closing StringIO + * proxy_pass: allow filtering or overriding response headers + * support SIGWINCH even if not daemonized + * use Unicorn::HttpParser#response_start_sent accessor + * reduce inline constant cache overheads + * proxy_pass: skip tests if kcar is missing + * ensure body is closed during hijack -For all users, LoadError and SyntaxError exceptions are now -logged and non-fatal within worker threads serving application -code. Thanks to Lin Jen-Shin <godfat@godfat.org> for bringing -this up on the mailing list. +=== yahns 1.7.0 - rack.hijack improvements and more / 2015-05-11 01:38 UTC -Additionally, temporary files buffered to the filesystem will -now support the Rack::TempfileReaper middleware in rack 1.6+ + Nothing really significant, so there's no need to upgrade if + you're not affected by the minor fixes and changes in this + release. -For rack.hijack users, there are some changes and improvements. -rack.hijack should return a usable IO-like object for SSL users, -now. The rack.input object is no longer closed on hijacking, -allowing apps to continue using buffered input after hijacking. -There is also a bugfix for the rare apps which hijack requests -after emitting 100-continue responses. + For all users, LoadError and SyntaxError exceptions are now + logged and non-fatal within worker threads serving application + code. Thanks to Lin Jen-Shin <godfat@godfat.org> for bringing + this up on the mailing list. -Note: there is also a work-in-progress and under-documented -asynchronous Yayns::ProxyPass Rack app which uses rack.hijack -internally. This will allow yahns to act as a fully-buffering -reverse proxy to upstream servers which cannot handle slow -clients. Yahns::ProxyPass NOT production-ready as of this -release. The old, synchronous extras/proxy_pass.rb code -remains usable. + Additionally, temporary files buffered to the filesystem will + now support the Rack::TempfileReaper middleware in rack 1.6+ -There's also the usual round of minor code bloat reduction. + For rack.hijack users, there are some changes and improvements. + rack.hijack should return a usable IO-like object for SSL users, + now. The rack.input object is no longer closed on hijacking, + allowing apps to continue using buffered input after hijacking. + There is also a bugfix for the rare apps which hijack requests + after emitting 100-continue responses. -yahns 1.6.0 - reduced allocations and bugfixes / 2015-03-09 ------------------------------------------------------------ + Note: there is also a work-in-progress and under-documented + asynchronous Yayns::ProxyPass Rack app which uses rack.hijack + internally. This will allow yahns to act as a fully-buffering + reverse proxy to upstream servers which cannot handle slow + clients. Yahns::ProxyPass NOT production-ready as of this + release. The old, synchronous extras/proxy_pass.rb code + remains usable. -This release fixes a bug where previously-configured-but-now-removed -listeners were inherited across USR2 upgrades are not shutdown -immediately in the child. + There's also the usual round of minor code bloat reduction. -There are also minor reductions in allocations which can save a few -hundred bytes statically and also whenever write buffering is necessary -for large responses. +=== yahns 1.6.0 - reduced allocations and bugfixes / 2015-03-09 09:33 UTC -Some minor documentation updates improvements in extras, too. + This release fixes a bug where previously-configured-but-now-removed + listeners were inherited across USR2 upgrades are not shutdown + immediately in the child. -shortlog of changes since 1.5.0: - README: add link to mailing list archives - test_ssl: factor out server SSLContext creation - doc: add design_notes document - reduce File::Stat object allocations - update comments about wbuf_close return values - wbuf: lazily (re)create temporary file - fix compatibility with unicorn.git - skip tests requiring String#b on 1.9.3 - use the monotonic clock under Ruby 2.1+ - favor Class.new for method-less classes - extras/proxy_pass: save memory in String#split arg - extras/proxy_pass: do not name unused variable - extras/proxy_pass: log exceptions leading to 502 - extras/proxy_pass: flesh out upload support + tests - acceptor: close inherited-but-unneeded sockets + There are also minor reductions in allocations which can save a few + hundred bytes statically and also whenever write buffering is necessary + for large responses. -See the git repository for more: git clone git://yhbt.net/yahns + Some minor documentation updates improvements in extras, too. -yahns 1.5.0 - initial OpenSSL support and bugfixes / 2014-12-21 ---------------------------------------------------------------- + shortlog of changes since 1.5.0: + README: add link to mailing list archives + test_ssl: factor out server SSLContext creation + doc: add design_notes document + reduce File::Stat object allocations + update comments about wbuf_close return values + wbuf: lazily (re)create temporary file + fix compatibility with unicorn.git + skip tests requiring String#b on 1.9.3 + use the monotonic clock under Ruby 2.1+ + favor Class.new for method-less classes + extras/proxy_pass: save memory in String#split arg + extras/proxy_pass: do not name unused variable + extras/proxy_pass: log exceptions leading to 502 + extras/proxy_pass: flesh out upload support + tests + acceptor: close inherited-but-unneeded sockets -This release adds basic OpenSSL support for HTTPS connections. + See the git repository for more: git clone git://yhbt.net/yahns -Users must supply a OpenSSL::SSL::SSLContext object which yahns will use -as-is. yahns will only support HTTPS on Ruby 2.1 and later, as we rely -on "exception: false" in the read_nonblock and write_nonblock methods in -OpenSSL::SSL::SSLSocket. +=== yahns 1.5.0 - initial OpenSSL support and bugfixes / 2014-12-21 02:22 UTC -See the Ruby standard library documentation on how to configure -OpenSSL::SSL::SSLContext objects to pass to the yahns "listen" directive -Editing the yahns config file to use OpenSSL goes something like this: + This release adds basic OpenSSL support for HTTPS connections. - require 'openssl' # we will not do this for the user, even - ctx = OpenSSL::SSL::SSLContext.new - # user must configure ctx here... + Users must supply a OpenSSL::SSL::SSLContext object which yahns will use + as-is. yahns will only support HTTPS on Ruby 2.1 and later, as we rely + on "exception: false" in the read_nonblock and write_nonblock methods in + OpenSSL::SSL::SSLSocket. - listen 443, ssl_ctx: ctx + See the Ruby standard library documentation on how to configure + OpenSSL::SSL::SSLContext objects to pass to the yahns "listen" directive + Editing the yahns config file to use OpenSSL goes something like this: -Note: yahns developers are not responsible for bugs in OpenSSL itself -or misconfigured SSLContext objects created by users. However, our -support of OpenSSL sockets is barely-tested and likely buggy, too. + require 'openssl' # we will not do this for the user, even + ctx = OpenSSL::SSL::SSLContext.new + # user must configure ctx here... -Furthermore, the "sendfile" (or "kgio-sendfile") gem is no longer a -required dependency. It is currently impossible to use zero-copy -system calls with TLS sockets. + listen 443, ssl_ctx: ctx -There are also minor cleanups and a bugfix to ensure body#close is -called for folks using body#to_path where `body' is the Rack -response body. This bug affected logging using the 'clogger' gem -when serving static files. + Note: yahns developers are not responsible for bugs in OpenSSL itself + or misconfigured SSLContext objects created by users. However, our + support of OpenSSL sockets is barely-tested and likely buggy, too. -Shortlog of changes since 1.4.0 + Furthermore, the "sendfile" (or "kgio-sendfile") gem is no longer a + required dependency. It is currently impossible to use zero-copy + system calls with TLS sockets. - save around 1500 bytes of memory on x86-64 - http_response: remove arg for Array#join - remove unused client_max_header_size config - config: use literal symbol array for now - http_response: reduce constants for 100 responses - favor Array#map! for freshly-split arrays - sendfile_compat: remove dependency on pread - extras/autoindex: simplify checking non-.gz - Rakefile: kill more useless gsub use - initial cut at OpenSSL support - test/test_ssl: skip test if SSL on older Rubies - wbuf_common: close body proxies on sendfile abort - bump published Ruby version requirement to 2.0 - make sendfile an optional dependency - openssl_client: ignore SSL_accept errors during negotiation + There are also minor cleanups and a bugfix to ensure body#close is + called for folks using body#to_path where `body' is the Rack + response body. This bug affected logging using the 'clogger' gem + when serving static files. -Disclaimer: the yahns project does not and will never endorse -any commercial entities, including certificate authorities. + Shortlog of changes since 1.4.0 -Shpx Nhgubevgl. + save around 1500 bytes of memory on x86-64 + http_response: remove arg for Array#join + remove unused client_max_header_size config + config: use literal symbol array for now + http_response: reduce constants for 100 responses + favor Array#map! for freshly-split arrays + sendfile_compat: remove dependency on pread + extras/autoindex: simplify checking non-.gz + Rakefile: kill more useless gsub use + initial cut at OpenSSL support + test/test_ssl: skip test if SSL on older Rubies + wbuf_common: close body proxies on sendfile abort + bump published Ruby version requirement to 2.0 + make sendfile an optional dependency + openssl_client: ignore SSL_accept errors during negotiation -yahns 1.4.0 / 2014-11-16 ------------------------- + Disclaimer: the yahns project does not and will never endorse + any commercial entities, including certificate authorities. -Minor internal cleanups and bugfixes. + Shpx Nhgubevgl. -* http_client: clear some internal ivars on rack.hijack -* README: minor updates -* extras/autoindex: do not link beyond top-level -* extras/autoindex: fix misnamed variable -* extras/autoindex: integrate with TryGzipStatic -* queue: remove TODO comment for kqueue -* switch to require_relative for internal requires -* README: add OpenSSL exception -* stream_input: favor str.clear instead of str.replace('') -* http_response: skip Date header case-insensitively +=== yahns 1.4.0 / 2014-11-16 11:05 UTC -yahns 1.3.1 - fix large response corruption / 2014-07-16 --------------------------------------------------------- + Minor internal cleanups and bugfixes. -This release contains a major bug fix noticeable on FreeBSD VMs, but -should affect Linux systems making large responses which require -output buffering, too. + * http_client: clear some internal ivars on rack.hijack + * README: minor updates + * extras/autoindex: do not link beyond top-level + * extras/autoindex: fix misnamed variable + * extras/autoindex: integrate with TryGzipStatic + * queue: remove TODO comment for kqueue + * switch to require_relative for internal requires + * README: add OpenSSL exception + * stream_input: favor str.clear instead of str.replace('') + * http_response: skip Date header case-insensitively -* test_server: avoid multiple workers for dead parent check -* wbuf: avoid corrupted large responses with zero-copy sendfile +=== yahns 1.3.1 - fix large response corruption / 2014-07-16 20:03 UTC -yahns 1.3.0 - new mailing list + fixups / 2014-05-12 ----------------------------------------------------- + This release contains a major bug fix noticeable on FreeBSD VMs, but + should affect Linux systems making large responses which require + output buffering, too. -Since RubyForge is going away, this release updates the -documentation to point to the new public-inbox and mailing list -at at: + * test_server: avoid multiple workers for dead parent check + * wbuf: avoid corrupted large responses with zero-copy sendfile - yahns-public@yhbt.net - (no subscription required, plain text only) +=== yahns 1.3.0 - new mailing list + fixups / 2014-05-12 01:44 UTC -ssoma[1] git archives: git://yhbt.net/yahns-public -browser-friendly archives: http://yhbt.net/yahns-public/ -Traditional mailing list subscription is possible by sending -a blank email to: yahns-public+subscribe@yhbt.net + Since RubyForge is going away, this release updates the + documentation to point to the new public-inbox and mailing list + at at: -This also reworks master->worker signalling to use a pipe, -avoiding problems with libraries which do not respond well -to being interrupted by signals. There are also minor -bugfixes and cleanups, see "git log -p" for full details. + yahns-public@yhbt.net + (no subscription required, plain text only) -[1] http://ssoma.public-inbox.org/ + ssoma[1] git archives: git://yhbt.net/yahns-public + browser-friendly archives: http://yhbt.net/yahns-public/ + Traditional mailing list subscription is possible by sending + a blank email to: yahns-public+subscribe@yhbt.net -yahns 1.2.0 - preliminary kqueue/FreeBSD support / 2014-03-15 -------------------------------------------------------------- + This also reworks master->worker signalling to use a pipe, + avoiding problems with libraries which do not respond well + to being interrupted by signals. There are also minor + bugfixes and cleanups, see "git log -p" for full details. -This release now depends on "kgio-sendfile", a (hopefully temporary) -fork of the original sendfile gem for mainline ruby trunk -compatibility and a (probably correct) FreeBSD-related bugfix. + [1] http://ssoma.public-inbox.org/ -kqueue/FreeBSD support is considered highly experimental. Of course; -you should never rely on anything in production unless you can get bugs -fixed in every part of your stack; even the kernel. yahns (ab)uses -kqueue and epoll in uncommon ways, so you may encounter subtle kernel -bugs along the way. +=== yahns 1.2.0 - preliminary kqueue/FreeBSD support / 2014-03-15 07:43 UTC -Because yahns has been self-hosting its own website for months without -crashes or major problems (BORING! :P), I've decided to start hosting the -yahns website <http://yahns.YHBT.net/README> with ruby trunk (currently -r45341). + This release now depends on "kgio-sendfile", a (hopefully temporary) + fork of the original sendfile gem for mainline ruby trunk + compatibility and a (probably correct) FreeBSD-related bugfix. -yahns - dangerous by design (and sleepy!) + kqueue/FreeBSD support is considered highly experimental. Of course; + you should never rely on anything in production unless you can get bugs + fixed in every part of your stack; even the kernel. yahns (ab)uses + kqueue and epoll in uncommon ways, so you may encounter subtle kernel + bugs along the way. -yahns 1.1.0 - MOAR SLEEPY / 2014-02-04 --------------------------------------- + Because yahns has been self-hosting its own website for months without + crashes or major problems (BORING! :P), I've decided to start hosting the + yahns website <http://yahns.YHBT.net/README> with ruby trunk (currently + r45341). -On responses with a known, non-zero Content-Length, yahns will now -automatically use the MSG_MORE flag when sending HTTP headers. This -reduces TCP packet transmits and allows clients to wake up and read -one less time. + yahns - dangerous by design (and sleepy!) -This is similar to the TCP_NOPUSH/TCP_CORK functionality of other -servers, but requires no additional syscalls. It is only supported -on the Linux kernel, however (but yahns is currently epoll-only -with kqueue support on the horizon). +=== yahns 1.1.0 - MOAR SLEEPY / 2014-02-04 22:14 UTC -Eric Wong (5): - quiet down EHOSTUNREACH errors - http_response: use kgio_syssend with MSG_MORE - load yahns/version file - socket_helper: remove SO_REUSEPORT define for untested arches - response: do not use MSG_MORE on empty bodies + On responses with a known, non-zero Content-Length, yahns will now + automatically use the MSG_MORE flag when sending HTTP headers. This + reduces TCP packet transmits and allows clients to wake up and read + one less time. -yahns 1.0.0 / 2014-01-02 ------------------------- + This is similar to the TCP_NOPUSH/TCP_CORK functionality of other + servers, but requires no additional syscalls. It is only supported + on the Linux kernel, however (but yahns is currently epoll-only + with kqueue support on the horizon). -Mostly fixes for the extras/* stuff running on yahns.YHBT.net and -documentation/packaging fixes. Anyways, this is hosting the -yahns website for a while now (running rack.git) without any -major issues. + Eric Wong (5): + quiet down EHOSTUNREACH errors + http_response: use kgio_syssend with MSG_MORE + load yahns/version file + socket_helper: remove SO_REUSEPORT define for untested arches + response: do not use MSG_MORE on empty bodies -Also, the mailing list will need to move/change because Rubyforge is -going away. Everything I said for the unicorn ML applies to this list, -too: http://mid.gmane.org/20131217015614.GB1125@dcvr.yhbt.net +=== yahns 1.0.0 / 2014-01-02 01:37 UTC -yahns 0.0.3 - more bugfixes, still working! / 2013-11-10 --------------------------------------------------------- + Mostly fixes for the extras/* stuff running on yahns.YHBT.net and + documentation/packaging fixes. Anyways, this is hosting the + yahns website for a while now (running rack.git) without any + major issues. -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. + Also, the mailing list will need to move/change because Rubyforge is + going away. Everything I said for the unicorn ML applies to this list, + too: http://mid.gmane.org/20131217015614.GB1125@dcvr.yhbt.net -This also plugs an odd FD leak in response buffering. +=== yahns 0.0.3 - more bugfixes, still working! / 2013-11-10 21:42 UTC -There's also some internal comments/documentation for folks -reviewing the strange internals of yahns. + 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. -Otherwise, it seems to be capable of serving its own website, -http://yahns.yhbt.net/README quite well. + This also plugs an odd FD leak in response buffering. -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. + There's also some internal comments/documentation for folks + reviewing the strange internals of yahns. -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 + Otherwise, it seems to be capable of serving its own website, + http://yahns.yhbt.net/README quite well. -yahns 0.0.2 - barely working! / 2013-11-06 ------------------------------------------- + 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. -Lots of bugfixes and tweaks, but everything appears to mostly work -for Rack and HTTP. We are self-hosting our site: + 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 - http://yahns.yhbt.net/README - (And if you can't access it, I screwed something up!) +=== yahns 0.0.2 - barely working! / 2013-11-06 03:24 UTC -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) + Lots of bugfixes and tweaks, but everything appears to mostly work + for Rack and HTTP. We are self-hosting our site: -New manpages: yahns(1), yahns_config(5), yahns-rackup(1) + http://yahns.yhbt.net/README + (And if you can't access it, I screwed something up!) -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 + 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) -yahns 0.0.1 - many small fixes and test coverage / 2013-10-20 -------------------------------------------------------------- + New manpages: yahns(1), yahns_config(5), yahns-rackup(1) -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... + 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 -Clone git://yhbt.net/yahns.git for full details +=== yahns 0.0.1 - many small fixes and test coverage / 2013-10-20 01:00 UTC -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 + 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... -yahns 0.0.0 - hopefully fix installation problems / 2013-10-18 --------------------------------------------------------------- + Clone git://yhbt.net/yahns.git for full details -Installing prrerelease versions are strange on RubyGems. -Anyways, new project, no risk of breakage, so maybe this -works better... + 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 -COPYRIGHT ---------- -Copyright (C) 2013, Eric Wong <normalperson@yhbt.net> and all contributors -License: GPLv3 or later (http://www.gnu.org/licenses/gpl-3.0.txt)