This saves over 400 bytes on x86-64.
---
lib/yahns.rb | 6 ++
1 file changed, 2 insertions(+), 4 deletions(-)
diff --git a/lib/yahns.rb b/lib/yahns.rb
index fd84223..b4a8bbe 100644
--- a/lib/yahns.rb
+++ b/lib/yahns.rb
@@ -50,11 +50,9 @@ module Yahns # :nodoc:
# application dispatch.
The monotonic clock is immune to time adjustments so it is not
thrown off by misconfigured clocks. Process.clock_gettime also
generates less garbage on 64-bit systems due to the use of Flonum.
---
lib/yahns.rb | 13 +
lib/yahns/client_expire_generic.rb | 2 +-
We will support un-hijacking, so the repeated ep_insert/ep_remove
sequences in the kernel will get expensive and complicated for our
user-land code, too.
---
lib/yahns/http_client.rb | 10 +-
lib/yahns/queue_epoll.rb | 11 ---
lib/yahns/queue_kqueue.rb | 6 --
3 files
Eric Wong e...@80x24.org wrote:
This bug is noticeable on a amd64 FreeBSD 9.2 VM, and possible under
Linux, too. This happens as a zero-copy sendfile implementation means
pages queued for transmission by the sendfile system call should not be
modified at any point after the sendfile syscall
While rack.hijack usage during application dispatch normally
prevents yahns from writing an HTTP response out of the Rack
response array, this was not correctly prevented when the
application emitted a 100-continue response when the client
was was too slow to read the 100-continue response without
The goal is to allow yahns to become an alternative to nginx for
users running pre-forking HTTP application servers. Some users
are uncomfortable with the commercialized, open core nature of
nginx nowadays and would rather use a non-commercial server.
Technically all the pieces are already in
/{test_extras_proxy_pass.rb = test_proxy_pass.rb} (93%)
diff --git a/extras/proxy_pass.rb b/extras/proxy_pass.rb
index 00adf18..af6fb7c 100644
--- a/extras/proxy_pass.rb
+++ b/extras/proxy_pass.rb
@@ -1,215 +1,9 @@
-# -*- encoding: binary -*-
-# Copyright (C) 2013, Eric Wong normalper...@yhbt.net and all contributors
No point in bloating our bytecode for single-use variables.
---
extras/proxy_pass.rb| 2 +-
lib/yahns/rackup_handler.rb | 1 -
2 files changed, 1 insertion(+), 2 deletions(-)
diff --git a/extras/proxy_pass.rb b/extras/proxy_pass.rb
index 08f9730..15cbae5 100644
--- a/extras/proxy_pass.rb
A Free Software, multi-threaded, non-blocking network application server
designed for low _idle_ power consumption. It is primarily optimized
for applications with occasional users which see little or no traffic.
yahns currently hosts Rack/HTTP applications, but may eventually support
other
Oops, this test bug was introduced in:
commit e413325737f23c5ec27a02246f95077bc1fb038d
(acceptor: close inherited-but-unneeded sockets)
---
test/test_server.rb | 4 +++-
1 file changed, 3 insertions(+), 1 deletion(-)
diff --git a/test/test_server.rb b/test/test_server.rb
index b7cb3e6..0410f65
ruby -w warns on it.
---
extras/proxy_pass.rb | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/extras/proxy_pass.rb b/extras/proxy_pass.rb
index b1697db..8a32cac 100644
--- a/extras/proxy_pass.rb
+++ b/extras/proxy_pass.rb
@@ -170,7 +170,7 @@ class ProxyPass # :nodoc:
We'll be supporting un-hijacking a client socket for proxy_pass
and we must preserve state for pipelined requests.
---
lib/yahns/http_client.rb | 1 -
1 file changed, 1 deletion(-)
diff --git a/lib/yahns/http_client.rb b/lib/yahns/http_client.rb
index 46ea3ec..164cac9 100644
---
This allows us to write chunked response bodies without extra
copying to clients which support streaming.
---
lib/yahns/wbuf.rb | 16 ++--
1 file changed, 10 insertions(+), 6 deletions(-)
diff --git a/lib/yahns/wbuf.rb b/lib/yahns/wbuf.rb
index ba7ea0f..fa39b9b 100644
---
Pushed as commit 5328992829b2ff76cd7cda6d1911ecad70f0e8c2
additional burst test for pipelining and additional comment about
queue_mod being a hand-off point for the object hitting another thread:
+# n.b. we may not touch anything in this object once we call queue_mod,
+# another thread is
A Free Software, multi-threaded, non-blocking network application server
designed for low _idle_ power consumption. It is primarily optimized
for applications with occasional users which see little or no traffic.
yahns currently hosts Rack/HTTP applications, but may eventually support
other
Lin Jen-Shin (godfat) god...@godfat.org wrote:
On Sat, May 9, 2015 at 9:03 AM, Eric Wong e...@80x24.org wrote:
Below, I'm choosing to both leave the socket open and keep the worker
running to slow down a potentially malicious client if this happens and
to hopefully prevent an evil client
We do not want rack.hijack users relying on kgio_* methods since
kgio is trying to make itself obsolete (as Ruby itself adopts
kgio features). This is a bit wonky since our common case tries
to minimize object allocation by only using the Kgio::Socket
derived class.
---
When calling proxy_busy_mod_blocked to re-enable a descriptor via
epoll, the ensure block is dangerous because the ensure clause
modifies the object after the ReqRes is injected into epoll.
This is extremely dangerous as we give up exclusive access to
the object once we call epoll_ctl.
This
Lin Jen-Shin (godfat) god...@godfat.org wrote:
On Sat, May 9, 2015 at 1:03 AM, Eric Wong e...@80x24.org wrote:
It's unfortunately difficult to detect thread death from ruby (no
SIGCHLD handler unlike for processes) besides polling Thread#join
We had this issue in ruby-core a few years
Running this on http://yhbt.net/yahns-public/ for now. I originally I
forgot to disable one of my throwaway middlewares which was not aware of
Rack hijacking.
From: Eric Wong e...@80x24.org
Subject: [PATCH] proxy_pass: possibly avoid breaking some middlewares
hijack seems incompatible with many
We need to ensure more uncommon cases such as gigantic upstream
headers and truncated upstream responses are handled properly
and predictably.
---
lib/yahns/proxy_http_response.rb | 9 --
test/test_proxy_pass.rb | 62 ++--
2 files changed, 66
Test coverage for common cases is pretty good by now,
one major bugfix for giant uploads.
We still need to handle HTTP trailers properly in both directions.
lib/yahns/proxy_http_response.rb | 9 +-
lib/yahns/proxy_pass.rb | 5 +-
test/test_proxy_pass.rb | 190
Lin Jen-Shin (godfat) god...@godfat.org wrote:
On Wed, Apr 8, 2015 at 5:34 AM, Eric Wong e...@80x24.org wrote:
+# this probably breaks fewer middlewares than returning whatever
else...
+[ 500, [], [] ]
You probably meant [ 500, {}, [] ] here?
No, arrays work fine, Rack headers
On Linux, the (currently) excessively large memory buffers size
defaults hide some bugs in the TCP implementation regarding
edge-triggered epoll wakeups.
Setting low :sndbuf values (or lowering tcp_wmem/tcp_mem) can cause
problems) for servers using edge-triggered I/O. yahns uses one-shot
epoll
We want to avoid race conditions if tests become multithreaded
from Kernel#warn internally issuing a second write.
---
test/helper.rb | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/test/helper.rb b/test/helper.rb
index 7b8c1aa..c86f3e3 100644
--- a/test/helper.rb
+++
Version may not be frozen in some RubyGems versions, so we must dup
it. Use a SPDX-compatible license string for GPL-3.0+, too
(RubyGems still complains, for now)
---
yahns.gemspec | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/yahns.gemspec b/yahns.gemspec
index
news as a text file'
-task "NEWS" do
- fp = Tempfile.new("NEWS", ".")
- fp.sync = true
- time = nil
- tags.each do |tag|
-time ||= tag[:time_obj]
-line = tag[:subject] + " / " + tag[:time].sub(/T.*/, '')
- fp.puts line
-fp.puts("-" * line
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
---
Giant patch which touches nearly every single file:
Clients may disconnect on us while we're writing the response
here, so we should shut the backtrace up to avoid polluting
logs.
---
lib/yahns/proxy_pass.rb | 5 -
1 file changed, 4 insertions(+), 1 deletion(-)
diff --git a/lib/yahns/proxy_pass.rb b/lib/yahns/proxy_pass.rb
index
This is no place to advertise weirdo projects.
---
README | 8 +++-
1 file changed, 3 insertions(+), 5 deletions(-)
diff --git a/README b/README
index e1ca3a6..1219a7e 100644
--- a/README
+++ b/README
@@ -55,19 +55,17 @@ Contact
We are happy to see feedback of all types via plain-text
In the future, Ruby may optimize case dispatch for additional
immediate values such as `nil', `true', and `false'.
Rearrange our case statements (and take away some safety-checks
:x) to take advantage of these (to-be-done) optimizations.
Note: totally untested at the moment and the changes to
Ruby 2.3 will support this feature to reduce allocations
for common errors.
---
lib/yahns/openssl_client.rb | 27 +++
1 file changed, 19 insertions(+), 8 deletions(-)
diff --git a/lib/yahns/openssl_client.rb b/lib/yahns/openssl_client.rb
index ffa4b3e..246b407 100644
---
This should reduce memory pressure slightly as we can
have finer-grained control of memory usage for buffers which
can be several kilobytes large.
It is not safe to do this for output buffers we get from the
application, as they may reuse that memory themselves.
---
lib/yahns/http_response.rb
This may be useful to avoid wasting resources when proxying for
an upstream which can already handle slow clients itself.
It is impossible to completely disable buffering, this merely
prevents gigantic amounts of buffering.
This may be useful when an upstream can generate a gigantic
response
Using a 10ms tick was too little, use 100ms instead to avoid
burning CPU. Ideally, we would not tick at all during shutdown
(we're normally tickless); but the common case could be
slightly more expensive; and shutdowns are rare (I hope).
Then, change our process title to indicate we're shutting
This should make it easier to figure out where certain
errors are coming from and perhaps fix problems with
upstreams, too.
This helped me track down the problem causing public-inbox WWW
component running under Perl v5.20.2 on my Debian jessie system
to break and drop connections going through
Using a high max_events may mean some IO objects are closed
after they're retrieved from the kernel but before our Ruby
process has had a chance to get to them.
---
lib/yahns/queue_epoll.rb | 1 +
lib/yahns/queue_kqueue.rb | 1 +
2 files changed, 2 insertions(+)
diff --git
We can force output buffer files to a directory of our
choosing to avoid being confused by temporary files
from other tests polluting the process we care about.
---
test/test_proxy_pass_no_buffering.rb | 13 ++---
1 file changed, 10 insertions(+), 3 deletions(-)
diff --git
currently running code as is for a day or so, first.
Anyways, yahns should be able to handle HTTPS termination
for arbitrarily large responses without touching the FS.
But generating the arbitrarily large responses efficiently
(outside of yahns/Ruby) is still tricky :x
Er
Relying on @body.close in Yahns::WbufCommon#wbuf_close_common to
resume reading the upstream response was too subtle and
potentially racy.
Instead use a new Yahns::WbufLite class which does exactly what
we want for implementing this feature, and nothing more.
---
lib/yahns/proxy_http_response.rb
A Free Software, multi-threaded, non-blocking network
application server designed for low _idle_ power consumption.
It is primarily optimized for applications with occasional users
which see little or no traffic. yahns currently hosts Rack/HTTP
applications, but may eventually support other
On ENAMETOOLONG and perhaps other system errors which we can do
nothing about, we should not spew a giant backtrace which could
be used as an easy DoS vector.
---
extras/try_gzip_static.rb | 2 +-
test/test_extras_try_gzip_static.rb | 12
2 files changed, 13 insertions(+),
ers; but
it's still useful on private LANs and within VPNs (or hosting
Tor hidden services).
Eric Wong (2):
wbuf: remove tmpdir parameter
wbuf_lite: fix write retries for OpenSSL sockets
lib/yahns/http_response.rb | 4 ++--
lib/yahns/proxy_http_response.rb | 2 +-
OpenSSL can't handle write retries if we append to an existing
string. Thus we must preserve the same string object upon
retrying.
Do that by utilizing the underlying Wbuf class which could
already handles it transparently using trysendfile.
However, we still avoiding the subtlety of
Ugh, this is a little slower, but some people will want to
forward through multiple proxies.
---
lib/yahns/proxy_pass.rb | 5 -
1 file changed, 4 insertions(+), 1 deletion(-)
diff --git a/lib/yahns/proxy_pass.rb b/lib/yahns/proxy_pass.rb
index 8e0b742..a30089d 100644
---
We don't depend on rack directly, and unicorn 5.1 will make rack
optional. This seems reasonable for testing, but one day I could
imagine this being more than an HTTP or Rack server...
---
yahns.gemspec | 3 +++
1 file changed, 3 insertions(+)
diff --git a/yahns.gemspec b/yahns.gemspec
index
A Free Software, multi-threaded, non-blocking network
application server designed for low _idle_ power consumption.
It is primarily optimized for applications with occasional users
which see little or no traffic. yahns currently hosts Rack/HTTP
applications, but may eventually support other
Both servers have the ability to bind and listen on multiple
Unix or TCP sockets and share them across multiple worker
processes, but that's where the similarities end.
While yahns is marketed as a "non-blocking application server",
yahns actually uses the blocking accept(2) syscall (or
A Free Software, multi-threaded, non-blocking network
application server designed for low _idle_ power consumption.
It is primarily optimized for applications with occasional users
which see little or no traffic. yahns currently hosts Rack/HTTP
applications, but may eventually support other
Apparently this can be useful to some people.
---
extras/exec_cgi.rb | 8
1 file changed, 8 insertions(+)
diff --git a/extras/exec_cgi.rb b/extras/exec_cgi.rb
index 3091cfb..2183d23 100644
--- a/extras/exec_cgi.rb
+++ b/extras/exec_cgi.rb
@@ -12,6 +12,14 @@
# (delfater: ensure that
Ugh, it sucks that other servers are so tolerant of violations
of the Rack spec. Rainbows! had the same problem:
https://bogomips.org/rainbows-public/20140704195032.ga13...@dcvr.yhbt.net/
---
Comments on wording clarity? Asynchronous spaghetti messed me brain up :X
We cannot maintain a persistent connection to a client if
writing to the client fails; so we can't proceed to let
the app hijack the response.
This may happen in the unlikely case where a response
header needs to be buffered with a Wbuf (and the app
uses response hijacking).
---
Lightly-tested, I'm going to let these run on YHBT.net for
a bit before cutting a new release.
And all this proxy_pass stuff could still use some cleanup and
refactoring, it's hairy!
Eric Wong (5):
test_proxy_pass: test for auto chunking on 1.0 backends
wbuf: drop persistence
For slow clients, we want to be able to drop the connection
to the upstream as soon as we are done buffering and not waste
resources by leaving it in an :ignore state. We also need to
remember the client for the fdmap to prevent shutdowns.
Ugh, this is really hard to test locally.
---
We already check for the truthiness of "alive" in the "if"
statement, so re-setting is pointless.
---
lib/yahns/proxy_http_response.rb | 1 -
1 file changed, 1 deletion(-)
diff --git a/lib/yahns/proxy_http_response.rb b/lib/yahns/proxy_http_response.rb
index c8a2a42..e551323 100644
---
We don't want to wait on GC to reap sockets on errors,
generational GC in Ruby is less aggressive about reaping
long-lived objects such as long-lived HTTP connections.
---
lib/yahns/proxy_http_response.rb | 7 ++-
lib/yahns/proxy_pass.rb | 5 +++--
2 files changed, 9 insertions(+), 3
These are followups to the following two commits:
* commit d16326723d
("proxy_http_response: fix non-terminated fast responses, too")
* commit 8c9f33a539
("proxy_http_response: workaround non-terminated backends")
---
test/test_proxy_pass.rb | 15 +++
1 file changed, 15
Without this, non-terminated backends were not properly
supported if they gave tiny responses or responded faster
than we could stream the response to the client.
This is necessary to support fast responses from some non-Rack
HTTP/1.0-only backend servers which rely on connection
termination to
If a static file response gets truncated while writing, we
set wbuf_persist to false in wbuf_flush of lib/yahns/wbuf_common.rb
Thus, we must check wbuf_persist attribute as late as possible
before yielding control back to the caller in proxy_response_finish
---
A hopefully better version of what
The cost of extra branches inside a loop is negligible compared
to the cost of all the other method calls we make. Favor
smaller code instead and inline some (now) single-use methods.
Furthermore, this allows us to reuse the request header buffer
instead of relying on thread-local storage and
A Free Software, multi-threaded, non-blocking network
application server designed for low _idle_ power consumption.
It is primarily optimized for applications with occasional users
which see little or no traffic. yahns currently hosts Rack/HTTP
applications, but may eventually support other
We need to set state as early as possible as any modification of our
HttpClient object is unsafe after it is handed over to the
underlying application. Otherwise, we could be clobbering a state
set inside the hijack but before we hit the case statement in
HttpClient#step_write.
This bug should
Eric Wong <e...@80x24.org> wrote:
> @@ -232,7 +247,7 @@ def proxy_response_finish(kcar, wbuf, req_res)
> end
>
> busy = wbuf.busy and return proxy_busy_mod_blocked(wbuf, busy)
> -proxy_busy_mod_done(wbuf.wbuf_persist) # returns nil
> +proxy_busy_mod_d
This allows us to work transparently with our OpenSSL
workaround[*] while allowing us to reuse our non-sendfile
compatibility code. Unfortunately, this means we duplicate a
lot of code from the normal wbuf code for now; but that should
be fairly stable at this point.
[*]
We may have temporary files lingering from concurrent
multi-threaded tests in our forked child since FD_CLOFORK
does not exist :P
---
test/test_proxy_pass_no_buffering.rb | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/test/test_proxy_pass_no_buffering.rb
It's too hard to reliably test output buffering behavior
with non-default values users sometimes set; so just skip
and warn about it for now.
ref: commit dad99b5ecd93cdf0a514ff9fb51d198f8aebb188
("test/test_proxy_pass: remove buffer size tuning")
---
test/helper.rb| 12
Clients are not able to handle persistent connections unless
the client knows the length of the response.
---
lib/yahns/http_response.rb | 6 ++
test/test_extras_exec_cgi.rb | 4 +---
2 files changed, 7 insertions(+), 3 deletions(-)
diff --git a/lib/yahns/http_response.rb
no alternative to nginx for
preforking servers...
Eric Wong (2):
wbuf_lite: prevent clobbering responses
wbuf_lite: unify EOF error handling
lib/yahns/wbuf.rb | 1 +
lib/yahns/wbuf_lite.rb | 18 ++
2 files changed, 7 insertions(+), 12 deletions(-)
--
unsubscribe: yahns
All of our wbuf code assumes we append to existing buffers
(files) since sendfile cannot deal otherwise. We also
follow this pattern for StringIO to avoid extra data copies.
---
lib/yahns/wbuf.rb | 1 +
lib/yahns/wbuf_lite.rb | 7 ---
2 files changed, 5 insertions(+), 3 deletions(-)
varnish 4.0.2 (random chunks results,
even given Content-Length :p)
|
v
static file server (with some dynamic parts)
Eric Wong (3):
proxy_pass: avoid TOCTTOU race when unbuffering, too
proxy_pass: avoid accessing logger in env
Another critical bugfix for this yet-to-be-released feature.
By the time we call proxy_unbuffer in proxy_read_body,
the req_res socket may be completely drained of readable data
and a persistent-connection-capable backend will be waiting
for the next request (not knowing we do not yet support
..6fe1ae6 100644
--- a/examples/init.sh
+++ b/examples/init.sh
@@ -2,8 +2,14 @@
# To the extent possible under law, Eric Wong has waived all copyright and
# related or neighboring rights to this examples
set -e
-# Example init script, this can be used with nginx, too,
-# since nginx and yahns accept
A Free Software, multi-threaded, non-blocking network
application server designed for low _idle_ power consumption.
It is primarily optimized for applications with occasional users
which see little or no traffic. yahns currently hosts Rack/HTTP
applications, but may eventually support other
Eric Wong <e...@80x24.org> wrote:
> +++ b/Documentation/yahns_config.pod
> @@ -451,6 +451,9 @@ An example which seems to work is:
># but disable client certificate verification as it is rare:
>ssl_ctx.set_params(verify_mode: OpenSSL::SSL::VERIFY_NONE)
>
> +
It seems unnecessary to set it at all and it's deprecated
in current Ruby trunk.
---
test/test_ssl.rb | 6 --
1 file changed, 6 deletions(-)
diff --git a/test/test_ssl.rb b/test/test_ssl.rb
index e89a89d..92be542 100644
--- a/test/test_ssl.rb
+++ b/test/test_ssl.rb
@@ -26,12 +26,6 @@ class
HTTPS adds some level of privacy protection and helps marketing
(because we care s much about good marketing! :P).
Performance-wise, this reduces subjectAltName bloat when
negotiating connections and will also speed up occasional
certificate renewals when/if we drop the old name.
Also, not
This is not a part of any Rack specification, and can lead to
interesting bugs with wrapped classes for gzip and TLS. AFAIK,
.to_io was meant to support IO#wait_*able and IO.select methods,
not to actually perform read/writes on the return value.
---
lib/yahns/stream_file.rb | 30
This means we need to check Content-Length and use it
properly (unless Content-Range is set).
---
lib/yahns/http_response.rb | 9 ++---
lib/yahns/stream_file.rb | 4 ++--
2 files changed, 8 insertions(+), 5 deletions(-)
diff --git a/lib/yahns/http_response.rb b/lib/yahns/http_response.rb
Eric Wong <e...@80x24.org> wrote:
> diff --git a/lib/yahns/http_response.rb b/lib/yahns/http_response.rb
Oops, missed this :x
--- a/lib/yahns/http_response.rb
+++ b/lib/yahns/http_response.rb
@@ -125,7 +125,7 @@ def kv_str(buf, key, value)
def http_response_write(res, opt)
These comments have been outdated since 2013 with commit
cd84e2ccbdf2 ("ensure we stop all threads at exit")
---
lib/yahns/queue_epoll.rb | 2 +-
lib/yahns/queue_kqueue.rb | 2 +-
2 files changed, 2 insertions(+), 2 deletions(-)
diff --git a/lib/yahns/queue_epoll.rb b/lib/yahns/queue_epoll.rb
If we already started writing a response, we cannot be sending a
502 to inform a user a connection has failed. This should
prevent errors from the OpenSSL layer about mismatched buffers
due to the combination of slow clients and upstreams prematurely
aborting.
---
lib/yahns/req_res.rb | 2 +-
1
A Free Software, multi-threaded, non-blocking network
application server designed for low _idle_ power consumption.
It is primarily optimized for applications with occasional users
which see little or no traffic. yahns currently hosts Rack/HTTP
applications, but may eventually support other
We still need to iterate through all response headers to support
response-only Rack hijacking. Previously, we only supported
full hijacking on so-called "HTTP/0.9" clients.
n.b. This diff will be easier to read with the
-b/--ignore-space-change option of git-diff(1) or GNU diff(1)
---
As with the previous commit
("response: do not set chunked header on bodyless responses"),
blindly setting "Transfer-Encoding: chunked" is wrong and
confuses "curl -T" on 204 responses, at least.
---
lib/yahns/proxy_http_response.rb | 2 +-
test/test_proxy_pass.rb | 33
Setting "Transfer-Encoding: chunked" on responses will confuse
clients which see a 204 response and do not expect a body.
This follows Rack::Chunked behavior, as yahns should function
without Rack::Chunked middleware.
This regression appeared in yahns v1.13.0 (2016-08-05)
---
When entering StreamInput#read, it is common for @rbuf to
be drained and empty, meaning a simple String#clear can
be used in place of a more complex String#slice! String#replace
combo on an empty @rbuf.
While we're at it, we'll avoid an extra instructions for calling
`@rbuf.size` by storing the
Support for it may be removed in future versions of Ruby(*),
and we actually do not need to waste time looping when
a instance variable will do.
(*) https://bugs.ruby-lang.org/issues/13245
---
lib/yahns/acceptor.rb | 6 +++---
lib/yahns/server.rb | 2 +-
2 files changed, 4 insertions(+), 4
This reverts commit bcf0f0efb3173b18957ddba2af6592219a2d72a3.
The dependency on olddoc makes it slightly more difficult for
users to package their own and distribute RubyGems. We will
also not host HTML RDoc files since we have no internal API
to support.
---
.gitignore | 1 -
.olddoc.yml |
Ruby 2.4+ should contain everything we need to replace kgio;
and we can provide reasonable (if not slower) facsimiles
for older Rubies.
The reading and wait_*able APIs of kgio are similar to APIs
in the IO core class, so lets deal with that, first.
Removing dependencies on writing will be
And clarify that we only have one thread by default.
Since EPOLLEXCLUSIVE seems to have gotten some more press, I
guess we should emphasize our design does not rely on it.
---
Documentation/design_notes.txt | 9 ++---
1 file changed, 6 insertions(+), 3 deletions(-)
diff --git
Although we do not publish RDoc-generated documentation on our
website, other places may, an people use ri(1) locally.
---
lib/yahns/chunk_body.rb | 3 ++-
1 file changed, 2 insertions(+), 1 deletion(-)
diff --git a/lib/yahns/chunk_body.rb b/lib/yahns/chunk_body.rb
index 6e56a18..aab803b 100644
Also, give the Atom feed a little more visibility.
---
README | 6 +-
1 file changed, 5 insertions(+), 1 deletion(-)
diff --git a/README b/README
index 349b028..8c80561 100644
--- a/README
+++ b/README
@@ -66,8 +66,12 @@ You may optionally subscribe by sending an email to:
No point in optimizing for the single listener case in
setup code.
---
lib/yahns/rackup_handler.rb | 6 +-
1 file changed, 1 insertion(+), 5 deletions(-)
diff --git a/lib/yahns/rackup_handler.rb b/lib/yahns/rackup_handler.rb
index 538e00d..63ab373 100644
--- a/lib/yahns/rackup_handler.rb
+++
Since the common case is still to run a single app inside yahns,
we can simplify setup a bit for systemd (and like) users by
allowing them to omit the "listen" directive when they are
running a single app in yahns.
---
Documentation/yahns-rackup.pod | 4
lib/yahns/config.rb| 5
It's possible to have "ruby" executables by other names
(e.g. "ruby24"), so use a supported API for finding our
executable.
This feature was added in Ruby 1.9.2, so it's safe to use
as we've always been 1.9.3+ (and nowadays 2.0+)
---
test/test_bin.rb | 7 +++
1 file changed, 3 insertions(+),
From: Eric Wong <e...@80x24.org>
On FreeBSD 10.3 (and presumably other *BSD TCP stacks, the value
of SO_KEEPALIVE returned by getsockopt is 8, even when set to
'1' via setsockopt. Relax the test to only ensure the boolean
value is interpreted as "true".
Verified independent
From: Eric Wong <e...@80x24.org>
Needs more tests, docs, and such...
---
lib/yahns.rb | 3 +
lib/yahns/config.rb | 16 -
lib/yahns/http_context.rb | 6 ++
lib/yahns/rack_proxy.rb | 156 ++
lib/yahns/server.rb
Eric Wong <yahns-public@yhbt.net> wrote:
> Needs more tests, docs, and such...
Erm, a little too excited and also in a rush, so not a proper
commit message :>
Anyways, submasters seems like a useful concept for small sites
where everything runs on a single host; or a containerized
Current (tested r60757) ruby trunk warns in a few more places than
2.4.x did, so clean them up.
---
extras/autoindex.rb| 4 ++--
test/test_mt_accept.rb | 2 --
2 files changed, 2 insertions(+), 4 deletions(-)
diff --git a/extras/autoindex.rb b/extras/autoindex.rb
index 238edd9..45b80cf
This is apparently needed to pass tests with a newer version of
OpenSSL found in Debian 9
---
test/test_ssl.rb | 2 ++
1 file changed, 2 insertions(+)
diff --git a/test/test_ssl.rb b/test/test_ssl.rb
index 92be542..7909094 100644
--- a/test/test_ssl.rb
+++ b/test/test_ssl.rb
@@ -41,6 +41,7 @@
1 - 100 of 154 matches
Mail list logo