yahns 1.9.0 → 1.10.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/.gitignore +2 -1
- data/.olddoc.yml +7 -0
- data/Documentation/.gitignore +1 -1
- data/Documentation/GNUmakefile +1 -1
- data/Documentation/yahns-rackup.txt +1 -1
- data/Documentation/yahns.txt +1 -1
- data/Documentation/yahns_config.txt +1 -1
- data/GIT-VERSION-FILE +1 -1
- data/GIT-VERSION-GEN +2 -2
- data/GNUmakefile +1 -1
- data/HACKING +1 -1
- data/NEWS +494 -504
- data/README +2 -1
- data/Rakefile +5 -69
- data/bin/yahns +1 -1
- data/bin/yahns-rackup +1 -1
- data/extras/README +1 -1
- data/extras/autoindex.rb +1 -1
- data/extras/exec_cgi.rb +1 -1
- data/extras/try_gzip_static.rb +4 -2
- data/lib/yahns/acceptor.rb +1 -1
- data/lib/yahns/cap_input.rb +1 -1
- data/lib/yahns/client_expire_generic.rb +1 -1
- data/lib/yahns/client_expire_tcpi.rb +1 -1
- data/lib/yahns/config.rb +5 -2
- data/lib/yahns/daemon.rb +2 -2
- data/lib/yahns/fdmap.rb +1 -1
- data/lib/yahns/http_client.rb +1 -1
- data/lib/yahns/http_context.rb +1 -1
- data/lib/yahns/http_response.rb +1 -1
- data/lib/yahns/log.rb +2 -2
- data/lib/yahns/max_body/rewindable_wrapper.rb +1 -1
- data/lib/yahns/max_body/wrapper.rb +1 -1
- data/lib/yahns/max_body.rb +1 -1
- data/lib/yahns/proxy_http_response.rb +2 -2
- data/lib/yahns/proxy_pass.rb +4 -1
- data/lib/yahns/queue_egg.rb +1 -1
- data/lib/yahns/queue_epoll.rb +1 -1
- data/lib/yahns/queue_kqueue.rb +1 -1
- data/lib/yahns/queue_quitter.rb +1 -1
- data/lib/yahns/queue_quitter_pipe.rb +1 -1
- data/lib/yahns/rack.rb +1 -1
- data/lib/yahns/sendfile_compat.rb +1 -1
- data/lib/yahns/server.rb +6 -6
- data/lib/yahns/server_mp.rb +1 -1
- data/lib/yahns/sigevent.rb +1 -1
- data/lib/yahns/sigevent_efd.rb +1 -1
- data/lib/yahns/sigevent_pipe.rb +1 -1
- data/lib/yahns/socket_helper.rb +1 -1
- data/lib/yahns/stream_file.rb +1 -1
- data/lib/yahns/stream_input.rb +1 -1
- data/lib/yahns/tcp_server.rb +1 -1
- data/lib/yahns/tee_input.rb +1 -1
- data/lib/yahns/tmpio.rb +1 -1
- data/lib/yahns/unix_server.rb +1 -1
- data/lib/yahns/version.rb +1 -1
- data/lib/yahns/wbuf_common.rb +1 -1
- data/lib/yahns/wbuf_str.rb +1 -1
- data/lib/yahns/worker.rb +1 -1
- data/lib/yahns.rb +1 -1
- data/man/yahns-rackup.1 +1 -4
- data/man/yahns.1 +1 -4
- data/man/yahns_config.5 +1 -4
- data/test/covshow.rb +1 -1
- data/test/helper.rb +1 -1
- data/test/server_helper.rb +1 -1
- data/test/test_bin.rb +1 -1
- data/test/test_buffer_tmpdir.rb +1 -1
- data/test/test_client_expire.rb +3 -4
- data/test/test_client_max_body_size.rb +1 -1
- data/test/test_config.rb +1 -1
- data/test/test_expect_100.rb +1 -1
- data/test/test_extras_autoindex.rb +1 -1
- data/test/test_extras_exec_cgi.rb +1 -1
- data/test/test_extras_exec_cgi.sh +1 -1
- data/test/test_extras_try_gzip_static.rb +1 -1
- data/test/test_fdmap.rb +1 -1
- data/test/test_input.rb +1 -1
- data/test/test_mt_accept.rb +1 -1
- data/test/test_output_buffering.rb +1 -1
- data/test/test_rack.rb +1 -1
- data/test/test_rack_hijack.rb +1 -1
- data/test/test_reopen_logs.rb +1 -1
- data/test/test_response.rb +1 -1
- data/test/test_serve_static.rb +1 -1
- data/test/test_server.rb +1 -1
- data/test/test_stream_file.rb +1 -1
- data/test/test_unix_socket.rb +1 -1
- data/test/test_wbuf.rb +1 -1
- data/yahns.gemspec +4 -4
- metadata +10 -9
data/NEWS
CHANGED
|
@@ -1,505 +1,495 @@
|
|
|
1
|
-
yahns 1.
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
to
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
1
|
+
=== yahns 1.10.0 - minor updates / 2015-11-01 09:08 UTC
|
|
2
|
+
|
|
3
|
+
* test_client_expire: favor Process.spawn over fork+exec
|
|
4
|
+
* extras/try_gzip_static: require readability on HEAD requests
|
|
5
|
+
* proxy_pass: quiet down ECONNRESET and EPIPE, too
|
|
6
|
+
* copyright updates
|
|
7
|
+
* update various comments
|
|
8
|
+
* proxy_http_response: use frozen string literal optimization
|
|
9
|
+
* README: add link to NNTP archive endpoint
|
|
10
|
+
* use olddoc 1.1.0 for generating NEWS + NEWS.atom.xml
|
|
11
|
+
* gemspec fixes for various RubyGems versions
|
|
12
|
+
* bytecode golfing to cut a few bytes of memory
|
|
13
|
+
* simplify sd_listen_fds emulation
|
|
14
|
+
* gemspec: allow compatibility with unicorn 5
|
|
15
|
+
|
|
16
|
+
=== yahns 1.9.0 - minor updates / 2015-07-21 20:29 UTC
|
|
17
|
+
|
|
18
|
+
This release improves socket inheritance support. TCP socket
|
|
19
|
+
options are now applied to inherited sockets. We also emulate
|
|
20
|
+
the sd_listen_fds function to allow inheriting sockets from
|
|
21
|
+
systemd.
|
|
22
|
+
|
|
23
|
+
HTTP status strings are now generated dynamically, allowing
|
|
24
|
+
applications to modify Rack::Utils::HTTP_STATUS_CODES to
|
|
25
|
+
apply changes in the Rack response. Unfortunately, this leads
|
|
26
|
+
to minor (likely unnoticeable) performance regressions.
|
|
27
|
+
|
|
28
|
+
However, our code is not optimized for Ruby 2.2+, so users on
|
|
29
|
+
the latest released Ruby will benefit from reduced inline cache
|
|
30
|
+
and constant lookups as we reduced our constant footprint.
|
|
31
|
+
Expect further minor performance regressions if you are running
|
|
32
|
+
Ruby 2.2 and earlier.
|
|
33
|
+
|
|
34
|
+
For Ruby 2.2 users, overall performance should be largely
|
|
35
|
+
unchanged from 1.7.0 to 1.8.0
|
|
36
|
+
|
|
37
|
+
shortlog of changes since 1.7.0:
|
|
38
|
+
|
|
39
|
+
* use opt_str_freeze for Hash#delete
|
|
40
|
+
* test/helper: warn atomically
|
|
41
|
+
* generate response status strings dynamically
|
|
42
|
+
* reduce constants and optimize for Ruby 2.2+
|
|
43
|
+
* http_response: reduce bytecode size
|
|
44
|
+
* apply TCP socket options on inherited sockets
|
|
45
|
+
* test/test_rack_hijack.rb: try to increase test reliability
|
|
46
|
+
* emulate sd_listen_fds for systemd support
|
|
47
|
+
* test/test_rack_hijack: ensure proper ordering of log messages
|
|
48
|
+
|
|
49
|
+
=== yahns 1.8.0 - minor updates / 2015-06-11 19:54 UTC
|
|
50
|
+
|
|
51
|
+
Most notably, the Rack response body is now closed during rack.hijack.
|
|
52
|
+
|
|
53
|
+
Middlewares such as Rack::Lock (used by Rails) break badly unless
|
|
54
|
+
the response body is closed on hijack, so we will close it to follow
|
|
55
|
+
the lead of other popular Rack servers.
|
|
56
|
+
|
|
57
|
+
While it's unclear if there's anybody using rack.hijack besides
|
|
58
|
+
yahns/proxy_pass we'll try to emulate the behavior of other servers
|
|
59
|
+
as much as possible.
|
|
60
|
+
|
|
61
|
+
ref: https://github.com/ngauthier/tubesock/issues/10
|
|
62
|
+
|
|
63
|
+
We'll also support SIGWINCH if not daemonized
|
|
64
|
+
|
|
65
|
+
This has no effect for the (default) single process case with
|
|
66
|
+
no master/worker relationship as that does not support SIGWINCH.
|
|
67
|
+
|
|
68
|
+
Some process managers such as foreman and daemontools rely on
|
|
69
|
+
yahnsnot daemonizing, but we still want to be able to process
|
|
70
|
+
SIGWINCH in that case.
|
|
71
|
+
|
|
72
|
+
stdout and stderr may be redirected to a pipe (for cronolog or
|
|
73
|
+
similar process), so those are less likely to be attached to a TTY
|
|
74
|
+
than stdin. This also allows users to process SIGWINCH when running
|
|
75
|
+
inside a regular terminal if they redirect stdin to /dev/null.
|
|
76
|
+
|
|
77
|
+
This follows unicorn commit a6077391bb62d0b13016084b0eea36b987afe8f0
|
|
78
|
+
Thanks to Dan Moore for suggesting it on the unicorn list.
|
|
79
|
+
|
|
80
|
+
A few more minor changes, more memory reduction changes coming...
|
|
81
|
+
|
|
82
|
+
* proxy_pass: no point in closing StringIO
|
|
83
|
+
* proxy_pass: allow filtering or overriding response headers
|
|
84
|
+
* support SIGWINCH even if not daemonized
|
|
85
|
+
* use Unicorn::HttpParser#response_start_sent accessor
|
|
86
|
+
* reduce inline constant cache overheads
|
|
87
|
+
* proxy_pass: skip tests if kcar is missing
|
|
88
|
+
* ensure body is closed during hijack
|
|
89
|
+
|
|
90
|
+
=== yahns 1.7.0 - rack.hijack improvements and more / 2015-05-11 01:38 UTC
|
|
91
|
+
|
|
92
|
+
Nothing really significant, so there's no need to upgrade if
|
|
93
|
+
you're not affected by the minor fixes and changes in this
|
|
94
|
+
release.
|
|
95
|
+
|
|
96
|
+
For all users, LoadError and SyntaxError exceptions are now
|
|
97
|
+
logged and non-fatal within worker threads serving application
|
|
98
|
+
code. Thanks to Lin Jen-Shin <godfat@godfat.org> for bringing
|
|
99
|
+
this up on the mailing list.
|
|
100
|
+
|
|
101
|
+
Additionally, temporary files buffered to the filesystem will
|
|
102
|
+
now support the Rack::TempfileReaper middleware in rack 1.6+
|
|
103
|
+
|
|
104
|
+
For rack.hijack users, there are some changes and improvements.
|
|
105
|
+
rack.hijack should return a usable IO-like object for SSL users,
|
|
106
|
+
now. The rack.input object is no longer closed on hijacking,
|
|
107
|
+
allowing apps to continue using buffered input after hijacking.
|
|
108
|
+
There is also a bugfix for the rare apps which hijack requests
|
|
109
|
+
after emitting 100-continue responses.
|
|
110
|
+
|
|
111
|
+
Note: there is also a work-in-progress and under-documented
|
|
112
|
+
asynchronous Yayns::ProxyPass Rack app which uses rack.hijack
|
|
113
|
+
internally. This will allow yahns to act as a fully-buffering
|
|
114
|
+
reverse proxy to upstream servers which cannot handle slow
|
|
115
|
+
clients. Yahns::ProxyPass NOT production-ready as of this
|
|
116
|
+
release. The old, synchronous extras/proxy_pass.rb code
|
|
117
|
+
remains usable.
|
|
118
|
+
|
|
119
|
+
There's also the usual round of minor code bloat reduction.
|
|
120
|
+
|
|
121
|
+
=== yahns 1.6.0 - reduced allocations and bugfixes / 2015-03-09 09:33 UTC
|
|
122
|
+
|
|
123
|
+
This release fixes a bug where previously-configured-but-now-removed
|
|
124
|
+
listeners were inherited across USR2 upgrades are not shutdown
|
|
125
|
+
immediately in the child.
|
|
126
|
+
|
|
127
|
+
There are also minor reductions in allocations which can save a few
|
|
128
|
+
hundred bytes statically and also whenever write buffering is necessary
|
|
129
|
+
for large responses.
|
|
130
|
+
|
|
131
|
+
Some minor documentation updates improvements in extras, too.
|
|
132
|
+
|
|
133
|
+
shortlog of changes since 1.5.0:
|
|
134
|
+
README: add link to mailing list archives
|
|
135
|
+
test_ssl: factor out server SSLContext creation
|
|
136
|
+
doc: add design_notes document
|
|
137
|
+
reduce File::Stat object allocations
|
|
138
|
+
update comments about wbuf_close return values
|
|
139
|
+
wbuf: lazily (re)create temporary file
|
|
140
|
+
fix compatibility with unicorn.git
|
|
141
|
+
skip tests requiring String#b on 1.9.3
|
|
142
|
+
use the monotonic clock under Ruby 2.1+
|
|
143
|
+
favor Class.new for method-less classes
|
|
144
|
+
extras/proxy_pass: save memory in String#split arg
|
|
145
|
+
extras/proxy_pass: do not name unused variable
|
|
146
|
+
extras/proxy_pass: log exceptions leading to 502
|
|
147
|
+
extras/proxy_pass: flesh out upload support + tests
|
|
148
|
+
acceptor: close inherited-but-unneeded sockets
|
|
149
|
+
|
|
150
|
+
See the git repository for more: git clone git://yhbt.net/yahns
|
|
151
|
+
|
|
152
|
+
=== yahns 1.5.0 - initial OpenSSL support and bugfixes / 2014-12-21 02:22 UTC
|
|
153
|
+
|
|
154
|
+
This release adds basic OpenSSL support for HTTPS connections.
|
|
155
|
+
|
|
156
|
+
Users must supply a OpenSSL::SSL::SSLContext object which yahns will use
|
|
157
|
+
as-is. yahns will only support HTTPS on Ruby 2.1 and later, as we rely
|
|
158
|
+
on "exception: false" in the read_nonblock and write_nonblock methods in
|
|
159
|
+
OpenSSL::SSL::SSLSocket.
|
|
160
|
+
|
|
161
|
+
See the Ruby standard library documentation on how to configure
|
|
162
|
+
OpenSSL::SSL::SSLContext objects to pass to the yahns "listen" directive
|
|
163
|
+
Editing the yahns config file to use OpenSSL goes something like this:
|
|
164
|
+
|
|
165
|
+
require 'openssl' # we will not do this for the user, even
|
|
166
|
+
ctx = OpenSSL::SSL::SSLContext.new
|
|
167
|
+
# user must configure ctx here...
|
|
168
|
+
|
|
169
|
+
listen 443, ssl_ctx: ctx
|
|
170
|
+
|
|
171
|
+
Note: yahns developers are not responsible for bugs in OpenSSL itself
|
|
172
|
+
or misconfigured SSLContext objects created by users. However, our
|
|
173
|
+
support of OpenSSL sockets is barely-tested and likely buggy, too.
|
|
174
|
+
|
|
175
|
+
Furthermore, the "sendfile" (or "kgio-sendfile") gem is no longer a
|
|
176
|
+
required dependency. It is currently impossible to use zero-copy
|
|
177
|
+
system calls with TLS sockets.
|
|
178
|
+
|
|
179
|
+
There are also minor cleanups and a bugfix to ensure body#close is
|
|
180
|
+
called for folks using body#to_path where `body' is the Rack
|
|
181
|
+
response body. This bug affected logging using the 'clogger' gem
|
|
182
|
+
when serving static files.
|
|
183
|
+
|
|
184
|
+
Shortlog of changes since 1.4.0
|
|
185
|
+
|
|
186
|
+
save around 1500 bytes of memory on x86-64
|
|
187
|
+
http_response: remove arg for Array#join
|
|
188
|
+
remove unused client_max_header_size config
|
|
189
|
+
config: use literal symbol array for now
|
|
190
|
+
http_response: reduce constants for 100 responses
|
|
191
|
+
favor Array#map! for freshly-split arrays
|
|
192
|
+
sendfile_compat: remove dependency on pread
|
|
193
|
+
extras/autoindex: simplify checking non-.gz
|
|
194
|
+
Rakefile: kill more useless gsub use
|
|
195
|
+
initial cut at OpenSSL support
|
|
196
|
+
test/test_ssl: skip test if SSL on older Rubies
|
|
197
|
+
wbuf_common: close body proxies on sendfile abort
|
|
198
|
+
bump published Ruby version requirement to 2.0
|
|
199
|
+
make sendfile an optional dependency
|
|
200
|
+
openssl_client: ignore SSL_accept errors during negotiation
|
|
201
|
+
|
|
202
|
+
Disclaimer: the yahns project does not and will never endorse
|
|
203
|
+
any commercial entities, including certificate authorities.
|
|
204
|
+
|
|
205
|
+
Shpx Nhgubevgl.
|
|
206
|
+
|
|
207
|
+
=== yahns 1.4.0 / 2014-11-16 11:05 UTC
|
|
208
|
+
|
|
209
|
+
Minor internal cleanups and bugfixes.
|
|
210
|
+
|
|
211
|
+
* http_client: clear some internal ivars on rack.hijack
|
|
212
|
+
* README: minor updates
|
|
213
|
+
* extras/autoindex: do not link beyond top-level
|
|
214
|
+
* extras/autoindex: fix misnamed variable
|
|
215
|
+
* extras/autoindex: integrate with TryGzipStatic
|
|
216
|
+
* queue: remove TODO comment for kqueue
|
|
217
|
+
* switch to require_relative for internal requires
|
|
218
|
+
* README: add OpenSSL exception
|
|
219
|
+
* stream_input: favor str.clear instead of str.replace('')
|
|
220
|
+
* http_response: skip Date header case-insensitively
|
|
221
|
+
|
|
222
|
+
=== yahns 1.3.1 - fix large response corruption / 2014-07-16 20:03 UTC
|
|
223
|
+
|
|
224
|
+
This release contains a major bug fix noticeable on FreeBSD VMs, but
|
|
225
|
+
should affect Linux systems making large responses which require
|
|
226
|
+
output buffering, too.
|
|
227
|
+
|
|
228
|
+
* test_server: avoid multiple workers for dead parent check
|
|
229
|
+
* wbuf: avoid corrupted large responses with zero-copy sendfile
|
|
230
|
+
|
|
231
|
+
=== yahns 1.3.0 - new mailing list + fixups / 2014-05-12 01:44 UTC
|
|
232
|
+
|
|
233
|
+
Since RubyForge is going away, this release updates the
|
|
234
|
+
documentation to point to the new public-inbox and mailing list
|
|
235
|
+
at at:
|
|
236
|
+
|
|
237
|
+
yahns-public@yhbt.net
|
|
238
|
+
(no subscription required, plain text only)
|
|
239
|
+
|
|
240
|
+
ssoma[1] git archives: git://yhbt.net/yahns-public
|
|
241
|
+
browser-friendly archives: http://yhbt.net/yahns-public/
|
|
242
|
+
Traditional mailing list subscription is possible by sending
|
|
243
|
+
a blank email to: yahns-public+subscribe@yhbt.net
|
|
244
|
+
|
|
245
|
+
This also reworks master->worker signalling to use a pipe,
|
|
246
|
+
avoiding problems with libraries which do not respond well
|
|
247
|
+
to being interrupted by signals. There are also minor
|
|
248
|
+
bugfixes and cleanups, see "git log -p" for full details.
|
|
249
|
+
|
|
250
|
+
[1] http://ssoma.public-inbox.org/
|
|
251
|
+
|
|
252
|
+
=== yahns 1.2.0 - preliminary kqueue/FreeBSD support / 2014-03-15 07:43 UTC
|
|
253
|
+
|
|
254
|
+
This release now depends on "kgio-sendfile", a (hopefully temporary)
|
|
255
|
+
fork of the original sendfile gem for mainline ruby trunk
|
|
256
|
+
compatibility and a (probably correct) FreeBSD-related bugfix.
|
|
257
|
+
|
|
258
|
+
kqueue/FreeBSD support is considered highly experimental. Of course;
|
|
259
|
+
you should never rely on anything in production unless you can get bugs
|
|
260
|
+
fixed in every part of your stack; even the kernel. yahns (ab)uses
|
|
261
|
+
kqueue and epoll in uncommon ways, so you may encounter subtle kernel
|
|
262
|
+
bugs along the way.
|
|
263
|
+
|
|
264
|
+
Because yahns has been self-hosting its own website for months without
|
|
265
|
+
crashes or major problems (BORING! :P), I've decided to start hosting the
|
|
266
|
+
yahns website <http://yahns.YHBT.net/README> with ruby trunk (currently
|
|
267
|
+
r45341).
|
|
268
|
+
|
|
269
|
+
yahns - dangerous by design (and sleepy!)
|
|
270
|
+
|
|
271
|
+
=== yahns 1.1.0 - MOAR SLEEPY / 2014-02-04 22:14 UTC
|
|
272
|
+
|
|
273
|
+
On responses with a known, non-zero Content-Length, yahns will now
|
|
274
|
+
automatically use the MSG_MORE flag when sending HTTP headers. This
|
|
275
|
+
reduces TCP packet transmits and allows clients to wake up and read
|
|
276
|
+
one less time.
|
|
277
|
+
|
|
278
|
+
This is similar to the TCP_NOPUSH/TCP_CORK functionality of other
|
|
279
|
+
servers, but requires no additional syscalls. It is only supported
|
|
280
|
+
on the Linux kernel, however (but yahns is currently epoll-only
|
|
281
|
+
with kqueue support on the horizon).
|
|
282
|
+
|
|
283
|
+
Eric Wong (5):
|
|
284
|
+
quiet down EHOSTUNREACH errors
|
|
285
|
+
http_response: use kgio_syssend with MSG_MORE
|
|
286
|
+
load yahns/version file
|
|
287
|
+
socket_helper: remove SO_REUSEPORT define for untested arches
|
|
288
|
+
response: do not use MSG_MORE on empty bodies
|
|
289
|
+
|
|
290
|
+
=== yahns 1.0.0 / 2014-01-02 01:37 UTC
|
|
291
|
+
|
|
292
|
+
Mostly fixes for the extras/* stuff running on yahns.YHBT.net and
|
|
293
|
+
documentation/packaging fixes. Anyways, this is hosting the
|
|
294
|
+
yahns website for a while now (running rack.git) without any
|
|
295
|
+
major issues.
|
|
296
|
+
|
|
297
|
+
Also, the mailing list will need to move/change because Rubyforge is
|
|
298
|
+
going away. Everything I said for the unicorn ML applies to this list,
|
|
299
|
+
too: http://mid.gmane.org/20131217015614.GB1125@dcvr.yhbt.net
|
|
300
|
+
|
|
301
|
+
=== yahns 0.0.3 - more bugfixes, still working! / 2013-11-10 21:42 UTC
|
|
302
|
+
|
|
303
|
+
There are several important bugfixes around graceful shutdown.
|
|
304
|
+
The shutdown_timeout directive should work more consistently
|
|
305
|
+
and work even if an app is streaming/trickling slowly to
|
|
306
|
+
a client.
|
|
307
|
+
|
|
308
|
+
This also plugs an odd FD leak in response buffering.
|
|
309
|
+
|
|
310
|
+
There's also some internal comments/documentation for folks
|
|
311
|
+
reviewing the strange internals of yahns.
|
|
312
|
+
|
|
313
|
+
Otherwise, it seems to be capable of serving its own website,
|
|
314
|
+
http://yahns.yhbt.net/README quite well.
|
|
315
|
+
|
|
316
|
+
Rack application authors merely need to write code as if they have a
|
|
317
|
+
gun to their head if they expect to keep code running on yahns.
|
|
318
|
+
Again, yahns is extremely intolerant of bugs in the applications
|
|
319
|
+
it hosts. Otherwise I'm comfortable in the stability of yahns
|
|
320
|
+
itself.
|
|
321
|
+
|
|
322
|
+
Eric Wong (17):
|
|
323
|
+
http_client: do not dump backtrace on ETIMEDOUT
|
|
324
|
+
ensure we close response body if buffering caught up
|
|
325
|
+
http_response: reorder wbuf_maybe on successful early flush
|
|
326
|
+
wbuf: document reasoning for the design of these clases
|
|
327
|
+
build: improve NEWS generation, add atom feed
|
|
328
|
+
exec_cgi: release pipe/pid sooner
|
|
329
|
+
SIGWINCH works after SIGUSR2 upgrades
|
|
330
|
+
shutdown_timeout works around long-running response/apps
|
|
331
|
+
doc: recommend worker_processes if the app uses SIGCHLD
|
|
332
|
+
fdmap: simplify IO expiry interface
|
|
333
|
+
fdmap: document + fix for level-trigger
|
|
334
|
+
queue_epoll: document epoll concurrency caveats
|
|
335
|
+
doc: caution users against disabling buffering
|
|
336
|
+
queue: eliminate :wait_readwrite
|
|
337
|
+
test: exec_cgi test uses worker_processes
|
|
338
|
+
test_server: remove unneccessary IO#wait call
|
|
339
|
+
test: workaround sockets not being binary on rbx
|
|
340
|
+
|
|
341
|
+
=== yahns 0.0.2 - barely working! / 2013-11-06 03:24 UTC
|
|
342
|
+
|
|
343
|
+
Lots of bugfixes and tweaks, but everything appears to mostly work
|
|
344
|
+
for Rack and HTTP. We are self-hosting our site:
|
|
345
|
+
|
|
346
|
+
http://yahns.yhbt.net/README
|
|
347
|
+
(And if you can't access it, I screwed something up!)
|
|
348
|
+
|
|
349
|
+
There is a yahns-rackup(1) wrapper for quick-starting Rack
|
|
350
|
+
applications without having to read any documentation,
|
|
351
|
+
as it works exactly like rackup(1) (just leave "-s/--server"
|
|
352
|
+
out)
|
|
353
|
+
|
|
354
|
+
New manpages: yahns(1), yahns_config(5), yahns-rackup(1)
|
|
355
|
+
|
|
356
|
+
Eric Wong (110):
|
|
357
|
+
test/helper: correctly handle exit code in test runner
|
|
358
|
+
log: workaround atomicity issues for stdio vs non-stdio descriptors
|
|
359
|
+
tests: improve output to show RUBY_DESCRIPTION and full path
|
|
360
|
+
tests: support disabling parallelization env
|
|
361
|
+
test_output_buffering: workaround a rbx bug
|
|
362
|
+
socket_helper: do not log sizes on rbx for now
|
|
363
|
+
config: do not set cloexec on stdout/stderr
|
|
364
|
+
test_wbuf: avoid floating point arg to read_nonblock
|
|
365
|
+
rework shutdown for systems w/o rb_thread_fd_close
|
|
366
|
+
SIGUSR2 uses fork + exec again instead of Process.spawn
|
|
367
|
+
wip for EADDRINUSE failure
|
|
368
|
+
test_bin: shutdown socket when not inheriting
|
|
369
|
+
README: update with support status for MRI/RBX
|
|
370
|
+
server: skip killing acceptors on rbx for now
|
|
371
|
+
server (cleanup): avoid interning word for log message
|
|
372
|
+
server: abort loudly if we have old threads running
|
|
373
|
+
reinstate retry delay for binding new listeners
|
|
374
|
+
test/helper: Dir.mktmpdir works without blocks
|
|
375
|
+
rework acceptor thread shutdown (again)
|
|
376
|
+
server (minor cleanup): use Symbol#to_proc
|
|
377
|
+
test_server: remove skipped multi-process balance test
|
|
378
|
+
tests: do not lose exceptions on quit timeouts
|
|
379
|
+
tests: enforce close_on_exec on all client sockets
|
|
380
|
+
server: switch abort to raise on BUG
|
|
381
|
+
config: implement atfork handlers
|
|
382
|
+
test/server_helper: fix undefined variable
|
|
383
|
+
favor client timeout if lower than desperate timeout
|
|
384
|
+
tests: enable checks for desperate client expiry
|
|
385
|
+
implement + test Expect: 100-continue handling
|
|
386
|
+
quitter: save one syscall and implement for non-eventfd
|
|
387
|
+
enforce FD_CLOEXEC on all pipes, including tests
|
|
388
|
+
test_expect_100: cleanup unused var
|
|
389
|
+
http_client: reduce the size of the yahns_step method
|
|
390
|
+
output_buffering handles odd EAGAIN cases
|
|
391
|
+
fix output buffer corner-case for static files
|
|
392
|
+
tests: increase mkserver use to reduce LoC
|
|
393
|
+
fix SIGCHLD w/o workers + PID file renames
|
|
394
|
+
test_client_expire: disable output buffering in test
|
|
395
|
+
StreamFile and TmpIO attempt expiry on EMFILE/ENFILE
|
|
396
|
+
server: avoid metaclass for acceptors
|
|
397
|
+
support SO_REUSEPORT on new listeners (:reuseport)
|
|
398
|
+
doc: ignore RDoc for all internal classes
|
|
399
|
+
rack: leave RACK_ENV unset by us
|
|
400
|
+
associate private/anonymous queues correctly
|
|
401
|
+
queue_epoll: remove check for closed descriptor
|
|
402
|
+
config: disallow defining new, named queues inside app
|
|
403
|
+
doc: preliminary manpages for yahns(1), yahns_config(5)
|
|
404
|
+
config: comment for atfork_* hook definitions
|
|
405
|
+
implement user switching
|
|
406
|
+
configurator: validate :reuseport for boolean-ess
|
|
407
|
+
config: working_directory is only called at top-level
|
|
408
|
+
server: fix out-of-date comment regarding bind/pid order
|
|
409
|
+
config: reject negative float for client_expire_ratio
|
|
410
|
+
lower client_body_buffer_size to 8K (from 114K)
|
|
411
|
+
implement client_timeout for streaming inputs
|
|
412
|
+
gem: install manpages in the RubyGems package
|
|
413
|
+
stream_input: use thread-local rbuf to avoid some garbage
|
|
414
|
+
test output_buffering with hijacked responses
|
|
415
|
+
test_input: close client when we're done with it
|
|
416
|
+
allow multiple blocking threads per listen socket
|
|
417
|
+
acceptor: account for inheriting dead descriptors
|
|
418
|
+
server: fix incorrect receiver of method call
|
|
419
|
+
socket_helper: account for undefined options
|
|
420
|
+
test for binding Unix stream sockets
|
|
421
|
+
Rack hijack issues EPOLL_CTL_DEL
|
|
422
|
+
config: raise ArgumentError for consistency
|
|
423
|
+
tests for SIGTTIN and SIGTTOU
|
|
424
|
+
use Hash#each instead of Hash#each_pair
|
|
425
|
+
add test for working_directory config parameter
|
|
426
|
+
test_unix_socket: remember to close IO when done
|
|
427
|
+
test for overriding rack.errors destination
|
|
428
|
+
test_server: improve working_directory test robustness
|
|
429
|
+
fdmap: prevent possible/theoretical race
|
|
430
|
+
implement shutdown_timeout and expiry on graceful shutdown
|
|
431
|
+
doc: fix client_timeout documentation in yahns_config
|
|
432
|
+
implement before_exec hook
|
|
433
|
+
comment to explain YAHNS_FD env
|
|
434
|
+
remove "worker_" prefix from atfork hooks
|
|
435
|
+
remove arity enforcement for atfork_* hooks
|
|
436
|
+
allow atfork_* hooks inside app blocks for ease-of-management
|
|
437
|
+
doc: disambiguate threads: option for listen directive
|
|
438
|
+
yahns-rackup launcher
|
|
439
|
+
enable client expiry for non-TCP sockets
|
|
440
|
+
config: allow Float for timeouts
|
|
441
|
+
tests: more intelligent waiting for output buffering
|
|
442
|
+
doc: add HACKING/INSTALL docs + minitest dependency
|
|
443
|
+
wbuf: bypass buffering if buffers are caught up
|
|
444
|
+
wbuf: reset FS (sendfile) buffer if caught up
|
|
445
|
+
wbuf: only enable bypass if we've truncated
|
|
446
|
+
input and output buffers support tmpdir: arguments
|
|
447
|
+
tests: further speed up output buffering test
|
|
448
|
+
test trysendfile usage with UNIX sockets
|
|
449
|
+
client_expire_generic: drop kgio_write wrapper
|
|
450
|
+
remove unnecessary map(&:to_s) before Array#join
|
|
451
|
+
account for truncated/expanded static files
|
|
452
|
+
http: do not drop Content-Range from response headers
|
|
453
|
+
worker-less server should not waitpid indiscriminately
|
|
454
|
+
stream_file: only close FDs we opened ourselves
|
|
455
|
+
tests: smaller buffer for big header test
|
|
456
|
+
add extras for exec_cgi and try_gzip_static
|
|
457
|
+
http_response: fix app-controlled close + test
|
|
458
|
+
examples: flesh out the example configs a bit
|
|
459
|
+
README: add disclaimer
|
|
460
|
+
server: improve shutdown messages
|
|
461
|
+
extras: add README
|
|
462
|
+
extras: add autoindex module
|
|
463
|
+
extras: add proxy_pass Rack app
|
|
464
|
+
rackup_handler: fix ordering of working_directory
|
|
465
|
+
worker: avoid double SIGQUIT on unexpected parent death
|
|
466
|
+
server: log error instead of raising for leftover socks
|
|
467
|
+
|
|
468
|
+
=== yahns 0.0.1 - many small fixes and test coverage / 2013-10-20 01:00 UTC
|
|
469
|
+
|
|
470
|
+
Just a bunch of improvements found while running tests.
|
|
471
|
+
It's still incomplete and missing a bunch of features from
|
|
472
|
+
existing servers, but maybe it works...
|
|
473
|
+
|
|
474
|
+
Clone git://yhbt.net/yahns.git for full details
|
|
475
|
+
|
|
476
|
+
Eric Wong (18):
|
|
477
|
+
test/helper: fix __covmerge race for forked processes
|
|
478
|
+
wire up client_max_body_size limits
|
|
479
|
+
fix and test Rack hijack support
|
|
480
|
+
SIGUSR2 handling uses Process.spawn + tests
|
|
481
|
+
fix USR1 log reopening when using worker_processes
|
|
482
|
+
test_bin: add additional tests for SIGHUP
|
|
483
|
+
test_server: skip test_mp_balance for now
|
|
484
|
+
test/server_helper: dump entire log on errors
|
|
485
|
+
ensure we stop all threads at exit
|
|
486
|
+
GNUmakefile: avoid calling exit in test-mt
|
|
487
|
+
test_bin: set close-on-exec for Ruby 1.9.3 compatibility
|
|
488
|
+
test_server: bigger delays for graceful shutdown test
|
|
489
|
+
tests: disable $-w on 1.9.3 to quiet down warnings
|
|
490
|
+
test/helper: prevent minitest at_exit from running in children
|
|
491
|
+
recheck IO#closed? on thread pools after a short delay
|
|
492
|
+
test_config: isolate directories with logs
|
|
493
|
+
test_reopen_logs: workaround timing problem with worker_processes
|
|
494
|
+
set close-on-exec on all long-lived descriptors
|
|
19
495
|
|
|
20
|
-
For Ruby 2.2 users, overall performance should be largely
|
|
21
|
-
unchanged from 1.7.0 to 1.8.0
|
|
22
|
-
|
|
23
|
-
shortlog of changes since 1.7.0:
|
|
24
|
-
|
|
25
|
-
* use opt_str_freeze for Hash#delete
|
|
26
|
-
* test/helper: warn atomically
|
|
27
|
-
* generate response status strings dynamically
|
|
28
|
-
* reduce constants and optimize for Ruby 2.2+
|
|
29
|
-
* http_response: reduce bytecode size
|
|
30
|
-
* apply TCP socket options on inherited sockets
|
|
31
|
-
* test/test_rack_hijack.rb: try to increase test reliability
|
|
32
|
-
* emulate sd_listen_fds for systemd support
|
|
33
|
-
* test/test_rack_hijack: ensure proper ordering of log messages
|
|
34
|
-
|
|
35
|
-
yahns 1.8.0 - minor updates / 2015-06-11
|
|
36
|
-
----------------------------------------
|
|
37
|
-
|
|
38
|
-
Most notably, the Rack response body is now closed during rack.hijack.
|
|
39
|
-
|
|
40
|
-
Middlewares such as Rack::Lock (used by Rails) break badly unless
|
|
41
|
-
the response body is closed on hijack, so we will close it to follow
|
|
42
|
-
the lead of other popular Rack servers.
|
|
43
|
-
|
|
44
|
-
While it's unclear if there's anybody using rack.hijack besides
|
|
45
|
-
yahns/proxy_pass we'll try to emulate the behavior of other servers
|
|
46
|
-
as much as possible.
|
|
47
|
-
|
|
48
|
-
ref: https://github.com/ngauthier/tubesock/issues/10
|
|
49
|
-
|
|
50
|
-
We'll also support SIGWINCH if not daemonized
|
|
51
|
-
|
|
52
|
-
This has no effect for the (default) single process case with
|
|
53
|
-
no master/worker relationship as that does not support SIGWINCH.
|
|
54
|
-
|
|
55
|
-
Some process managers such as foreman and daemontools rely on
|
|
56
|
-
yahnsnot daemonizing, but we still want to be able to process
|
|
57
|
-
SIGWINCH in that case.
|
|
58
|
-
|
|
59
|
-
stdout and stderr may be redirected to a pipe (for cronolog or
|
|
60
|
-
similar process), so those are less likely to be attached to a TTY
|
|
61
|
-
than stdin. This also allows users to process SIGWINCH when running
|
|
62
|
-
inside a regular terminal if they redirect stdin to /dev/null.
|
|
63
|
-
|
|
64
|
-
This follows unicorn commit a6077391bb62d0b13016084b0eea36b987afe8f0
|
|
65
|
-
Thanks to Dan Moore for suggesting it on the unicorn list.
|
|
66
|
-
|
|
67
|
-
A few more minor changes, more memory reduction changes coming...
|
|
68
|
-
|
|
69
|
-
* proxy_pass: no point in closing StringIO
|
|
70
|
-
* proxy_pass: allow filtering or overriding response headers
|
|
71
|
-
* support SIGWINCH even if not daemonized
|
|
72
|
-
* use Unicorn::HttpParser#response_start_sent accessor
|
|
73
|
-
* reduce inline constant cache overheads
|
|
74
|
-
* proxy_pass: skip tests if kcar is missing
|
|
75
|
-
* ensure body is closed during hijack
|
|
76
|
-
|
|
77
|
-
yahns 1.7.0 - rack.hijack improvements and more / 2015-05-11
|
|
78
|
-
------------------------------------------------------------
|
|
79
|
-
|
|
80
|
-
Nothing really significant, so there's no need to upgrade if
|
|
81
|
-
you're not affected by the minor fixes and changes in this
|
|
82
|
-
release.
|
|
83
|
-
|
|
84
|
-
For all users, LoadError and SyntaxError exceptions are now
|
|
85
|
-
logged and non-fatal within worker threads serving application
|
|
86
|
-
code. Thanks to Lin Jen-Shin <godfat@godfat.org> for bringing
|
|
87
|
-
this up on the mailing list.
|
|
88
|
-
|
|
89
|
-
Additionally, temporary files buffered to the filesystem will
|
|
90
|
-
now support the Rack::TempfileReaper middleware in rack 1.6+
|
|
91
|
-
|
|
92
|
-
For rack.hijack users, there are some changes and improvements.
|
|
93
|
-
rack.hijack should return a usable IO-like object for SSL users,
|
|
94
|
-
now. The rack.input object is no longer closed on hijacking,
|
|
95
|
-
allowing apps to continue using buffered input after hijacking.
|
|
96
|
-
There is also a bugfix for the rare apps which hijack requests
|
|
97
|
-
after emitting 100-continue responses.
|
|
98
|
-
|
|
99
|
-
Note: there is also a work-in-progress and under-documented
|
|
100
|
-
asynchronous Yayns::ProxyPass Rack app which uses rack.hijack
|
|
101
|
-
internally. This will allow yahns to act as a fully-buffering
|
|
102
|
-
reverse proxy to upstream servers which cannot handle slow
|
|
103
|
-
clients. Yahns::ProxyPass NOT production-ready as of this
|
|
104
|
-
release. The old, synchronous extras/proxy_pass.rb code
|
|
105
|
-
remains usable.
|
|
106
|
-
|
|
107
|
-
There's also the usual round of minor code bloat reduction.
|
|
108
|
-
|
|
109
|
-
yahns 1.6.0 - reduced allocations and bugfixes / 2015-03-09
|
|
110
|
-
-----------------------------------------------------------
|
|
111
|
-
|
|
112
|
-
This release fixes a bug where previously-configured-but-now-removed
|
|
113
|
-
listeners were inherited across USR2 upgrades are not shutdown
|
|
114
|
-
immediately in the child.
|
|
115
|
-
|
|
116
|
-
There are also minor reductions in allocations which can save a few
|
|
117
|
-
hundred bytes statically and also whenever write buffering is necessary
|
|
118
|
-
for large responses.
|
|
119
|
-
|
|
120
|
-
Some minor documentation updates improvements in extras, too.
|
|
121
|
-
|
|
122
|
-
shortlog of changes since 1.5.0:
|
|
123
|
-
README: add link to mailing list archives
|
|
124
|
-
test_ssl: factor out server SSLContext creation
|
|
125
|
-
doc: add design_notes document
|
|
126
|
-
reduce File::Stat object allocations
|
|
127
|
-
update comments about wbuf_close return values
|
|
128
|
-
wbuf: lazily (re)create temporary file
|
|
129
|
-
fix compatibility with unicorn.git
|
|
130
|
-
skip tests requiring String#b on 1.9.3
|
|
131
|
-
use the monotonic clock under Ruby 2.1+
|
|
132
|
-
favor Class.new for method-less classes
|
|
133
|
-
extras/proxy_pass: save memory in String#split arg
|
|
134
|
-
extras/proxy_pass: do not name unused variable
|
|
135
|
-
extras/proxy_pass: log exceptions leading to 502
|
|
136
|
-
extras/proxy_pass: flesh out upload support + tests
|
|
137
|
-
acceptor: close inherited-but-unneeded sockets
|
|
138
|
-
|
|
139
|
-
See the git repository for more: git clone git://yhbt.net/yahns
|
|
140
|
-
|
|
141
|
-
yahns 1.5.0 - initial OpenSSL support and bugfixes / 2014-12-21
|
|
142
|
-
---------------------------------------------------------------
|
|
143
|
-
|
|
144
|
-
This release adds basic OpenSSL support for HTTPS connections.
|
|
145
|
-
|
|
146
|
-
Users must supply a OpenSSL::SSL::SSLContext object which yahns will use
|
|
147
|
-
as-is. yahns will only support HTTPS on Ruby 2.1 and later, as we rely
|
|
148
|
-
on "exception: false" in the read_nonblock and write_nonblock methods in
|
|
149
|
-
OpenSSL::SSL::SSLSocket.
|
|
150
|
-
|
|
151
|
-
See the Ruby standard library documentation on how to configure
|
|
152
|
-
OpenSSL::SSL::SSLContext objects to pass to the yahns "listen" directive
|
|
153
|
-
Editing the yahns config file to use OpenSSL goes something like this:
|
|
154
|
-
|
|
155
|
-
require 'openssl' # we will not do this for the user, even
|
|
156
|
-
ctx = OpenSSL::SSL::SSLContext.new
|
|
157
|
-
# user must configure ctx here...
|
|
158
|
-
|
|
159
|
-
listen 443, ssl_ctx: ctx
|
|
160
|
-
|
|
161
|
-
Note: yahns developers are not responsible for bugs in OpenSSL itself
|
|
162
|
-
or misconfigured SSLContext objects created by users. However, our
|
|
163
|
-
support of OpenSSL sockets is barely-tested and likely buggy, too.
|
|
164
|
-
|
|
165
|
-
Furthermore, the "sendfile" (or "kgio-sendfile") gem is no longer a
|
|
166
|
-
required dependency. It is currently impossible to use zero-copy
|
|
167
|
-
system calls with TLS sockets.
|
|
168
|
-
|
|
169
|
-
There are also minor cleanups and a bugfix to ensure body#close is
|
|
170
|
-
called for folks using body#to_path where `body' is the Rack
|
|
171
|
-
response body. This bug affected logging using the 'clogger' gem
|
|
172
|
-
when serving static files.
|
|
173
|
-
|
|
174
|
-
Shortlog of changes since 1.4.0
|
|
175
|
-
|
|
176
|
-
save around 1500 bytes of memory on x86-64
|
|
177
|
-
http_response: remove arg for Array#join
|
|
178
|
-
remove unused client_max_header_size config
|
|
179
|
-
config: use literal symbol array for now
|
|
180
|
-
http_response: reduce constants for 100 responses
|
|
181
|
-
favor Array#map! for freshly-split arrays
|
|
182
|
-
sendfile_compat: remove dependency on pread
|
|
183
|
-
extras/autoindex: simplify checking non-.gz
|
|
184
|
-
Rakefile: kill more useless gsub use
|
|
185
|
-
initial cut at OpenSSL support
|
|
186
|
-
test/test_ssl: skip test if SSL on older Rubies
|
|
187
|
-
wbuf_common: close body proxies on sendfile abort
|
|
188
|
-
bump published Ruby version requirement to 2.0
|
|
189
|
-
make sendfile an optional dependency
|
|
190
|
-
openssl_client: ignore SSL_accept errors during negotiation
|
|
191
|
-
|
|
192
|
-
Disclaimer: the yahns project does not and will never endorse
|
|
193
|
-
any commercial entities, including certificate authorities.
|
|
194
|
-
|
|
195
|
-
Shpx Nhgubevgl.
|
|
196
|
-
|
|
197
|
-
yahns 1.4.0 / 2014-11-16
|
|
198
|
-
------------------------
|
|
199
|
-
|
|
200
|
-
Minor internal cleanups and bugfixes.
|
|
201
|
-
|
|
202
|
-
* http_client: clear some internal ivars on rack.hijack
|
|
203
|
-
* README: minor updates
|
|
204
|
-
* extras/autoindex: do not link beyond top-level
|
|
205
|
-
* extras/autoindex: fix misnamed variable
|
|
206
|
-
* extras/autoindex: integrate with TryGzipStatic
|
|
207
|
-
* queue: remove TODO comment for kqueue
|
|
208
|
-
* switch to require_relative for internal requires
|
|
209
|
-
* README: add OpenSSL exception
|
|
210
|
-
* stream_input: favor str.clear instead of str.replace('')
|
|
211
|
-
* http_response: skip Date header case-insensitively
|
|
212
|
-
|
|
213
|
-
yahns 1.3.1 - fix large response corruption / 2014-07-16
|
|
214
|
-
--------------------------------------------------------
|
|
215
|
-
|
|
216
|
-
This release contains a major bug fix noticeable on FreeBSD VMs, but
|
|
217
|
-
should affect Linux systems making large responses which require
|
|
218
|
-
output buffering, too.
|
|
219
|
-
|
|
220
|
-
* test_server: avoid multiple workers for dead parent check
|
|
221
|
-
* wbuf: avoid corrupted large responses with zero-copy sendfile
|
|
222
|
-
|
|
223
|
-
yahns 1.3.0 - new mailing list + fixups / 2014-05-12
|
|
224
|
-
----------------------------------------------------
|
|
225
|
-
|
|
226
|
-
Since RubyForge is going away, this release updates the
|
|
227
|
-
documentation to point to the new public-inbox and mailing list
|
|
228
|
-
at at:
|
|
229
|
-
|
|
230
|
-
yahns-public@yhbt.net
|
|
231
|
-
(no subscription required, plain text only)
|
|
232
|
-
|
|
233
|
-
ssoma[1] git archives: git://yhbt.net/yahns-public
|
|
234
|
-
browser-friendly archives: http://yhbt.net/yahns-public/
|
|
235
|
-
Traditional mailing list subscription is possible by sending
|
|
236
|
-
a blank email to: yahns-public+subscribe@yhbt.net
|
|
237
|
-
|
|
238
|
-
This also reworks master->worker signalling to use a pipe,
|
|
239
|
-
avoiding problems with libraries which do not respond well
|
|
240
|
-
to being interrupted by signals. There are also minor
|
|
241
|
-
bugfixes and cleanups, see "git log -p" for full details.
|
|
242
|
-
|
|
243
|
-
[1] http://ssoma.public-inbox.org/
|
|
244
|
-
|
|
245
|
-
yahns 1.2.0 - preliminary kqueue/FreeBSD support / 2014-03-15
|
|
246
|
-
-------------------------------------------------------------
|
|
247
|
-
|
|
248
|
-
This release now depends on "kgio-sendfile", a (hopefully temporary)
|
|
249
|
-
fork of the original sendfile gem for mainline ruby trunk
|
|
250
|
-
compatibility and a (probably correct) FreeBSD-related bugfix.
|
|
251
|
-
|
|
252
|
-
kqueue/FreeBSD support is considered highly experimental. Of course;
|
|
253
|
-
you should never rely on anything in production unless you can get bugs
|
|
254
|
-
fixed in every part of your stack; even the kernel. yahns (ab)uses
|
|
255
|
-
kqueue and epoll in uncommon ways, so you may encounter subtle kernel
|
|
256
|
-
bugs along the way.
|
|
257
|
-
|
|
258
|
-
Because yahns has been self-hosting its own website for months without
|
|
259
|
-
crashes or major problems (BORING! :P), I've decided to start hosting the
|
|
260
|
-
yahns website <http://yahns.YHBT.net/README> with ruby trunk (currently
|
|
261
|
-
r45341).
|
|
262
|
-
|
|
263
|
-
yahns - dangerous by design (and sleepy!)
|
|
264
|
-
|
|
265
|
-
yahns 1.1.0 - MOAR SLEEPY / 2014-02-04
|
|
266
|
-
--------------------------------------
|
|
267
|
-
|
|
268
|
-
On responses with a known, non-zero Content-Length, yahns will now
|
|
269
|
-
automatically use the MSG_MORE flag when sending HTTP headers. This
|
|
270
|
-
reduces TCP packet transmits and allows clients to wake up and read
|
|
271
|
-
one less time.
|
|
272
|
-
|
|
273
|
-
This is similar to the TCP_NOPUSH/TCP_CORK functionality of other
|
|
274
|
-
servers, but requires no additional syscalls. It is only supported
|
|
275
|
-
on the Linux kernel, however (but yahns is currently epoll-only
|
|
276
|
-
with kqueue support on the horizon).
|
|
277
|
-
|
|
278
|
-
Eric Wong (5):
|
|
279
|
-
quiet down EHOSTUNREACH errors
|
|
280
|
-
http_response: use kgio_syssend with MSG_MORE
|
|
281
|
-
load yahns/version file
|
|
282
|
-
socket_helper: remove SO_REUSEPORT define for untested arches
|
|
283
|
-
response: do not use MSG_MORE on empty bodies
|
|
284
|
-
|
|
285
|
-
yahns 1.0.0 / 2014-01-02
|
|
286
|
-
------------------------
|
|
287
|
-
|
|
288
|
-
Mostly fixes for the extras/* stuff running on yahns.YHBT.net and
|
|
289
|
-
documentation/packaging fixes. Anyways, this is hosting the
|
|
290
|
-
yahns website for a while now (running rack.git) without any
|
|
291
|
-
major issues.
|
|
292
|
-
|
|
293
|
-
Also, the mailing list will need to move/change because Rubyforge is
|
|
294
|
-
going away. Everything I said for the unicorn ML applies to this list,
|
|
295
|
-
too: http://mid.gmane.org/20131217015614.GB1125@dcvr.yhbt.net
|
|
296
|
-
|
|
297
|
-
yahns 0.0.3 - more bugfixes, still working! / 2013-11-10
|
|
298
|
-
--------------------------------------------------------
|
|
299
|
-
|
|
300
|
-
There are several important bugfixes around graceful shutdown.
|
|
301
|
-
The shutdown_timeout directive should work more consistently
|
|
302
|
-
and work even if an app is streaming/trickling slowly to
|
|
303
|
-
a client.
|
|
304
|
-
|
|
305
|
-
This also plugs an odd FD leak in response buffering.
|
|
306
|
-
|
|
307
|
-
There's also some internal comments/documentation for folks
|
|
308
|
-
reviewing the strange internals of yahns.
|
|
309
|
-
|
|
310
|
-
Otherwise, it seems to be capable of serving its own website,
|
|
311
|
-
http://yahns.yhbt.net/README quite well.
|
|
312
|
-
|
|
313
|
-
Rack application authors merely need to write code as if they have a
|
|
314
|
-
gun to their head if they expect to keep code running on yahns.
|
|
315
|
-
Again, yahns is extremely intolerant of bugs in the applications
|
|
316
|
-
it hosts. Otherwise I'm comfortable in the stability of yahns
|
|
317
|
-
itself.
|
|
318
|
-
|
|
319
|
-
Eric Wong (17):
|
|
320
|
-
http_client: do not dump backtrace on ETIMEDOUT
|
|
321
|
-
ensure we close response body if buffering caught up
|
|
322
|
-
http_response: reorder wbuf_maybe on successful early flush
|
|
323
|
-
wbuf: document reasoning for the design of these clases
|
|
324
|
-
build: improve NEWS generation, add atom feed
|
|
325
|
-
exec_cgi: release pipe/pid sooner
|
|
326
|
-
SIGWINCH works after SIGUSR2 upgrades
|
|
327
|
-
shutdown_timeout works around long-running response/apps
|
|
328
|
-
doc: recommend worker_processes if the app uses SIGCHLD
|
|
329
|
-
fdmap: simplify IO expiry interface
|
|
330
|
-
fdmap: document + fix for level-trigger
|
|
331
|
-
queue_epoll: document epoll concurrency caveats
|
|
332
|
-
doc: caution users against disabling buffering
|
|
333
|
-
queue: eliminate :wait_readwrite
|
|
334
|
-
test: exec_cgi test uses worker_processes
|
|
335
|
-
test_server: remove unneccessary IO#wait call
|
|
336
|
-
test: workaround sockets not being binary on rbx
|
|
337
|
-
|
|
338
|
-
yahns 0.0.2 - barely working! / 2013-11-06
|
|
339
|
-
------------------------------------------
|
|
340
|
-
|
|
341
|
-
Lots of bugfixes and tweaks, but everything appears to mostly work
|
|
342
|
-
for Rack and HTTP. We are self-hosting our site:
|
|
343
|
-
|
|
344
|
-
http://yahns.yhbt.net/README
|
|
345
|
-
(And if you can't access it, I screwed something up!)
|
|
346
|
-
|
|
347
|
-
There is a yahns-rackup(1) wrapper for quick-starting Rack
|
|
348
|
-
applications without having to read any documentation,
|
|
349
|
-
as it works exactly like rackup(1) (just leave "-s/--server"
|
|
350
|
-
out)
|
|
351
|
-
|
|
352
|
-
New manpages: yahns(1), yahns_config(5), yahns-rackup(1)
|
|
353
|
-
|
|
354
|
-
Eric Wong (110):
|
|
355
|
-
test/helper: correctly handle exit code in test runner
|
|
356
|
-
log: workaround atomicity issues for stdio vs non-stdio descriptors
|
|
357
|
-
tests: improve output to show RUBY_DESCRIPTION and full path
|
|
358
|
-
tests: support disabling parallelization env
|
|
359
|
-
test_output_buffering: workaround a rbx bug
|
|
360
|
-
socket_helper: do not log sizes on rbx for now
|
|
361
|
-
config: do not set cloexec on stdout/stderr
|
|
362
|
-
test_wbuf: avoid floating point arg to read_nonblock
|
|
363
|
-
rework shutdown for systems w/o rb_thread_fd_close
|
|
364
|
-
SIGUSR2 uses fork + exec again instead of Process.spawn
|
|
365
|
-
wip for EADDRINUSE failure
|
|
366
|
-
test_bin: shutdown socket when not inheriting
|
|
367
|
-
README: update with support status for MRI/RBX
|
|
368
|
-
server: skip killing acceptors on rbx for now
|
|
369
|
-
server (cleanup): avoid interning word for log message
|
|
370
|
-
server: abort loudly if we have old threads running
|
|
371
|
-
reinstate retry delay for binding new listeners
|
|
372
|
-
test/helper: Dir.mktmpdir works without blocks
|
|
373
|
-
rework acceptor thread shutdown (again)
|
|
374
|
-
server (minor cleanup): use Symbol#to_proc
|
|
375
|
-
test_server: remove skipped multi-process balance test
|
|
376
|
-
tests: do not lose exceptions on quit timeouts
|
|
377
|
-
tests: enforce close_on_exec on all client sockets
|
|
378
|
-
server: switch abort to raise on BUG
|
|
379
|
-
config: implement atfork handlers
|
|
380
|
-
test/server_helper: fix undefined variable
|
|
381
|
-
favor client timeout if lower than desperate timeout
|
|
382
|
-
tests: enable checks for desperate client expiry
|
|
383
|
-
implement + test Expect: 100-continue handling
|
|
384
|
-
quitter: save one syscall and implement for non-eventfd
|
|
385
|
-
enforce FD_CLOEXEC on all pipes, including tests
|
|
386
|
-
test_expect_100: cleanup unused var
|
|
387
|
-
http_client: reduce the size of the yahns_step method
|
|
388
|
-
output_buffering handles odd EAGAIN cases
|
|
389
|
-
fix output buffer corner-case for static files
|
|
390
|
-
tests: increase mkserver use to reduce LoC
|
|
391
|
-
fix SIGCHLD w/o workers + PID file renames
|
|
392
|
-
test_client_expire: disable output buffering in test
|
|
393
|
-
StreamFile and TmpIO attempt expiry on EMFILE/ENFILE
|
|
394
|
-
server: avoid metaclass for acceptors
|
|
395
|
-
support SO_REUSEPORT on new listeners (:reuseport)
|
|
396
|
-
doc: ignore RDoc for all internal classes
|
|
397
|
-
rack: leave RACK_ENV unset by us
|
|
398
|
-
associate private/anonymous queues correctly
|
|
399
|
-
queue_epoll: remove check for closed descriptor
|
|
400
|
-
config: disallow defining new, named queues inside app
|
|
401
|
-
doc: preliminary manpages for yahns(1), yahns_config(5)
|
|
402
|
-
config: comment for atfork_* hook definitions
|
|
403
|
-
implement user switching
|
|
404
|
-
configurator: validate :reuseport for boolean-ess
|
|
405
|
-
config: working_directory is only called at top-level
|
|
406
|
-
server: fix out-of-date comment regarding bind/pid order
|
|
407
|
-
config: reject negative float for client_expire_ratio
|
|
408
|
-
lower client_body_buffer_size to 8K (from 114K)
|
|
409
|
-
implement client_timeout for streaming inputs
|
|
410
|
-
gem: install manpages in the RubyGems package
|
|
411
|
-
stream_input: use thread-local rbuf to avoid some garbage
|
|
412
|
-
test output_buffering with hijacked responses
|
|
413
|
-
test_input: close client when we're done with it
|
|
414
|
-
allow multiple blocking threads per listen socket
|
|
415
|
-
acceptor: account for inheriting dead descriptors
|
|
416
|
-
server: fix incorrect receiver of method call
|
|
417
|
-
socket_helper: account for undefined options
|
|
418
|
-
test for binding Unix stream sockets
|
|
419
|
-
Rack hijack issues EPOLL_CTL_DEL
|
|
420
|
-
config: raise ArgumentError for consistency
|
|
421
|
-
tests for SIGTTIN and SIGTTOU
|
|
422
|
-
use Hash#each instead of Hash#each_pair
|
|
423
|
-
add test for working_directory config parameter
|
|
424
|
-
test_unix_socket: remember to close IO when done
|
|
425
|
-
test for overriding rack.errors destination
|
|
426
|
-
test_server: improve working_directory test robustness
|
|
427
|
-
fdmap: prevent possible/theoretical race
|
|
428
|
-
implement shutdown_timeout and expiry on graceful shutdown
|
|
429
|
-
doc: fix client_timeout documentation in yahns_config
|
|
430
|
-
implement before_exec hook
|
|
431
|
-
comment to explain YAHNS_FD env
|
|
432
|
-
remove "worker_" prefix from atfork hooks
|
|
433
|
-
remove arity enforcement for atfork_* hooks
|
|
434
|
-
allow atfork_* hooks inside app blocks for ease-of-management
|
|
435
|
-
doc: disambiguate threads: option for listen directive
|
|
436
|
-
yahns-rackup launcher
|
|
437
|
-
enable client expiry for non-TCP sockets
|
|
438
|
-
config: allow Float for timeouts
|
|
439
|
-
tests: more intelligent waiting for output buffering
|
|
440
|
-
doc: add HACKING/INSTALL docs + minitest dependency
|
|
441
|
-
wbuf: bypass buffering if buffers are caught up
|
|
442
|
-
wbuf: reset FS (sendfile) buffer if caught up
|
|
443
|
-
wbuf: only enable bypass if we've truncated
|
|
444
|
-
input and output buffers support tmpdir: arguments
|
|
445
|
-
tests: further speed up output buffering test
|
|
446
|
-
test trysendfile usage with UNIX sockets
|
|
447
|
-
client_expire_generic: drop kgio_write wrapper
|
|
448
|
-
remove unnecessary map(&:to_s) before Array#join
|
|
449
|
-
account for truncated/expanded static files
|
|
450
|
-
http: do not drop Content-Range from response headers
|
|
451
|
-
worker-less server should not waitpid indiscriminately
|
|
452
|
-
stream_file: only close FDs we opened ourselves
|
|
453
|
-
tests: smaller buffer for big header test
|
|
454
|
-
add extras for exec_cgi and try_gzip_static
|
|
455
|
-
http_response: fix app-controlled close + test
|
|
456
|
-
examples: flesh out the example configs a bit
|
|
457
|
-
README: add disclaimer
|
|
458
|
-
server: improve shutdown messages
|
|
459
|
-
extras: add README
|
|
460
|
-
extras: add autoindex module
|
|
461
|
-
extras: add proxy_pass Rack app
|
|
462
|
-
rackup_handler: fix ordering of working_directory
|
|
463
|
-
worker: avoid double SIGQUIT on unexpected parent death
|
|
464
|
-
server: log error instead of raising for leftover socks
|
|
465
|
-
|
|
466
|
-
yahns 0.0.1 - many small fixes and test coverage / 2013-10-20
|
|
467
|
-
-------------------------------------------------------------
|
|
468
|
-
|
|
469
|
-
Just a bunch of improvements found while running tests.
|
|
470
|
-
It's still incomplete and missing a bunch of features from
|
|
471
|
-
existing servers, but maybe it works...
|
|
472
|
-
|
|
473
|
-
Clone git://yhbt.net/yahns.git for full details
|
|
474
|
-
|
|
475
|
-
Eric Wong (18):
|
|
476
|
-
test/helper: fix __covmerge race for forked processes
|
|
477
|
-
wire up client_max_body_size limits
|
|
478
|
-
fix and test Rack hijack support
|
|
479
|
-
SIGUSR2 handling uses Process.spawn + tests
|
|
480
|
-
fix USR1 log reopening when using worker_processes
|
|
481
|
-
test_bin: add additional tests for SIGHUP
|
|
482
|
-
test_server: skip test_mp_balance for now
|
|
483
|
-
test/server_helper: dump entire log on errors
|
|
484
|
-
ensure we stop all threads at exit
|
|
485
|
-
GNUmakefile: avoid calling exit in test-mt
|
|
486
|
-
test_bin: set close-on-exec for Ruby 1.9.3 compatibility
|
|
487
|
-
test_server: bigger delays for graceful shutdown test
|
|
488
|
-
tests: disable $-w on 1.9.3 to quiet down warnings
|
|
489
|
-
test/helper: prevent minitest at_exit from running in children
|
|
490
|
-
recheck IO#closed? on thread pools after a short delay
|
|
491
|
-
test_config: isolate directories with logs
|
|
492
|
-
test_reopen_logs: workaround timing problem with worker_processes
|
|
493
|
-
set close-on-exec on all long-lived descriptors
|
|
494
|
-
|
|
495
|
-
yahns 0.0.0 - hopefully fix installation problems / 2013-10-18
|
|
496
|
-
--------------------------------------------------------------
|
|
497
|
-
|
|
498
|
-
Installing prrerelease versions are strange on RubyGems.
|
|
499
|
-
Anyways, new project, no risk of breakage, so maybe this
|
|
500
|
-
works better...
|
|
501
|
-
|
|
502
|
-
COPYRIGHT
|
|
503
|
-
---------
|
|
504
|
-
Copyright (C) 2013, Eric Wong <normalperson@yhbt.net> and all contributors
|
|
505
|
-
License: GPLv3 or later (http://www.gnu.org/licenses/gpl-3.0.txt)
|