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)