about summary refs log tree commit homepage
path: root/GIT-VERSION-GEN
DateCommit message (Collapse)
2021-10-09yahns 1.18.0 v1.18.0
8 changes since 1.17.0 (2019-04-22): worker: workaround old F_SETPIPE_SZ bug doc: favor File.read over IO.read to ease review proxy_pass: document as a public API doc: include Yahns/ directory on website extras/try_gzip_static: set "Vary: Accept-Encoding" on gzip do not sleep if signals are pending server: workaround Linux v5.5..v5.13 epoll bug gemspec: allow unicorn 6.x
2019-04-22yahns 1.17.0 - Earth Day release v1.17.0
This releases includes a few kqueue-related bugfixes from Lin Jen-Shin <godfat@godfat.org>. There's also some shutdown_timeout-related bugfixes and some cleanups to reduce dependencies on kgio. extras/exec_cgi and extras/autoindex both got some minor updates; the latter of which defaults to a dark scheme to save power on OLED and CRT displays (it is Earth Day, after all :>) Eric Wong (25): doc: fix git URLs in README and HACKING http_client: do not warn on do_pread overreach remove IO#close_on_exec= calls yahns/worker: shrink pipe under Linux test/test_extras_exec_cgi.rb: improve test reliability extras/exec_cgi: remove kgio dependency extras/exec_cgi: update copyright year and use SPDX extras/exec_cgi: @body_tip is always set extras/exec_cgi: support Process.spawn options (e.g. RLIMIT_*) server_mp: favor "Kernel#select" instead of "IO.select" server_mp: remove redundant srand call extras/exec_cgi: remove unecessary .freeze calls server: respect shutdown_timeout server: extra shutdown timeout debugging wbuf: use IO#write directly in Ruby 2.5+ for writev worker: rely on F_SETPIPE_SZ to set mininum value remove calls to kgio_wait_* able do not shutdown until listeners are all stopped README: remove SMTP-based subscription info sigevent_*: fixup non-eventfd path README: note HTTPS support for HTTP/1.1 extras/autoindex: use dark colors by default doc: update homepage to point to cgit install doc: update wording to avoid "mailing list" doc: remove inaccurate comment about "GNU-ism" Lin Jen-Shin (2): Add QueueQuitter#closed? to queue_quitter_pipe.rb @srv.shutdown could raise Errno::ENOTCONN
2018-08-06yahns 1.16.0 v1.16.0
This release fixes warnings for users combining Rack::Deflater with HTTPS support: https://yhbt.net/yahns-public/20180714005630.11812-1-e@80x24.org/ yahns-rackup(1) users may not specify "-O listen=inherit" when spawning from systemd. The "listen" directive may be omitted entirely from the yahns-config(5) files. A few other cleanups and nothing interesting, otherwise. 20 yawn-worthy changes since v1.15.0 (2017-03-23): config: more descriptive variable name proxy_pass: comment explaining what rack.hijack calls USR2 upgrades may use Process.spawn for vfork avoid Thread#[] and Thread#[]= across threads gemspec: declare Ruby 2.0+ dependency, here test_bin: SO_KEEPALIVE value only needs to be true rackup_handler: remove unnecessary branch test_bin: use RbConfig.ruby for non-standard names allow omitting specifying socket name when inheriting listen socket server: fix incomplete comment about SSLContext#setup test_rack_env: additional test for Rack environment test: allow setting TAIL env to watch error logs fix some unused variables tests: thread-safety fixes test/server_helper: describe reason for termination test/test_ssl: set SSLContext#security_level=0 doc: https:// URLs instead of git:// http_client: clear backtrace on "wrong version number" in OpenSSL openssl_client: do not attempt writes after SystemCallError use IO#pread if available in Ruby 2.5 *ZZZZZZ*
2017-03-23yahns 1.15.0 v1.15.0
Minor changes to reduce allocations and simplify our code and dependencies. Nothing particularly interesting unless you're the type of person who appreciates brake pedals in with holes drilled in them for weight reduction. 11 changes since 1.14.1 (2016-12-14): stream_input: avoid allocation for common #read case proxy_pass: add a note about the instability of this tee_input: simplify conditional for writing to temporary file proxy_http_response: reduce memory pressure from larger headers http_response: make response headers eligible for GC, sooner update more referenced URLs to be HTTPS chunk_body: nodoc this internal class Revert "use olddoc 1.1.0 for generating NEWS + NEWS.atom.xml" gemspec: stop advertising "private" email address doc: design_notes: we do not use EPOLLEXCLUSIVE README: update with disclaimer about subscription Ovt punatrf pbzvat...
2016-12-14yahns 1.14.1 - bugfixes only v1.14.1
This release avoids confusing HTTP/1.1 clients with a "Transfer-Encoding: chunked" header on bodyless responses. The header was causing "curl -T" to wait indefinitely for a response body after the server sent a 204. This regression was introduced with autochunk introduced with yahns 1.13(*). rack.hijack was also broken for ancient "HTTP/0.9" requests, and now fixed. 4 changes since 1.14.0: queue_*: fix outdated comments http_response: support rack.hijack on HTTP/0.9 responses response: do not set chunked header on bodyless responses proxy_pass: do not chunk on bodyless upstream responses (*) https://yhbt.net/yahns-public/20160805-yahns-1.13.0-released@lucky13/
2016-11-14yahns 1.14.0 - removing undefined behavior v1.14.0
There's minor feature removals for undocumented and undefined features and behavior which are unlikely to affect anybody unless they serve HTTPS. Our website is now self-hosted with HTTPS support (HTTP remains supported for legacy systems): https://yhbt.net/yahns/README See git history at git://yhbt.net/yahns.git for full details. openssl_client: avoid undefined SSL_write behavior move website to https://yhbt.net/yahns/ stream_file: remove #to_io support from responses response: only stream "file" responses on known length response: fixup compile error req_res: do not send 502 on catchall error if response buffered
2016-08-05yahns 1.13.0 - some user-visible improvements... v1.13.0
And probably a billion new regressions! yahns now allows users to skip the Rack::Head, Rack::Chunked and Rack::ContentLength middlewares to ease migrating from/to other real-world Rack HTTP servers. Most notably, our chunked encoding implementation is a bit faster than Rack::Chunked by taking advantage of the writev(2) syscall: https://yhbt.net/yahns-public/20160803031906.14553-4-e@80x24.org/ There's also rack 2.x fixes in the test case and extras/ section (these incompatibilities did not affect existing users unless they use the wonky extras/ section). There's also some graceful shutdown fixes, the process title is now changed to display the number of live FDs. Of course, there's the usual round of documentation improvements which are systemd and OpenSSL setup-related this time around. However, the majority of changes (proxy_*, wbuf_lite), affect currently-unadvertised functionality which is subject to removal or incompatible config changes. However, they are used to serve our mailing list archives at: https://yhbt.net/yahns-public/ 49 changes since yahns 1.12.5: proxy_pass: simplify writing request bodies upstream proxy_pass: hoist out proxy_res_headers method proxy_pass: simplify proxy_http_response proxy_pass: split out body and trailer reading in response proxy_pass: trim down proxy_response_finish, too proxy_pass: split out req_res into a separate file proxy_pass: fix resumes after complete buffering is unblocked proxy_pass: X-Forwarded-For appends to existing list proxy_pass: pass entire object to proxy_http_response proxy_pass: support "proxy_buffering: false" proxy_pass: remove unnecessary rescue req_res: store proxy_pass object here, instead proxy_pass: redo "proxy_buffering: false" wbuf: remove needless "busy" parameter Merge branch 'maint' extras/try_gzip_static: do not show backtrace on syscall errors wbuf: remove tmpdir parameter wbuf_lite: fix write retries for OpenSSL sockets test_proxy_pass_no_buffering: fix racy test queue_*: check for closed IO objects cleanup graceful shutdown handling proxy_pass: more descriptive error messages proxy_pass: fix HTTP/1.0 backends on EOF w/o buffering wbuf_common: reset offset counter when done extras/try_gzip_static: resolve symlinks test_ssl: remove unnecessary priv_key DH parameter openssl_client: wrap shutdown for graceful termination proxy_pass: keep trailer buffer on blocked client writes proxy_pass: avoid TOCTTOU race when unbuffering, too proxy_pass: avoid accessing logger in env after hijacking proxy_pass: avoid stuck responses in "proxy_buffering: false" extras: include status messages in responses update init and add systemd examples test_proxy_pass_no_buffering: exclude rb/ru files, too wbuf_lite: use StringIO instead of TmpIO wbuf_lite: truncate StringIO when done wbuf_lite: prevent clobbering responses wbuf_lite: unify EOF error handling wbuf_lite: reset sf_offset/sf_count consistently wbuf_lite: clear @busy flag when re-arming http_response: drop bodies for non-compliant responses fix rack 2.x compatibility bugs doc: add session cache usage to OpenSSL example test: skip some buffering tests on non-default values response: drop clients after HTTP responses of unknown length response: reduce stack overhead for parameter passing response: support auto-chunking for HTTP/1.1 Revert "document Rack::Chunked/ContentLength semi-requirements" extras/exec_cgi: fix for HTTPoxy vulnerability
2016-05-02yahns 1.12.4 - rack.hijack and proxy_pass bugfixes v1.12.4
This release fixes some resource leaks in uncommonly used parts of yahns as well as including some documentation improvements. No need to upgrade unless you rely on rack.hijack for responses or use the (currently-undocumented) proxy_pass module(*). 9 non-merge changes since 1.12.3: proxy_pass: honor wbuf_persist when ending response proxy_http_response: fix non-terminated fast responses, too test_proxy_pass: test for auto chunking on 1.0 backends wbuf: drop persistence if writing to client fails proxy_http_response: cleanup: avoid redundant setting of "alive" proxy_http_response: do not persist upstream on slow clients proxy_pass: drop resources immediately on errors document Rack::Chunked/ContentLength semi-requirements extras/exec_cgi: document cgit example Documentation/yahns-rackup.pod | 10 ++++++++++ GIT-VERSION-GEN | 2 +- examples/yahns_rack_basic.conf.rb | 6 ++++++ extras/exec_cgi.rb | 8 ++++++++ lib/yahns/proxy_http_response.rb | 40 ++++++++++++++++++++++----------------- lib/yahns/proxy_pass.rb | 5 +++-- lib/yahns/wbuf_common.rb | 1 + test/test_proxy_pass.rb | 15 +++++++++++++++ 8 files changed, 67 insertions(+), 20 deletions(-) (*) 1.13.0 will include refactoring in proxy_pass and possibly documenting it as stable-enough-for-public use: https://yhbt.net/yahns-public/20160220081619.GA10850@dcvr.yhbt.net/t/
2016-04-08yahns 1.12.3 - more fixes and doc updates v1.12.3
This release only contains two changes since v1.12.2: * proxy_http_response: workaround non-terminated backends The first is a fix for the undocumented and unstable "proxy_pass" feature: https://yhbt.net/yahns-public/20160406062556.10988-1-e@80x24.org/t/ However, I'm considering supporting proxy_pass as a stable API: https://yhbt.net/yahns-public/20160220081619.GA10850@dcvr.yhbt.net/t/ * doc: recommend "verify_mode: OpenSSL::SSL::VERIFY_NONE" Only a documentation change prompted by the discovery that some browsers/platforms will try to prompt users for client certs: https://yhbt.net/yahns-public/20160316003434.GA14791@dcvr.yhbt.net/t/
2016-03-01yahns 1.12.2 - minor doc and TLS fixes v1.12.2
This release ensures OpenSSL::SSL::SSLContext#session_id_context is always set for OpenSSL users. It won't overwrite existing settings, but setting it to a random value is necessary to ensure clients do not get aborted connections when attempting to use a session cache. No need to actually upgrade if you're on 1.12.1, you may add the following to your yahns_config(5) file where OpenSSL::SSL::SSLContext is configured: # recommended, not required. This sets safer defaults # provided by Ruby on top of what OpenSSL gives: ssl_ctx.set_params # required, and done by default in v1.12.2: ssl_ctx.session_id_context ||= OpenSSL::Random.random_bytes(32) yahns gives you full control of of how OpenSSL::SSL::SSLContext is configured. To avoid bugs, yahns only ensures OpenSSL::SSL::SSLContext#session_id_context is set (if not previously set by the user) and calls OpenSSL::SSL::SSLContext#setup before spawning threads to avoid race conditions. yahns itself does not and will not enforce any opinion on the compatibility/performance/security trade-offs regarding TLS configuration. Note: keep in mind using an SSL session cache may be less useful with yahns because HTTP/1.1 persistent connections may live forever :) 3 bug/doc fixes on top of v1.12.1: document OpenSSL::SSL::SSLContext#set_params use ssl: ensure is session_id_context is always set test/*: fix mktmpdir usage for 1.9.3
2016-02-22yahns 1.12.1 - more TLS fixes v1.12.1
Most notably release fixes TLS output buffering for large responses to slow clients. For Rack HTTPS users, env['SERVER_PORT'] also defaults to 443 properly unless the Host: request header specifies differently. Also, the extras/autoindex change is to make our own directory listing look nicer as we use Let's Encrypt and don't want to waste space listing ".well-known/" directory contents on: https://yahns.yhbt.net/ Yes, we really do care how our homepage looks! 6 changes since v1.12.1: extras/autoindex: support hiding dotfiles fix output buffering with SSL_write https: ensure SERVER_PORT defaults to 443 test_ssl: check SERVER_PORT when parsed from Host: header doc: mention kqueue/kevent alongside epoll doc: more minor updates
2016-02-14yahns 1.12.0 - TLS fixes and more! v1.12.0
Most notably, serving static files over HTTPS did not work before this release with the "sendfile" gem installed. The yahns_config(5) manpage is also updated with an example for using OpenSSL::SSL::SSLContext objects. Users of Rack::Request#scheme and env['rack.url_scheme'] should see "https" properly set for HTTPS connections. There's also a bunch of internal tweaks like taking advantage of the file-level frozen_string_literal: directive in 2.3 and explicitly clearing short-lived string buffers TLS support is still in its early stages, but I'm experimenting with Let's Encrypt (via getssl[1]) and hosting https://YHBT.net/ on it. For now, I suggest using a separate yahns instance (with a different master process) to avoid any potential data leaks between HTTPS and HTTP instances. In the future, it may be possible to isolate HTTPS from HTTP at the worker process level. Supporting GnuTLS (alongside OpenSSL) may be in our future, too. To paraphrase the warning in http://www.postfix.org/TLS_README.html (which was written before Heartbleed): WARNING By turning on TLS support in yahns, you not only get the ability to encrypt traffic and to authenticate remote clients. You also turn on thousands and thousands of lines of OpenSSL library code. Assuming that OpenSSL is written as carefully as Eric's own code, every 1000 lines introduce one additional bug into yahns. I'm not nearly as careful with yahns as Wietse is with postfix, either. 20 changes since v1.11.0: README: updates for kqueue add .gitattributes for Ruby method detection nodoc internals enable frozen_string_literal for Ruby 2.3+ copyright updates for 2016 extras/exec_cgi: fix frozen string error on slow responses avoid StringIO#binmode for the next few years use String#clear for short-lived buffers we create gemspec: make rack a development dependency build: install-gem forced to "--local" domain acceptor: all subclasses of TCPServer use TCP_INFO properly emulate sendfile for OpenSSL sockets avoid race conditions in OpenSSL::SSL::SSLContext#setup set HTTPS and rack.url_scheme in Rack env as appropriate proxy_pass: pass X-Forwarded-Proto through doc: switch to perlpod (from pandoc-flavored Markdown) doc: trim down documentation slightly doc: document ssl_ctx for "listen" directive doc: various doc and linkification improvements http_context: reduce constant lookup + bytecode [1] git clone https://github.com/srvrco/getssl.git
2016-01-02copyright updates for 2016
Using the 'update-copyright' script from gnulib[1]: git ls-files | UPDATE_COPYRIGHT_HOLDER='all contributors' \ UPDATE_COPYRIGHT_USE_INTERVALS=2 \ xargs /path/to/gnulib/build-aux/update-copyright We're also switching to 'GPL-3.0+' as recommended by SPDX to be consistent with our gemspec and other metadata (as opposed to the longer but equivalent "GPLv3 or later"). [1] git://git.savannah.gnu.org/gnulib.git
2016-01-02enable frozen_string_literal for Ruby 2.3+
There are likely yet-to-be-discovered bugs in here. Also, keeping explicit #freeze calls for 2.2 users, since most users have not migrated to 2.3, yet.
2015-12-13yahns 1.11.0 - more minor updates v1.11.0
There's some minor test case fixes and documentation updates. For OpenSSL users running the Ruby 2.3.0 preview releases, we now use `exception: false' for for accept_nonblock to reduce exceptions. Non-SSL I/O still uses kgio for now. 6 changes since 1.10.0: wbuf: fix typo in bug check for sendfile gem test_wbuf: deal with proper zero-copy for Unix sockets README: clarify and update copyright year doc: document and reference sd_listen_fds(3) behavior test_server: fix race condition in hooks test openssl_client: use `exception: false' for accept_nonblock
2015-11-01yahns 1.10.0 - minor updates v1.10.0
* 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
2015-10-13copyright updates
Future updates may use the update-copyright script in gnulib: git ls-files | UPDATE_COPYRIGHT_HOLDER='all contributors' \ UPDATE_COPYRIGHT_USE_INTERVALS=2 \ xargs /path/to/gnulib/build-aux/update-copyright
2015-07-21yahns 1.9.0 - minor updates v1.9.0
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. 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. 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. For Ruby 2.2 users, overall performance should be largely unchanged from 1.7.0 to 1.8.0 shortlog of changes since 1.7.0: * 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
2015-06-11yahns 1.8.0 - minor updates v1.8.0
Most notably, the Rack response body is now closed during rack.hijack. 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. 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. ref: https://github.com/ngauthier/tubesock/issues/10 We'll also support SIGWINCH if not daemonized This has no effect for the (default) single process case with no master/worker relationship as that does not support SIGWINCH. 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. 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 follows unicorn commit a6077391bb62d0b13016084b0eea36b987afe8f0 Thanks to Dan Moore for suggesting it on the unicorn list. A few more minor changes, more memory reduction changes coming... * 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
2015-05-11yahns 1.7.0 - rack.hijack improvements and more v1.7.0
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 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. Additionally, temporary files buffered to the filesystem will now support the Rack::TempfileReaper middleware in rack 1.6+ 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. 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. There's also the usual round of minor code bloat reduction.
2015-03-09yahns 1.6.0 - reduced allocations and bugfixes v1.6.0
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 are also minor reductions in allocations which can save a few hundred bytes statically and also whenever write buffering is necessary for large responses. Some minor documentation updates improvements in extras, too. 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 See the git repository for more: git clone git://yhbt.net/yahns
2014-12-21yahns 1.5.0 - initial OpenSSL support and bugfixes v1.5.0
This release adds basic OpenSSL support for HTTPS connections. 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. 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: require 'openssl' # we will not do this for the user, even ctx = OpenSSL::SSL::SSLContext.new # user must configure ctx here... listen 443, ssl_ctx: ctx 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. 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. 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. Shortlog of changes since 1.4.0 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 Disclaimer: the yahns project does not and will never endorse any commercial entities, including certificate authorities. Shpx Nhgubevgl.
2014-11-16yahns 1.4.0 v1.4.0
Minor internal cleanups and bugfixes. * 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
2014-07-16yahns 1.3.1 - fix large response corruption v1.3.1
This release contains a major bug fix noticeable on FreeBSD VMs, but should affect Linux systems making large responses which require output buffering, too. * test_server: avoid multiple workers for dead parent check * wbuf: avoid corrupted large responses with zero-copy sendfile
2014-05-12yahns 1.3.0 - new mailing list + fixups v1.3.0
Since RubyForge is going away, this release updates the documentation to point to the new public-inbox and mailing list at at: yahns-public@yhbt.net (no subscription required, plain text only) 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 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. [1] http://ssoma.public-inbox.org/
2014-03-15yahns 1.2.0 - preliminary kqueue/FreeBSD support v1.2.0
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. 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. 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). yahns - dangerous by design (and sleepy!)
2014-02-04yahns 1.1.0 - MOAR SLEEPY v1.1.0
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. 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). 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
2014-01-02yahns 1.0.0 v1.0.0
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. 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
2013-11-10yahns 0.0.3 - more bugfixes, still working v0.0.3
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
2013-11-06yahns 0.0.2 - barely working! v0.0.2
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
2013-10-20yahns 0.0.1 - many small fixes and test coverage v0.0.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... 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
2013-10-18yahns 0.0.0 - hopefully fix installation problems v0.0.0
Installing prrerelease versions are strange on RubyGems. Anyways, new project, no risk of breakage, so maybe this works better...
2013-10-18yahns 0.0.0TP1
It runs, maybe!
2013-10-18initial commit