pax_global_header 0000666 0000000 0000000 00000000064 12120562167 0014514 g ustar 00root root 0000000 0000000 52 comment=1962ec6b578b4b716fb745e0c71403c60de230bc
rainbows-4.5.0/ 0000775 0000000 0000000 00000000000 12120562167 0013346 5 ustar 00root root 0000000 0000000 rainbows-4.5.0/.document 0000664 0000000 0000000 00000002043 12120562167 0015164 0 ustar 00root root 0000000 0000000 ChangeLog
DEPLOY
FAQ
lib/rainbows.rb
lib/rainbows/actor_spawn.rb
lib/rainbows/app_pool.rb
lib/rainbows/base.rb
lib/rainbows/configurator.rb
lib/rainbows/coolio.rb
lib/rainbows/coolio_thread_pool.rb
lib/rainbows/coolio_thread_spawn.rb
lib/rainbows/dev_fd_response.rb
lib/rainbows/epoll.rb
lib/rainbows/event_machine.rb
lib/rainbows/fiber_pool.rb
lib/rainbows/fiber_spawn.rb
lib/rainbows/max_body.rb
lib/rainbows/never_block.rb
lib/rainbows/rev.rb
lib/rainbows/rev_fiber_spawn.rb
lib/rainbows/rev_thread_pool.rb
lib/rainbows/rev_thread_spawn.rb
lib/rainbows/revactor.rb
lib/rainbows/sendfile.rb
lib/rainbows/server_token.rb
lib/rainbows/stream_response_epoll.rb
lib/rainbows/thread_pool.rb
lib/rainbows/thread_spawn.rb
lib/rainbows/thread_timeout.rb
lib/rainbows/worker_yield.rb
lib/rainbows/writer_thread_pool.rb
lib/rainbows/writer_thread_spawn.rb
lib/rainbows/xepoll.rb
lib/rainbows/xepoll_thread_pool.rb
lib/rainbows/xepoll_thread_spawn.rb
LATEST
LICENSE
NEWS
rainbows_1
README
SIGNALS
TODO
TUNING
vs_Unicorn
Summary
Test_Suite
Static_Files
Sandbox
HACKING
rainbows-4.5.0/.gitignore 0000664 0000000 0000000 00000000314 12120562167 0015334 0 ustar 00root root 0000000 0000000 *.bundle
*.log
*.so
*.rbc
.DS_Store
/.config
/InstalledFiles
/doc
/local.mk
/test/install-*
log/
pkg/
/vendor
/NEWS
/ChangeLog
/.manifest
/GIT-VERSION-FILE
/man
/LATEST
tags
TAGS
/lib/rainbows/version.rb
rainbows-4.5.0/.manifest 0000664 0000000 0000000 00000016726 12120562167 0015171 0 ustar 00root root 0000000 0000000 .document
.gitignore
.manifest
.wrongdoc.yml
COPYING
ChangeLog
DEPLOY
Documentation/.gitignore
Documentation/GNUmakefile
Documentation/comparison.css
Documentation/comparison.haml
Documentation/rainbows.1.txt
FAQ
GIT-VERSION-FILE
GIT-VERSION-GEN
GNUmakefile
HACKING
LATEST
LICENSE
NEWS
README
Rakefile
SIGNALS
Sandbox
Static_Files
Summary
TODO
TUNING
Test_Suite
bin/rainbows
examples/reverse_proxy.ru
lib/rainbows.rb
lib/rainbows/actor_spawn.rb
lib/rainbows/app_pool.rb
lib/rainbows/base.rb
lib/rainbows/client.rb
lib/rainbows/configurator.rb
lib/rainbows/const.rb
lib/rainbows/coolio.rb
lib/rainbows/coolio/client.rb
lib/rainbows/coolio/core.rb
lib/rainbows/coolio/heartbeat.rb
lib/rainbows/coolio/master.rb
lib/rainbows/coolio/response_chunk_pipe.rb
lib/rainbows/coolio/response_pipe.rb
lib/rainbows/coolio/server.rb
lib/rainbows/coolio/thread_client.rb
lib/rainbows/coolio_fiber_spawn.rb
lib/rainbows/coolio_support.rb
lib/rainbows/coolio_thread_pool.rb
lib/rainbows/coolio_thread_pool/client.rb
lib/rainbows/coolio_thread_pool/watcher.rb
lib/rainbows/coolio_thread_spawn.rb
lib/rainbows/coolio_thread_spawn/client.rb
lib/rainbows/dev_fd_response.rb
lib/rainbows/epoll.rb
lib/rainbows/epoll/client.rb
lib/rainbows/epoll/response_chunk_pipe.rb
lib/rainbows/epoll/response_pipe.rb
lib/rainbows/epoll/server.rb
lib/rainbows/error.rb
lib/rainbows/ev_core.rb
lib/rainbows/ev_core/cap_input.rb
lib/rainbows/event_machine.rb
lib/rainbows/event_machine/client.rb
lib/rainbows/event_machine/response_chunk_pipe.rb
lib/rainbows/event_machine/response_pipe.rb
lib/rainbows/event_machine/server.rb
lib/rainbows/event_machine/try_defer.rb
lib/rainbows/fiber.rb
lib/rainbows/fiber/base.rb
lib/rainbows/fiber/body.rb
lib/rainbows/fiber/coolio.rb
lib/rainbows/fiber/coolio/heartbeat.rb
lib/rainbows/fiber/coolio/methods.rb
lib/rainbows/fiber/coolio/server.rb
lib/rainbows/fiber/coolio/sleeper.rb
lib/rainbows/fiber/io.rb
lib/rainbows/fiber/io/compat.rb
lib/rainbows/fiber/io/methods.rb
lib/rainbows/fiber/io/pipe.rb
lib/rainbows/fiber/io/socket.rb
lib/rainbows/fiber/queue.rb
lib/rainbows/fiber_pool.rb
lib/rainbows/fiber_spawn.rb
lib/rainbows/http_parser.rb
lib/rainbows/http_server.rb
lib/rainbows/join_threads.rb
lib/rainbows/max_body.rb
lib/rainbows/max_body/rewindable_wrapper.rb
lib/rainbows/max_body/wrapper.rb
lib/rainbows/never_block.rb
lib/rainbows/never_block/core.rb
lib/rainbows/never_block/event_machine.rb
lib/rainbows/pool_size.rb
lib/rainbows/process_client.rb
lib/rainbows/queue_pool.rb
lib/rainbows/response.rb
lib/rainbows/rev.rb
lib/rainbows/rev_fiber_spawn.rb
lib/rainbows/rev_thread_pool.rb
lib/rainbows/rev_thread_spawn.rb
lib/rainbows/revactor.rb
lib/rainbows/revactor/client.rb
lib/rainbows/revactor/client/methods.rb
lib/rainbows/revactor/client/tee_socket.rb
lib/rainbows/revactor/proxy.rb
lib/rainbows/reverse_proxy.rb
lib/rainbows/reverse_proxy/coolio.rb
lib/rainbows/reverse_proxy/ev_client.rb
lib/rainbows/reverse_proxy/event_machine.rb
lib/rainbows/reverse_proxy/multi_thread.rb
lib/rainbows/reverse_proxy/synchronous.rb
lib/rainbows/sendfile.rb
lib/rainbows/server_token.rb
lib/rainbows/socket_proxy.rb
lib/rainbows/stream_file.rb
lib/rainbows/stream_response_epoll.rb
lib/rainbows/stream_response_epoll/client.rb
lib/rainbows/sync_close.rb
lib/rainbows/thread_pool.rb
lib/rainbows/thread_spawn.rb
lib/rainbows/thread_timeout.rb
lib/rainbows/version.rb
lib/rainbows/worker_yield.rb
lib/rainbows/writer_thread_pool.rb
lib/rainbows/writer_thread_pool/client.rb
lib/rainbows/writer_thread_spawn.rb
lib/rainbows/writer_thread_spawn/client.rb
lib/rainbows/xepoll.rb
lib/rainbows/xepoll/client.rb
lib/rainbows/xepoll_thread_pool.rb
lib/rainbows/xepoll_thread_pool/client.rb
lib/rainbows/xepoll_thread_spawn.rb
lib/rainbows/xepoll_thread_spawn/client.rb
local.mk.sample
man/man1/rainbows.1
pkg.mk
rainbows.gemspec
setup.rb
t/.gitignore
t/GNUmakefile
t/README
t/app_deferred.ru
t/async-response-no-autochunk.ru
t/async-response.ru
t/async_chunk_app.ru
t/async_examples/README
t/async_examples/async_app.ru
t/async_examples/async_tailer.ru
t/async_sinatra.ru
t/bin/content-md5-put
t/bin/sha1sum.rb
t/bin/unused_listen
t/byte-range-common.sh
t/client_header_buffer_size.ru
t/close-has-env.ru
t/close-pipe-response.ru
t/close-pipe-to_path-response.ru
t/content-md5.ru
t/cramp/README
t/cramp/rainsocket.ru
t/cramp/streaming.ru
t/env.ru
t/env_rack_env.ru
t/fast-pipe-response.ru
t/file-wrap-to_path.ru
t/fork-sleep.ru
t/heartbeat-timeout.ru
t/hijack.ru
t/kgio-pipe-response.ru
t/large-file-response.ru
t/my-tap-lib.sh
t/rack-fiber_pool/app.ru
t/sha1-random-size.ru
t/sha1.ru
t/simple-http_ActorSpawn.ru
t/simple-http_Base.ru
t/simple-http_Coolio.ru
t/simple-http_CoolioFiberSpawn.ru
t/simple-http_CoolioThreadPool.ru
t/simple-http_CoolioThreadSpawn.ru
t/simple-http_Epoll.ru
t/simple-http_EventMachine.ru
t/simple-http_FiberPool.ru
t/simple-http_FiberSpawn.ru
t/simple-http_NeverBlock.ru
t/simple-http_Rev.ru
t/simple-http_RevFiberSpawn.ru
t/simple-http_RevThreadPool.ru
t/simple-http_RevThreadSpawn.ru
t/simple-http_Revactor.ru
t/simple-http_ThreadPool.ru
t/simple-http_ThreadSpawn.ru
t/simple-http_WriterThreadPool.ru
t/simple-http_WriterThreadSpawn.ru
t/simple-http_XEpoll.ru
t/simple-http_XEpollThreadPool.ru
t/simple-http_XEpollThreadSpawn.ru
t/sleep.ru
t/t0000-simple-http.sh
t/t0000.ru
t/t0001-unix-http.sh
t/t0002-graceful.sh
t/t0002-parser-error.sh
t/t0003-reopen-logs.sh
t/t0004-heartbeat-timeout.sh
t/t0005-large-file-response.sh
t/t0006-process-rack-env.sh
t/t0007-worker-follows-master-to-death.sh
t/t0008-ensure-usable-after-limit.sh
t/t0009-broken-app.sh
t/t0009.ru
t/t0010-keepalive-timeout-effective.sh
t/t0011-close-on-exec-set.sh
t/t0012-spurious-wakeups-quiet.sh
t/t0013-reload-bad-config.sh
t/t0014-config-conflict.sh
t/t0015-working_directory.sh
t/t0016-onenine-encoding-is-tricky.sh
t/t0016.rb
t/t0017-keepalive-timeout-zero.sh
t/t0018-reload-restore-settings.sh
t/t0019-keepalive-cpu-usage.sh
t/t0020-large-sendfile-response.sh
t/t0021-sendfile-wrap-to_path.sh
t/t0022-copy_stream-byte-range.sh
t/t0023-sendfile-byte-range.sh
t/t0024-pipelined-sendfile-response.sh
t/t0025-write-on-close.sh
t/t0026-splice-copy_stream-byte-range.sh
t/t0027-nil-copy_stream.sh
t/t0030-fast-pipe-response.sh
t/t0031-close-pipe-response.sh
t/t0032-close-pipe-to_path-response.sh
t/t0034-pipelined-pipe-response.sh
t/t0035-kgio-pipe-response.sh
t/t0040-keepalive_requests-setting.sh
t/t0041-optional-pool-size.sh
t/t0042-client_header_buffer_size.sh
t/t0043-quit-keepalive-disconnect.sh
t/t0044-autopush.sh
t/t0045-client_max_header_size.sh
t/t0050-response-body-close-has-env.sh
t/t0100-rack-input-hammer-chunked.sh
t/t0100-rack-input-hammer-content-length.sh
t/t0101-rack-input-trailer.sh
t/t0102-rack-input-short.sh
t/t0103-rack-input-limit.sh
t/t0104-rack-input-limit-tiny.sh
t/t0105-rack-input-limit-bigger.sh
t/t0106-rack-input-keepalive.sh
t/t0107-rack-input-limit-zero.sh
t/t0113-rewindable-input-false.sh
t/t0113.ru
t/t0114-rewindable-input-true.sh
t/t0114.ru
t/t0200-async-response.sh
t/t0201-async-response-no-autochunk.sh
t/t0202-async-response-one-oh.sh
t/t0300-async_sinatra.sh
t/t0400-em-async-app.sh
t/t0401-em-async-tailer.sh
t/t0402-async-keepalive.sh
t/t0500-cramp-streaming.sh
t/t0501-cramp-rainsocket.sh
t/t0600-rack-fiber_pool.sh
t/t0700-app-deferred.sh
t/t0800-rack-hijack.sh
t/t9000-rack-app-pool.sh
t/t9000.ru
t/t9001-sendfile-to-path.sh
t/t9001.ru
t/t9002-server-token.sh
t/t9002.ru
t/t9100-thread-timeout.sh
t/t9100.ru
t/t9101-thread-timeout-threshold.sh
t/t9101.ru
t/test-lib.sh
t/test_isolate.rb
t/test_isolate_cramp.rb
t/times.ru
t/worker-follows-master-to-death.ru
t/write-on-close.ru
vs_Unicorn
rainbows-4.5.0/.wrongdoc.yml 0000664 0000000 0000000 00000000512 12120562167 0015767 0 ustar 00root root 0000000 0000000 ---
cgit_url: http://bogomips.org/rainbows.git
git_url: git://bogomips.org/rainbows.git
rdoc_url: http://rainbows.rubyforge.org/
changelog_start: v0.97.0
merge_html:
rainbows_1: Documentation/rainbows.1.html
Summary: Documentation/comparison.html
public_email: rainbows-talk@rubyforge.org
private_email: rainbows@bogomips.org
rainbows-4.5.0/COPYING 0000664 0000000 0000000 00000104367 12120562167 0014414 0 ustar 00root root 0000000 0000000 GNU GENERAL PUBLIC LICENSE
Version 3, 29 June 2007
Copyright (C) 2007 Free Software Foundation, Inc.
Everyone is permitted to copy and distribute verbatim copies
of this license document, but changing it is not allowed.
Preamble
The GNU General Public License is a free, copyleft license for
software and other kinds of works.
The licenses for most software and other practical works are designed
to take away your freedom to share and change the works. By contrast,
the GNU General Public License is intended to guarantee your freedom to
share and change all versions of a program--to make sure it remains free
software for all its users. We, the Free Software Foundation, use the
GNU General Public License for most of our software; it applies also to
any other work released this way by its authors. You can apply it to
your programs, too.
When we speak of free software, we are referring to freedom, not
price. Our General Public Licenses are designed to make sure that you
have the freedom to distribute copies of free software (and charge for
them if you wish), that you receive source code or can get it if you
want it, that you can change the software or use pieces of it in new
free programs, and that you know you can do these things.
To protect your rights, we need to prevent others from denying you
these rights or asking you to surrender the rights. Therefore, you have
certain responsibilities if you distribute copies of the software, or if
you modify it: responsibilities to respect the freedom of others.
For example, if you distribute copies of such a program, whether
gratis or for a fee, you must pass on to the recipients the same
freedoms that you received. You must make sure that they, too, receive
or can get the source code. And you must show them these terms so they
know their rights.
Developers that use the GNU GPL protect your rights with two steps:
(1) assert copyright on the software, and (2) offer you this License
giving you legal permission to copy, distribute and/or modify it.
For the developers' and authors' protection, the GPL clearly explains
that there is no warranty for this free software. For both users' and
authors' sake, the GPL requires that modified versions be marked as
changed, so that their problems will not be attributed erroneously to
authors of previous versions.
Some devices are designed to deny users access to install or run
modified versions of the software inside them, although the manufacturer
can do so. This is fundamentally incompatible with the aim of
protecting users' freedom to change the software. The systematic
pattern of such abuse occurs in the area of products for individuals to
use, which is precisely where it is most unacceptable. Therefore, we
have designed this version of the GPL to prohibit the practice for those
products. If such problems arise substantially in other domains, we
stand ready to extend this provision to those domains in future versions
of the GPL, as needed to protect the freedom of users.
Finally, every program is threatened constantly by software patents.
States should not allow patents to restrict development and use of
software on general-purpose computers, but in those that do, we wish to
avoid the special danger that patents applied to a free program could
make it effectively proprietary. To prevent this, the GPL assures that
patents cannot be used to render the program non-free.
The precise terms and conditions for copying, distribution and
modification follow.
TERMS AND CONDITIONS
0. Definitions.
"This License" refers to version 3 of the GNU General Public License.
"Copyright" also means copyright-like laws that apply to other kinds of
works, such as semiconductor masks.
"The Program" refers to any copyrightable work licensed under this
License. Each licensee is addressed as "you". "Licensees" and
"recipients" may be individuals or organizations.
To "modify" a work means to copy from or adapt all or part of the work
in a fashion requiring copyright permission, other than the making of an
exact copy. The resulting work is called a "modified version" of the
earlier work or a work "based on" the earlier work.
A "covered work" means either the unmodified Program or a work based
on the Program.
To "propagate" a work means to do anything with it that, without
permission, would make you directly or secondarily liable for
infringement under applicable copyright law, except executing it on a
computer or modifying a private copy. Propagation includes copying,
distribution (with or without modification), making available to the
public, and in some countries other activities as well.
To "convey" a work means any kind of propagation that enables other
parties to make or receive copies. Mere interaction with a user through
a computer network, with no transfer of a copy, is not conveying.
An interactive user interface displays "Appropriate Legal Notices"
to the extent that it includes a convenient and prominently visible
feature that (1) displays an appropriate copyright notice, and (2)
tells the user that there is no warranty for the work (except to the
extent that warranties are provided), that licensees may convey the
work under this License, and how to view a copy of this License. If
the interface presents a list of user commands or options, such as a
menu, a prominent item in the list meets this criterion.
1. Source Code.
The "source code" for a work means the preferred form of the work
for making modifications to it. "Object code" means any non-source
form of a work.
A "Standard Interface" means an interface that either is an official
standard defined by a recognized standards body, or, in the case of
interfaces specified for a particular programming language, one that
is widely used among developers working in that language.
The "System Libraries" of an executable work include anything, other
than the work as a whole, that (a) is included in the normal form of
packaging a Major Component, but which is not part of that Major
Component, and (b) serves only to enable use of the work with that
Major Component, or to implement a Standard Interface for which an
implementation is available to the public in source code form. A
"Major Component", in this context, means a major essential component
(kernel, window system, and so on) of the specific operating system
(if any) on which the executable work runs, or a compiler used to
produce the work, or an object code interpreter used to run it.
The "Corresponding Source" for a work in object code form means all
the source code needed to generate, install, and (for an executable
work) run the object code and to modify the work, including scripts to
control those activities. However, it does not include the work's
System Libraries, or general-purpose tools or generally available free
programs which are used unmodified in performing those activities but
which are not part of the work. For example, Corresponding Source
includes interface definition files associated with source files for
the work, and the source code for shared libraries and dynamically
linked subprograms that the work is specifically designed to require,
such as by intimate data communication or control flow between those
subprograms and other parts of the work.
The Corresponding Source need not include anything that users
can regenerate automatically from other parts of the Corresponding
Source.
The Corresponding Source for a work in source code form is that
same work.
2. Basic Permissions.
All rights granted under this License are granted for the term of
copyright on the Program, and are irrevocable provided the stated
conditions are met. This License explicitly affirms your unlimited
permission to run the unmodified Program. The output from running a
covered work is covered by this License only if the output, given its
content, constitutes a covered work. This License acknowledges your
rights of fair use or other equivalent, as provided by copyright law.
You may make, run and propagate covered works that you do not
convey, without conditions so long as your license otherwise remains
in force. You may convey covered works to others for the sole purpose
of having them make modifications exclusively for you, or provide you
with facilities for running those works, provided that you comply with
the terms of this License in conveying all material for which you do
not control copyright. Those thus making or running the covered works
for you must do so exclusively on your behalf, under your direction
and control, on terms that prohibit them from making any copies of
your copyrighted material outside their relationship with you.
Conveying under any other circumstances is permitted solely under
the conditions stated below. Sublicensing is not allowed; section 10
makes it unnecessary.
3. Protecting Users' Legal Rights From Anti-Circumvention Law.
No covered work shall be deemed part of an effective technological
measure under any applicable law fulfilling obligations under article
11 of the WIPO copyright treaty adopted on 20 December 1996, or
similar laws prohibiting or restricting circumvention of such
measures.
When you convey a covered work, you waive any legal power to forbid
circumvention of technological measures to the extent such circumvention
is effected by exercising rights under this License with respect to
the covered work, and you disclaim any intention to limit operation or
modification of the work as a means of enforcing, against the work's
users, your or third parties' legal rights to forbid circumvention of
technological measures.
4. Conveying Verbatim Copies.
You may convey verbatim copies of the Program's source code as you
receive it, in any medium, provided that you conspicuously and
appropriately publish on each copy an appropriate copyright notice;
keep intact all notices stating that this License and any
non-permissive terms added in accord with section 7 apply to the code;
keep intact all notices of the absence of any warranty; and give all
recipients a copy of this License along with the Program.
You may charge any price or no price for each copy that you convey,
and you may offer support or warranty protection for a fee.
5. Conveying Modified Source Versions.
You may convey a work based on the Program, or the modifications to
produce it from the Program, in the form of source code under the
terms of section 4, provided that you also meet all of these conditions:
a) The work must carry prominent notices stating that you modified
it, and giving a relevant date.
b) The work must carry prominent notices stating that it is
released under this License and any conditions added under section
7. This requirement modifies the requirement in section 4 to
"keep intact all notices".
c) You must license the entire work, as a whole, under this
License to anyone who comes into possession of a copy. This
License will therefore apply, along with any applicable section 7
additional terms, to the whole of the work, and all its parts,
regardless of how they are packaged. This License gives no
permission to license the work in any other way, but it does not
invalidate such permission if you have separately received it.
d) If the work has interactive user interfaces, each must display
Appropriate Legal Notices; however, if the Program has interactive
interfaces that do not display Appropriate Legal Notices, your
work need not make them do so.
A compilation of a covered work with other separate and independent
works, which are not by their nature extensions of the covered work,
and which are not combined with it such as to form a larger program,
in or on a volume of a storage or distribution medium, is called an
"aggregate" if the compilation and its resulting copyright are not
used to limit the access or legal rights of the compilation's users
beyond what the individual works permit. Inclusion of a covered work
in an aggregate does not cause this License to apply to the other
parts of the aggregate.
6. Conveying Non-Source Forms.
You may convey a covered work in object code form under the terms
of sections 4 and 5, provided that you also convey the
machine-readable Corresponding Source under the terms of this License,
in one of these ways:
a) Convey the object code in, or embodied in, a physical product
(including a physical distribution medium), accompanied by the
Corresponding Source fixed on a durable physical medium
customarily used for software interchange.
b) Convey the object code in, or embodied in, a physical product
(including a physical distribution medium), accompanied by a
written offer, valid for at least three years and valid for as
long as you offer spare parts or customer support for that product
model, to give anyone who possesses the object code either (1) a
copy of the Corresponding Source for all the software in the
product that is covered by this License, on a durable physical
medium customarily used for software interchange, for a price no
more than your reasonable cost of physically performing this
conveying of source, or (2) access to copy the
Corresponding Source from a network server at no charge.
c) Convey individual copies of the object code with a copy of the
written offer to provide the Corresponding Source. This
alternative is allowed only occasionally and noncommercially, and
only if you received the object code with such an offer, in accord
with subsection 6b.
d) Convey the object code by offering access from a designated
place (gratis or for a charge), and offer equivalent access to the
Corresponding Source in the same way through the same place at no
further charge. You need not require recipients to copy the
Corresponding Source along with the object code. If the place to
copy the object code is a network server, the Corresponding Source
may be on a different server (operated by you or a third party)
that supports equivalent copying facilities, provided you maintain
clear directions next to the object code saying where to find the
Corresponding Source. Regardless of what server hosts the
Corresponding Source, you remain obligated to ensure that it is
available for as long as needed to satisfy these requirements.
e) Convey the object code using peer-to-peer transmission, provided
you inform other peers where the object code and Corresponding
Source of the work are being offered to the general public at no
charge under subsection 6d.
A separable portion of the object code, whose source code is excluded
from the Corresponding Source as a System Library, need not be
included in conveying the object code work.
A "User Product" is either (1) a "consumer product", which means any
tangible personal property which is normally used for personal, family,
or household purposes, or (2) anything designed or sold for incorporation
into a dwelling. In determining whether a product is a consumer product,
doubtful cases shall be resolved in favor of coverage. For a particular
product received by a particular user, "normally used" refers to a
typical or common use of that class of product, regardless of the status
of the particular user or of the way in which the particular user
actually uses, or expects or is expected to use, the product. A product
is a consumer product regardless of whether the product has substantial
commercial, industrial or non-consumer uses, unless such uses represent
the only significant mode of use of the product.
"Installation Information" for a User Product means any methods,
procedures, authorization keys, or other information required to install
and execute modified versions of a covered work in that User Product from
a modified version of its Corresponding Source. The information must
suffice to ensure that the continued functioning of the modified object
code is in no case prevented or interfered with solely because
modification has been made.
If you convey an object code work under this section in, or with, or
specifically for use in, a User Product, and the conveying occurs as
part of a transaction in which the right of possession and use of the
User Product is transferred to the recipient in perpetuity or for a
fixed term (regardless of how the transaction is characterized), the
Corresponding Source conveyed under this section must be accompanied
by the Installation Information. But this requirement does not apply
if neither you nor any third party retains the ability to install
modified object code on the User Product (for example, the work has
been installed in ROM).
The requirement to provide Installation Information does not include a
requirement to continue to provide support service, warranty, or updates
for a work that has been modified or installed by the recipient, or for
the User Product in which it has been modified or installed. Access to a
network may be denied when the modification itself materially and
adversely affects the operation of the network or violates the rules and
protocols for communication across the network.
Corresponding Source conveyed, and Installation Information provided,
in accord with this section must be in a format that is publicly
documented (and with an implementation available to the public in
source code form), and must require no special password or key for
unpacking, reading or copying.
7. Additional Terms.
"Additional permissions" are terms that supplement the terms of this
License by making exceptions from one or more of its conditions.
Additional permissions that are applicable to the entire Program shall
be treated as though they were included in this License, to the extent
that they are valid under applicable law. If additional permissions
apply only to part of the Program, that part may be used separately
under those permissions, but the entire Program remains governed by
this License without regard to the additional permissions.
When you convey a copy of a covered work, you may at your option
remove any additional permissions from that copy, or from any part of
it. (Additional permissions may be written to require their own
removal in certain cases when you modify the work.) You may place
additional permissions on material, added by you to a covered work,
for which you have or can give appropriate copyright permission.
Notwithstanding any other provision of this License, for material you
add to a covered work, you may (if authorized by the copyright holders of
that material) supplement the terms of this License with terms:
a) Disclaiming warranty or limiting liability differently from the
terms of sections 15 and 16 of this License; or
b) Requiring preservation of specified reasonable legal notices or
author attributions in that material or in the Appropriate Legal
Notices displayed by works containing it; or
c) Prohibiting misrepresentation of the origin of that material, or
requiring that modified versions of such material be marked in
reasonable ways as different from the original version; or
d) Limiting the use for publicity purposes of names of licensors or
authors of the material; or
e) Declining to grant rights under trademark law for use of some
trade names, trademarks, or service marks; or
f) Requiring indemnification of licensors and authors of that
material by anyone who conveys the material (or modified versions of
it) with contractual assumptions of liability to the recipient, for
any liability that these contractual assumptions directly impose on
those licensors and authors.
All other non-permissive additional terms are considered "further
restrictions" within the meaning of section 10. If the Program as you
received it, or any part of it, contains a notice stating that it is
governed by this License along with a term that is a further
restriction, you may remove that term. If a license document contains
a further restriction but permits relicensing or conveying under this
License, you may add to a covered work material governed by the terms
of that license document, provided that the further restriction does
not survive such relicensing or conveying.
If you add terms to a covered work in accord with this section, you
must place, in the relevant source files, a statement of the
additional terms that apply to those files, or a notice indicating
where to find the applicable terms.
Additional terms, permissive or non-permissive, may be stated in the
form of a separately written license, or stated as exceptions;
the above requirements apply either way.
8. Termination.
You may not propagate or modify a covered work except as expressly
provided under this License. Any attempt otherwise to propagate or
modify it is void, and will automatically terminate your rights under
this License (including any patent licenses granted under the third
paragraph of section 11).
However, if you cease all violation of this License, then your
license from a particular copyright holder is reinstated (a)
provisionally, unless and until the copyright holder explicitly and
finally terminates your license, and (b) permanently, if the copyright
holder fails to notify you of the violation by some reasonable means
prior to 60 days after the cessation.
Moreover, your license from a particular copyright holder is
reinstated permanently if the copyright holder notifies you of the
violation by some reasonable means, this is the first time you have
received notice of violation of this License (for any work) from that
copyright holder, and you cure the violation prior to 30 days after
your receipt of the notice.
Termination of your rights under this section does not terminate the
licenses of parties who have received copies or rights from you under
this License. If your rights have been terminated and not permanently
reinstated, you do not qualify to receive new licenses for the same
material under section 10.
9. Acceptance Not Required for Having Copies.
You are not required to accept this License in order to receive or
run a copy of the Program. Ancillary propagation of a covered work
occurring solely as a consequence of using peer-to-peer transmission
to receive a copy likewise does not require acceptance. However,
nothing other than this License grants you permission to propagate or
modify any covered work. These actions infringe copyright if you do
not accept this License. Therefore, by modifying or propagating a
covered work, you indicate your acceptance of this License to do so.
10. Automatic Licensing of Downstream Recipients.
Each time you convey a covered work, the recipient automatically
receives a license from the original licensors, to run, modify and
propagate that work, subject to this License. You are not responsible
for enforcing compliance by third parties with this License.
An "entity transaction" is a transaction transferring control of an
organization, or substantially all assets of one, or subdividing an
organization, or merging organizations. If propagation of a covered
work results from an entity transaction, each party to that
transaction who receives a copy of the work also receives whatever
licenses to the work the party's predecessor in interest had or could
give under the previous paragraph, plus a right to possession of the
Corresponding Source of the work from the predecessor in interest, if
the predecessor has it or can get it with reasonable efforts.
You may not impose any further restrictions on the exercise of the
rights granted or affirmed under this License. For example, you may
not impose a license fee, royalty, or other charge for exercise of
rights granted under this License, and you may not initiate litigation
(including a cross-claim or counterclaim in a lawsuit) alleging that
any patent claim is infringed by making, using, selling, offering for
sale, or importing the Program or any portion of it.
11. Patents.
A "contributor" is a copyright holder who authorizes use under this
License of the Program or a work on which the Program is based. The
work thus licensed is called the contributor's "contributor version".
A contributor's "essential patent claims" are all patent claims
owned or controlled by the contributor, whether already acquired or
hereafter acquired, that would be infringed by some manner, permitted
by this License, of making, using, or selling its contributor version,
but do not include claims that would be infringed only as a
consequence of further modification of the contributor version. For
purposes of this definition, "control" includes the right to grant
patent sublicenses in a manner consistent with the requirements of
this License.
Each contributor grants you a non-exclusive, worldwide, royalty-free
patent license under the contributor's essential patent claims, to
make, use, sell, offer for sale, import and otherwise run, modify and
propagate the contents of its contributor version.
In the following three paragraphs, a "patent license" is any express
agreement or commitment, however denominated, not to enforce a patent
(such as an express permission to practice a patent or covenant not to
sue for patent infringement). To "grant" such a patent license to a
party means to make such an agreement or commitment not to enforce a
patent against the party.
If you convey a covered work, knowingly relying on a patent license,
and the Corresponding Source of the work is not available for anyone
to copy, free of charge and under the terms of this License, through a
publicly available network server or other readily accessible means,
then you must either (1) cause the Corresponding Source to be so
available, or (2) arrange to deprive yourself of the benefit of the
patent license for this particular work, or (3) arrange, in a manner
consistent with the requirements of this License, to extend the patent
license to downstream recipients. "Knowingly relying" means you have
actual knowledge that, but for the patent license, your conveying the
covered work in a country, or your recipient's use of the covered work
in a country, would infringe one or more identifiable patents in that
country that you have reason to believe are valid.
If, pursuant to or in connection with a single transaction or
arrangement, you convey, or propagate by procuring conveyance of, a
covered work, and grant a patent license to some of the parties
receiving the covered work authorizing them to use, propagate, modify
or convey a specific copy of the covered work, then the patent license
you grant is automatically extended to all recipients of the covered
work and works based on it.
A patent license is "discriminatory" if it does not include within
the scope of its coverage, prohibits the exercise of, or is
conditioned on the non-exercise of one or more of the rights that are
specifically granted under this License. You may not convey a covered
work if you are a party to an arrangement with a third party that is
in the business of distributing software, under which you make payment
to the third party based on the extent of your activity of conveying
the work, and under which the third party grants, to any of the
parties who would receive the covered work from you, a discriminatory
patent license (a) in connection with copies of the covered work
conveyed by you (or copies made from those copies), or (b) primarily
for and in connection with specific products or compilations that
contain the covered work, unless you entered into that arrangement,
or that patent license was granted, prior to 28 March 2007.
Nothing in this License shall be construed as excluding or limiting
any implied license or other defenses to infringement that may
otherwise be available to you under applicable patent law.
12. No Surrender of Others' Freedom.
If conditions are imposed on you (whether by court order, agreement or
otherwise) that contradict the conditions of this License, they do not
excuse you from the conditions of this License. If you cannot convey a
covered work so as to satisfy simultaneously your obligations under this
License and any other pertinent obligations, then as a consequence you may
not convey it at all. For example, if you agree to terms that obligate you
to collect a royalty for further conveying from those to whom you convey
the Program, the only way you could satisfy both those terms and this
License would be to refrain entirely from conveying the Program.
13. Use with the GNU Affero General Public License.
Notwithstanding any other provision of this License, you have
permission to link or combine any covered work with a work licensed
under version 3 of the GNU Affero General Public License into a single
combined work, and to convey the resulting work. The terms of this
License will continue to apply to the part which is the covered work,
but the special requirements of the GNU Affero General Public License,
section 13, concerning interaction through a network will apply to the
combination as such.
14. Revised Versions of this License.
The Free Software Foundation may publish revised and/or new versions of
the GNU General Public License from time to time. Such new versions will
be similar in spirit to the present version, but may differ in detail to
address new problems or concerns.
Each version is given a distinguishing version number. If the
Program specifies that a certain numbered version of the GNU General
Public License "or any later version" applies to it, you have the
option of following the terms and conditions either of that numbered
version or of any later version published by the Free Software
Foundation. If the Program does not specify a version number of the
GNU General Public License, you may choose any version ever published
by the Free Software Foundation.
If the Program specifies that a proxy can decide which future
versions of the GNU General Public License can be used, that proxy's
public statement of acceptance of a version permanently authorizes you
to choose that version for the Program.
Later license versions may give you additional or different
permissions. However, no additional obligations are imposed on any
author or copyright holder as a result of your choosing to follow a
later version.
15. Disclaimer of Warranty.
THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY
APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT
HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY
OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO,
THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM
IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF
ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
16. Limitation of Liability.
IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS
THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY
GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE
USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF
DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD
PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS),
EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF
SUCH DAMAGES.
17. Interpretation of Sections 15 and 16.
If the disclaimer of warranty and limitation of liability provided
above cannot be given local legal effect according to their terms,
reviewing courts shall apply local law that most closely approximates
an absolute waiver of all civil liability in connection with the
Program, unless a warranty or assumption of liability accompanies a
copy of the Program in return for a fee.
END OF TERMS AND CONDITIONS
How to Apply These Terms to Your New Programs
If you develop a new program, and you want it to be of the greatest
possible use to the public, the best way to achieve this is to make it
free software which everyone can redistribute and change under these terms.
To do so, attach the following notices to the program. It is safest
to attach them to the start of each source file to most effectively
state the exclusion of warranty; and each file should have at least
the "copyright" line and a pointer to where the full notice is found.
Copyright (C)
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program. If not, see .
Also add information on how to contact you by electronic and paper mail.
If the program does terminal interaction, make it output a short
notice like this when it starts in an interactive mode:
Copyright (C)
This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
This is free software, and you are welcome to redistribute it
under certain conditions; type `show c' for details.
The hypothetical commands `show w' and `show c' should show the appropriate
parts of the General Public License. Of course, your program's commands
might be different; for a GUI interface, you would use an "about box".
You should also get your employer (if you work as a programmer) or school,
if any, to sign a "copyright disclaimer" for the program, if necessary.
For more information on this, and how to apply and follow the GNU GPL, see
.
The GNU General Public License does not permit incorporating your program
into proprietary programs. If your program is a subroutine library, you
may consider it more useful to permit linking proprietary applications with
the library. If this is what you want to do, use the GNU Lesser General
Public License instead of this License. But first, please read
.
rainbows-4.5.0/ChangeLog 0000664 0000000 0000000 00000400525 12120562167 0015126 0 ustar 00root root 0000000 0000000 ChangeLog from http://bogomips.org/rainbows.git (v0.97.0..v4.5.0)
commit 4be3e386118969345ee5c94049efa7faae338e4d
Author: Eric Wong
Date: Wed Feb 27 10:25:21 2013 +0000
Rainbows! 4.5.0 - hijacking support
This release adds hijacking support for Rack 1.5.x users.
See Rack documentation for more information about hijacking.
Lin Jen-Shin also provided the -N/--no-default-middleware option.
Minor packaging cleanups and new HACKING document.
There are also some corner-case bugfixes for *Epoll* users
(sleepy_penguin, these bugs do not affect EM or Cool.io users)
and test suite portability improvements.
commit 85e228de580f2ffff0025695a523349cef79d9c7
Author: Eric Wong
Date: Tue Feb 26 21:16:27 2013 +0000
manpage: update middleware-related documentation
-N/--no-default-middleware needs a corresponding manpage entry.
Additionally, the Rack::Chunked/ContentLength middleware comment
is out-of-date as of unicorn v4.1.0
commit 1bdb4eda0d868223bd6b3d92db4545a02f5e14f9
Author: Eric Wong
Date: Tue Feb 26 21:02:34 2013 +0000
epoll/*: remove user-space array as active queue
This prevents pathological starvation cases where the user-space
ready-list can be repopulated infinitely. With EPOLLONESHOT,
epoll itself may be used for this task (at a slightly higher
cost) by enabling read/write checks, as the epoll ready-list
preserves event ordering when used with EPOLLONESHOT.
commit 552c4ca305092911ca7613de4b1ba310e5481775
Author: Eric Wong
Date: Tue Feb 26 20:07:30 2013 +0000
xepoll_thread_*/client: EPOLLONESHOT implies EPOLLET
No need to specify both flags for epoll (confirmed by reading
fs/eventpoll.c in the Linux kernel).
commit 81e555569fc254ed9d592c8734695b22d4f9bc12
Author: Eric Wong
Date: Tue Feb 26 08:19:05 2013 +0000
doc: add HACKING document
Thanks to Alex Wolfe for noticing.
commit f8b5181e744848468bf3bb0fe469795f9113cf4c
Author: Eric Wong
Date: Tue Feb 26 07:42:51 2013 +0000
tests: update checks for Ruby 2.0.0
EventMachine/NeverBlock currently do not build on Ruby 2.0.0
commit 95d6719722f31987c72052b000f67d99989a81c8
Author: Eric Wong
Date: Tue Feb 26 03:16:46 2013 +0000
bump unicorn dependency to 4.6.2+ for Ruby 2.0.0
This ensures we're compatible with the latest stable
Ruby version.
commit 83a3b49dd3a1f1885ca56e9889ff22aa7b7c6136
Author: Eric Wong
Date: Tue Feb 26 03:14:26 2013 +0000
gemspec: set licenses= attribute
Old versions of RubyGems which could not handle this attribute
are likely no longer in use.
commit 7dd14b2780b87be58c7afbd03df8d1f7cc3e9575
Author: Eric Wong
Date: Sat Feb 16 00:04:53 2013 +0000
GIT-VERSION-GEN: rewrite to manage RAINBOWS_VERSION const
This DRYs up versioning and makes packages easier to distribute.
commit e166cfe5e8d648b544b1291ec157bd234a425e21
Author: Eric Wong
Date: Fri Feb 8 22:45:20 2013 +0000
hijacking support for Rack 1.5.x users
This requires Rack 1.5.x and unicorn 4.6.0 for hijacking
support. Older versions of Rack continue to work fine,
but we must use unicorn 4.6.0 features to support this.
commit e6faf9e26bcb172026a4984ecadbaa8b6789bcb7
Author: Eric Wong
Date: Mon Feb 4 12:39:09 2013 +0000
tests: "wc -l" portability for *BSDs
On FreeBSD 9.0, "wc -l" emits leading whitespace, so
filter it through tr -d '[:space:]' to eliminate it.
commit f4e3bac180ff01256832f98655636f79b52f9d5b
Author: Eric Wong
Date: Fri Jan 25 02:10:05 2013 +0000
tests: bump version dependencies for Isolate
Most of these test dependencies may be safely bumped.
commit 8a6117a22a7d01eeb5adc63d3152acf435cd3176
Author: Eric Wong
Date: Thu Jan 24 23:33:54 2013 +0000
tests: "wc -c" portability for *BSDs
On FreeBSD 9.0, "wc -c" emits leading whitespace, so
filter it through tr -d '[:space:]' to eliminate it.
commit 0ba6fc3c30b9cf530faf7fcf5ce7be519ec13fe7
Author: Eric Wong
Date: Thu Jan 24 23:13:41 2013 +0000
tests: replace non-portable "date +%s" with ruby equivalent
"date +%s" is not in POSIX (it is in GNU, and at least FreeBSD
9.0, possibly earlier). The Ruby equivalent should be
sufficiently portable between different Ruby versions.
This change was automated via:
perl -i -p -e 's/date \+%s/unix_time/' t/*.sh
commit cbff7b0892148b037581541184364e0e91d2a138
Author: Eric Wong
Date: Thu Jan 24 22:59:16 2013 +0000
tests: remove utee and use tee(1) instead
POSIX already stipulates tee(1) must be unbuffered. I think my
decision to use utee was due to my being misled by a bug in
older curl where -N did not work as advertised (but --no-buffer
did).
commit a552fb90230eb65c28897398c7786dc9a13446ca
Author: Lin Jen-Shin
Date: Tue Jan 29 11:44:06 2013 +0800
Add -N or --no-default-middleware option.
This would prevent Unicorn (Rainbows) from adding default middleware,
as if RACK_ENV were always none. (not development nor deployment)
This is implemented in Unicorn, so we only need to update
the option parser here.
Discussion thread on Unicorn mailing list:
http://rubyforge.org/pipermail/mongrel-unicorn/2013-January/001675.html
Signed-off-by: Eric Wong
commit 49f70632e2f4a9b84fd4fced7439d0844fed1bbd
Author: Eric Wong
Date: Thu Jan 24 19:47:41 2013 +0000
epoll: ensure closing of pipelined clients if required
on_read normally relies on the close checking in on_readable,
but on_deferred_write_complete may be called from on_writable
instead (bypassing the close check of on_readable).
This affects both Epoll and XEpoll users, but only if they
were sending responses via body#to_path and triggering
on_deferred_write_complete.
While we're at it, favor non-recursive want_more instead of
calling on_readable recursively in ev_write_responses to
prevent stack growth.
commit ad5ab9fe21d57b78b7c6681bbc0907c934e898b0
Author: Eric Wong
Date: Fri Jan 18 11:21:45 2013 +0000
Rainbows! 4.4.3 - bugfixes for EventMachine users
This release fixes two EventMachine bugfixes from Lin Jen-Shin
and Mark J. Titorenko. There are also some minor cleanups.
Lin Jen-Shin (1):
event_machine: avoid close on deferred response
Mark J. Titorenko (1):
event_machine: join reactor_thread if it is already running
Eric Wong (2):
event_machine: cleanup confusing assignment
t/GNUmakefile: cleanup test dependencies
commit 5eaec3184b49d3c1068b1f011e7afe43b33dd2d5
Author: Eric Wong
Date: Thu Jan 17 10:17:29 2013 +0000
t/GNUmakefile: cleanup test dependencies
The missing random_blob dependency was causing the following
to fail on a fresh clone:
make -C t ThreadPool.t0005-large-file-response.sh
commit a12d2e64e04b5098f31e63a72ea8330b6c8f3a19
Author: Mark J. Titorenko
Date: Fri Jan 11 11:57:12 2013 +0000
event_machine: join reactor_thread if it is already running
...rather than falling through worker_loop
Prior to the application of this patch, if an EventMachine
reactor_thread has already been started elsewhere before the
worker_loop is entered, the worker_loop exits as a second call
to EM.run does not block the current thread.
This patch causes the worker_loop thread to join the
reactor_thread if it is running.
[ew: commit message formatting]
Signed-off-by: Eric Wong
commit 28eaf3e766f5dddc6ca073a155b8005afdaecfba
Author: Eric Wong
Date: Wed Dec 19 03:39:58 2012 +0000
event_machine: cleanup confusing assignment
commit 42bf1f6de55b82af46fd8255453036c6582b7f19
Author: Lin Jen-Shin
Date: Wed Dec 19 04:03:55 2012 +0800
event_machine: avoid close on deferred response
close_connection_after_writing only if not deferred, as in
cool.io
Deferred responses may buffer more data down the line, so
keep the connection alive if we have a deferred response
body.
[ew: clear @deferred when we really want to quit,
updated commit message]
Acked-by: Eric Wong
commit f7f9c6b8470e54e25a17cd1a9517f5030e43fa66
Author: Eric Wong
Date: Thu Dec 6 11:40:21 2012 +0000
Rainbows! 4.4.2 - EventMachine async.callback fix
One bugfix allows stream(:keep_open) in Sinatra to work
properly.
Thanks to W. Andrew Loe III for the informative bug report
and reproducible test case.
ref: http://mid.gmane.org/CA+-9oNd1EFqsniPkkPTwu5opTCinbM7-2KHoXov7+y3LE4s4Tg@mail.gmail.com
commit ef74449fdf7a2c487d07a1aa8b4e34cc3be77aab
Author: Eric Wong
Date: Wed Dec 5 03:34:02 2012 +0000
test_isolate: bump eventmachine and sinatra deps
Always ensuring we work with the latest versions.
commit d5c8cc8b51619f0d33f75036c53e3936ad2749b2
Author: Eric Wong
Date: Wed Dec 5 03:08:19 2012 +0000
event_machine: properly defer body.close for async
Calling body.close in the normal write_response() code path
is incorrect, and only worked out of sheer luck with
Cramp and async_sinata.
This change allows stream(:keep_open) in Sinatra to work
properly.
Thanks to W. Andrew Loe III for the informative bug report
and reproducible test case.
ref: http://mid.gmane.org/CA+-9oNd1EFqsniPkkPTwu5opTCinbM7-2KHoXov7+y3LE4s4Tg@mail.gmail.com
commit fb671a2d316029169940d00a3f9307c3113541c4
Author: Eric Wong
Date: Fri Aug 31 01:53:43 2012 +0000
Rainbows! 4.4.1 - a minor bugfix for Fiber users
Fiber-based concurrency options avoids negative sleep
intervals. Thanks to Lin Jen-Shin for pointing this out.
commit e794a40049959a23ba311c572e518bb7c2861812
Author: Eric Wong
Date: Fri Aug 24 23:03:17 2012 +0000
fiber/base: avoid negative sleep interval
Also clarify the code while we're at it.
Thanks to Lin Jen-Shin for pointing this out.
ref: http://mid.gmane.org/CAA2_N1unOXb7Z4Jr8oKoSLu266O9Ko4o=oWzAcMA1w3=9X74KA@mail.gmail.com
commit 12281e4cee86496588814cd1851e8764caea024c
Author: Eric Wong
Date: Sat Aug 18 08:10:14 2012 +0000
Rakefile: freshmeat.net -> freecode.com
freecode.com now requires HTTPS, too.
commit 7450ebd46b6e7cf0eb59a3d6d561d5d6252bef16
Author: Eric Wong
Date: Sat Aug 18 07:04:11 2012 +0000
Rainbows! 4.4.0 - minor improvements
For epoll/Cool.io-based concurrency models, shutdown() is now
used to timeout keepalive clients to avoid race conditions.
Minor documentation improvements.
commit 5bcbe397f4457fa6c76443cc77d662139ef464f2
Author: Eric Wong
Date: Thu Jul 19 13:10:37 2012 -0700
thread_timeout: document additional caveats
Again, for the one thousandth time, timing out threads is very
tricky business :<
commit 73a76531b7f4826cdb3bad0a0286038fb6ade4f3
Author: Eric Wong
Date: Sun Jul 1 03:56:39 2012 +0000
test_isolate: bump raindrops dependency
As usual, test with the latest released version to avoid
surprises.
commit 36ce10c49ce7aa0df9d47f5a5f870c23c1891258
Author: Eric Wong
Date: Sat Jun 30 19:57:08 2012 +0000
coolio+xepoll_thread*: use shutdown() for keepalive timeout
Triggering Errno::EBADF is tricky in multithreaded situations
due to possible race conditions and yet-to-be discovered bugs.
shutdown(2) is also safe against apps the fork() internally but
do not execve(2) nor set FD_CLOEXEC.
n.b. calling fork() after pthreads are spawned may not be safe
on all platforms w.r.t. malloc, but /is/ the case for glibc on
GNU/Linux.
Follow-up-to: commit a5b987619f4b793203f6a50e424fe98c5b0794ba
commit a5b987619f4b793203f6a50e424fe98c5b0794ba
Author: Eric Wong
Date: Mon Jun 18 20:32:39 2012 +0000
epoll*: favor shutdown(2) for keepalive timeout
Triggering Errno::EBADF is tricky in multithreaded situations
due to possible race conditions and yet-to-be discovered bugs.
shutdown(2) is also safe against apps the fork() internally but
do not execve(2) nor set FD_CLOEXEC.
n.b. calling fork() after pthreads are spawned may not be safe
on all platforms w.r.t. malloc, but /is/ the case for glibc on
GNU/Linux.
commit 604f64f624d562f480dc8424a6597ec5b32947df
Author: Eric Wong
Date: Wed May 9 21:11:39 2012 +0000
fiber_pool: take Fibers from larger pools faster
Array#pop can be significantly faster than Array#shift on large
arrays (especially since we push into the Array). This is
because Array#shift needs to shift all elements in the array,
and Array#pop only needs to shorten the array by one element.
The Fiber stack may also be hotter in CPU caches when we choose
the most-frequently used stack.
commit 3e61265d4193340721dd53178c43c4fa24debb79
Author: Eric Wong
Date: Wed May 9 21:11:13 2012 +0000
test_isolate: update deps for EM tests
async_sinatra and rack-fiber_pool had new versions since
we last updated.
commit bdd64821feba82d9fce45c8dac64ba7b7bb530ac
Author: Eric Wong
Date: Wed May 9 02:20:42 2012 +0000
test_isolate: bump unicorn and kgio versions for testing
Users will pull the latest upstream, ensure things keep
working.
commit bbd55c8bcd0d2833c99a2c23856ff07be7f46f9a
Author: Eric Wong
Date: Wed May 9 02:18:08 2012 +0000
stream_response_epoll: fix for unicorn 4.3.x
unicorn 4.3.x now calls shutdown() explicitly on the socket,
so we can't just rely on a dup()-ed FD to keep a socket around.
commit 9573d9bc6c63aced28300a9d7346b5575eed8b7d
Author: Eric Wong
Date: Tue May 8 23:18:41 2012 +0000
tests: require sleepy_penguin 3.1.0 or later
We'll be making the XEpollThreadPool users depend on this, too.
commit 335b383fa43a6d21d473ebc81668dae9a3c09055
Author: Eric Wong
Date: Wed Apr 11 21:48:36 2012 +0000
doc: some spelling fixes
Found with rdoc-spellcheck
commit f2c27e950b3314b4a647c482d506ba4c7314cac4
Author: Eric Wong
Date: Thu Feb 23 08:07:13 2012 +0000
t/test_isolate: update test dependencies
At least for the gems I'm most familiar with...
commit b5756023920bc48bd879b419f80849ded38173c8
Author: Eric Wong
Date: Wed Oct 12 16:29:23 2011 -0700
t0501: fix ambiguous shell construct for capture + subshells
Starting with "$((" can be ambiguous and confused for shell arithmetic.
commit db46699c438c2d1287563587fddea84e34c53482
Author: Eric Wong
Date: Wed Oct 12 16:14:49 2011 -0700
http_server: fix log message if using Base (no concurrency)
Telling the user worker_connections=50 when using the Base
concurrency model is misleading.
commit 0b955487e44011d80a457618c2e8148c8ec05e05
Author: Eric Wong
Date: Fri Sep 2 02:14:03 2011 +0000
Rainbows! 4.3.1 - small bugfix
This release fixes a potential reentrancy deadlock when
using the default logger from the Ruby standard library.
commit 71b4507755f2bd279adb14e6cdc90e1380efa247
Author: Eric Wong
Date: Tue Aug 30 16:18:21 2011 -0700
avoid potential Logger deadlock in SIGQUIT and SIGUSR1
If any combination of SIGQUIT and SIGUSR1 are sent to a
Rainbows! worker in a /very/ short period of time, the Mutex
used by the default Logger implementation may deadlock since
Mutex synchronization is not reentrant-safe.
Users of alternative logger implementations (or monkey-patched
ones) are possibly not affected. Users of the logger_mp_safe.rb
monkey-patch distributed[1] with unicorn are not affected.
[1] http://unicorn.bogomips.org/examples/logger_mp_safe.rb
commit 58a09dccfa425811fa3b66e097c38bb303c2aa1e
Author: Eric Wong
Date: Sat Aug 20 01:15:30 2011 +0000
Rainbows! 4.3.0 - pull in changes from unicorn 4.1.0
The deprecated Rainbows::HttpResponse class is finally gone
thanks to Pratik Naik. Logging of errors is more consistent
with the changes in unicorn 4.1.0. There are also minor
documentation updates. See the unicorn 4.1.0 release notes
for more details:
http://bogomips.org/unicorn.git/tag/?id=v4.1.0
commit b6c07eb14f008361caca6fcc642df60b29ef192c
Author: Eric Wong
Date: Sat Aug 20 00:55:56 2011 +0000
bump unicorn dependency version
We want the stricter parser the error log filtering in
unicorn 4.1.0
commit cd40e197ab6ef6d0baa219497cea7458457f3343
Author: Eric Wong
Date: Sat Aug 20 00:50:52 2011 +0000
TODO: remove splice(2) item
Rainbows! 3.3.0 added the copy_stream Configurator directive
commit d74a4b4520f89ec2dbf539b02dea1f938c63d74c
Author: Eric Wong
Date: Sat Aug 20 00:46:28 2011 +0000
rdoc: cleanup and stop depending on :enddoc:
It doesn't seem to work at the top of the file...
commit f782ab61830ee92942abfcca7c7cb2cdd274e69d
Author: Eric Wong
Date: Sat Aug 20 00:37:03 2011 +0000
update development wrongdoc dep to 1.6
Hopefully this points more folks to email us.
commit fbc144d57e83dc8ef5d9e653d38f88ef4b74cb62
Author: Eric Wong
Date: Fri Aug 19 23:13:10 2011 +0000
event_machine: update rdoc for new Cramp homepage
Cramp has a homepage and mailing list now, yay!
commit 3b987ec182cbe919646ea1cb9cd903a31bd85d45
Author: Eric Wong
Date: Fri Aug 19 23:10:28 2011 +0000
cramp: update test dependency to version to 0.15
Everything appears to be working...
commit 371fbd9e1e189510c825063770ff4f5ea79bfead
Author: Eric Wong
Date: Fri Aug 19 23:07:59 2011 +0000
t/test_isolate: bump kgio test version
We always try to test with the latest and greatest.
commit ff70afb97c7f41e28b3d3f6df665daeb4d415989
Author: Eric Wong
Date: Tue Aug 16 19:00:37 2011 -0700
more consistent logging for errors
The Unicorn.log_error method exists since 4.0.0
commit 93e06d33193ee9fd4a58275a4909f008b4bcc4dc
Author: Eric Wong
Date: Fri Aug 12 07:53:21 2011 +0000
test_isolate: bump cool.io test version
Everything appears to work as expected under cool.io 1.1.0
commit a8949f91b323cf478f6aa99dc144f672d382e55e
Author: Pratik Naik
Date: Fri Aug 5 22:24:21 2011 +0100
Remove deprecated Rainbows::HttpResponse
Acked-by: Eric Wong
commit 017b95be08a702c9faae1949db9328f7e82c2d8c
Author: Eric Wong
Date: Fri Aug 5 23:31:18 2011 +0000
Rainbows! 4.2.0 - Cramp WebSocket updates!
This release includes updates to support WebSockets
under Cramp 0.14 and later. This will be the last
release which supports Cramp 0.13.
There are no changes in this release for non-Cramp
users.
commit 73a8847fac9939e1b42a471f7537b5f89bd5ca94
Author: Eric Wong
Date: Fri Aug 5 23:17:07 2011 +0000
bump Cramp test dependency to 0.14
commit ab175517f8fd22acada6daa46c89edda080fa6a9
Author: Eric Wong
Date: Fri Aug 5 19:08:12 2011 +0000
event_machine: APP needs to be in the main Client class
Oops, testing against new changes against cramp.git here
commit 7223b868624d19f3421045c2bc5b075bacd83694
Author: Eric Wong
Date: Fri Aug 5 18:44:32 2011 +0000
event_machine: add :em_client_class option
This can allow Cramp (and potentially other libraries)
to subclass or implement duck-type compatible versions
of Rainbows::EventMachine::Client.
commit c6bb07a6475f71dc1e2b46b87a34fbbf46c52b5d
Author: Eric Wong
Date: Fri Aug 5 18:15:45 2011 +0000
cramp: bump test version to 0.13
cramp was just released a few days ago and all the
tested pieces seem to work...
commit 8134763f3cc8403ef0e718aa511b192d305a0182
Author: Eric Wong
Date: Sat Jul 30 22:25:31 2011 +0000
Rainbows! 4.1.0 - minor internal cleanups
There are only some minor cleanups in this release and a bump to
kgio 2.5 to remove the dependency on io/wait. kgio 2.5 or later
is now required (kgio 2.6+ will be required in the next
release).
commit 1e57c4c846ba9a3b736078b860583b0e7dd33d6c
Author: Eric Wong
Date: Thu Jul 21 23:27:18 2011 +0000
remove tcp_nodelay/tcp_nopush tweaking
Unicorn 4.x already defaults match those of Rainbows!
to favor lower latency instead of lowered bandwidth
usage.
commit 175727bc349ec0f7b94b4de936c7e9de1aaffd2d
Author: Eric Wong
Date: Thu Jul 21 23:17:48 2011 +0000
remove unnecessary io/wait require
kgio 2.5 added kgio_wait_*able methods
commit 19a7c3afcb22af75ac3afc358e96325d00415ace
Author: Eric Wong
Date: Wed Jun 29 19:57:05 2011 +0000
Revert "http_server: cap timeout at 32-bit LONG_MAX seconds"
Unicorn (> 4.0.1) already handles this for us,
not that it affects many people...
This reverts commit 37c376a9253ed62d134cbb4dbc6eaecc6076c77e.
commit c3982b7c043effcfa897086a221567c035603352
Author: Eric Wong
Date: Tue Jun 28 23:32:26 2011 +0000
t0044: do not assume setsockopt() finished
Race conditions abound in the world of concurrency!
commit 65f251070ce9b61a9049cb413fccffdfa11e7a70
Author: Eric Wong
Date: Tue Jun 28 08:17:01 2011 +0000
Fix Fiber* and WriterThread* breakage from removing io/wait
This fixes up breakage introduced in commit
905f0ff393629ddb4d70e3dc221b016128c47415 to switch to
kgio for timed, synchronous waiting.
commit 905f0ff393629ddb4d70e3dc221b016128c47415
Author: Eric Wong
Date: Tue Jun 28 07:39:35 2011 +0000
require kgio 2.5 for kgio_wait_readable(timeout)
Since kgio_wait_*able in kgio 2.5 takes an optional timeout
argument, we no longer have to load the extra "io/wait" module.
This saves us a small amount of some memory and also removes the
extra ioctl(FIONREAD) syscall IO#wait enforces.
Like IO#wait in Ruby 1.9.3dev, kgio_wait_readable may use
ppoll() to wait on high-numbered file descriptors as efficiently
as it waits on low-numbered descriptors.
commit 9684ed46e78dab1ae787fe135a3cec1c4490ddd6
Author: Eric Wong
Date: Tue Jun 28 07:20:27 2011 +0000
bin/rainbows: release the OptionParser object from stack
No point in keeping it around to eat memory.
commit 37c376a9253ed62d134cbb4dbc6eaecc6076c77e
Author: Eric Wong
Date: Mon Jun 27 21:20:42 2011 +0000
http_server: cap timeout at 32-bit LONG_MAX seconds
We can't wait for longer than 68 years.
commit 1f8ebc013e8b0e9a62587fb95a81e8c5f541a9d4
Author: Eric Wong
Date: Mon Jun 27 09:20:37 2011 +0000
Rainbows! 4.0.0 - MOAR concurrency for MOAR COARS
Rainbows! now scales to more than 1024 worker processes without
special privileges. To enable this, Rainbows! now depends on
Unicorn 4.x and thus raindrops[1].
client_max_header_size directive is added to limit per-client
memory usage in headers.
An experimental StreamResponseEpoll concurrency option now
exists to buffer outgoing responses without any thread-safe
dependencies. Unlike the rest of Rainbows! which works fine
without nginx, this concurrency option is /only/ supported
behind nginx, even more strongly so than Unicorn itself.
non-nginx LAN clients are NOT supported for this. This relies
on the sleepy_penguin[2] RubyGem (and Linux).
There are some minor bug fixes and cleanups all around. See
"git log v3.4.0.." for details.
[1] http://raindrops.bogomips.org/
[2] http://bogomips.org/sleepy_penguin/
commit cc74623dddb9d28d7d5a2479aafdb7a754645697
Author: Eric Wong
Date: Mon Jun 27 09:18:39 2011 +0000
bump dependencies (kgio, unicorn, raindrops)
We now rely on Unicorn 4.0.0. We'll use the latest
kgio and raindrops versions anyways.
commit 0e9d8ac759f7c5d783f055df0fb5d4f08c68db71
Author: Eric Wong
Date: Mon Jun 27 09:15:24 2011 +0000
remove unused arg in Rainbows::Response.setup
It hasn't been used in a while, but we kept it for
Zbatery version compatibility.
commit 8c1e3da65d7a709c6578652fa57e5ca0e7a9a459
Author: Eric Wong
Date: Wed Jun 22 07:40:03 2011 +0000
epoll/client: properly close on all pipe responses
Some pipe responses can trigger the on_deferred_write_complete
method without ever re-running the event loop.
This appears to be the result of the occasional t0050 failures.
commit 63aff8f1cffebaeb6320a5f6d2ec8cb9c7d8ea54
Author: Eric Wong
Date: Wed Jun 22 07:05:37 2011 +0000
t0050: improve diagnostics for this test
This test seems to fail sometimes with Epoll and XEpoll...
commit cdbec31577cae4fcaa3c4dcd0492d2ab81307fe4
Author: Eric Wong
Date: Wed Jun 22 02:25:56 2011 +0000
t/test_isolate: remove unneeded comment
That's been around forever, and we think Rubinius supports
that...
commit a831f5685ac03f7f0f3d341df89eade6134b55b4
Author: Eric Wong
Date: Wed Jun 22 02:25:11 2011 +0000
dev_fd_response: enable under Rubinius
Untested, but it should work nowadays...
commit 6858c79a49a5d25edb6c06ffd131749eb2f23b2b
Author: Eric Wong
Date: Wed Jun 22 02:21:58 2011 +0000
Unicorn 4.x resync for ticker
This removes the extra per-process file descriptor and
replaces it with Raindrops.
commit 51859dfd9b9f11f6cc0af3fc252312b8018a88e2
Author: Eric Wong
Date: Wed Jun 22 02:21:33 2011 +0000
t/test_isolate: drop Unicorn test dependency for now
It's already a runtime dependency
commit be9f24aa1392c67294187844a620e3a9974e0948
Author: Eric Wong
Date: Wed Jun 15 22:42:49 2011 +0000
remove IO_PURGATORY dependency
We no longer need to put all listeners away since
Unicorn uses kgio.
commit 281ef555c40cf292809ad10d623d0571fafc790e
Author: Eric Wong
Date: Sat Jun 11 06:35:12 2011 +0000
configurator: add client_max_header_size directive
Lowering this will lower worst-case memory usage and mitigate some
denial-of-service attacks. This should be larger than
client_header_buffer_size.
The default value is carried over from Mongrel and Unicorn.
commit 1f3e7b1c7ee89aefdcadd4aebd7b0527baa188a3
Author: Eric Wong
Date: Sat Jun 11 05:46:52 2011 +0000
doc: remove docs for Rainbows::Fiber::* APIs
Do not encourage their use, really.
commit d01c5df960546462e8f5f458131d78689342d6aa
Author: Eric Wong
Date: Fri Jun 10 22:39:01 2011 -0700
stream_response_epoll: update documentation
Yes, this concurrency model is our strangest yet.
commit b065cab4fa5ca25302220c20563398a57069ae08
Author: Eric Wong
Date: Sat Jun 11 00:34:42 2011 +0000
remove Rainbows.run method
We can get away with a single stack frame reduction. Unicorn
itself has more stack reductions, but Rainbows! is further
behind in this area.
commit 1468604be898d17c2cf2da519dccd493c58f4282
Author: Eric Wong
Date: Fri Jun 10 22:08:04 2011 +0000
ev_core: do not autochunk HTTP/1.0 (and 0.9) responses
Do not assume middlewares/applications are stupid and blindly
add chunking to responses (we have precedence set by
Rack::Chunked).
commit 1aa7eb6608d04a21d1143e7ac09e5219a1208123
Author: Eric Wong
Date: Fri Jun 10 21:35:48 2011 +0000
ev_core: use add_parse for trailers, too
HttpParser#trailers and #headers are actually the same
method, so we'll just continue on.
commit 27f54de4b83e20c5d68c6dd225c1d350aeee5cd3
Author: Eric Wong
Date: Fri Jun 10 20:27:22 2011 +0000
gemspec: add GPLv3 to commented-out licenses section
Reduces inconsistency.
commit 7bb7c4469fb744135377d68e7c29cde3fbc635dc
Author: Eric Wong
Date: Fri Jun 10 02:13:55 2011 +0000
use HttpParser#add_parse API in Unicorn 3.7.0
It's easier-to-use in some cases.
commit 772a5da573a661df6421afa6398b9e4023e77ce4
Author: Eric Wong
Date: Thu Jun 9 23:47:37 2011 +0000
tests: more fixes for StreamResponseEpoll
Oops.
commit be467481fe774e60f5a349c6447769f090e57e06
Author: Eric Wong
Date: Thu Jun 9 21:29:02 2011 +0000
response: sendfile_range fis for Rack::File in rack 1.3.0
Rack::File already sets Content-Range, so don't repeat work
and reparse Content-Length.
commit 5bd92111979d968fc9b982f1e529b8044e718f71
Author: Eric Wong
Date: Thu Jun 9 21:08:38 2011 +0000
t/t9002: use Rack::Head
We send HEAD requests and expect body-less responses.
Noticed while running a newer rack version after re-isolating.
commit 879968a88559c434b4f117e86e61ccdb62263b26
Author: Eric Wong
Date: Thu Jun 9 21:01:00 2011 +0000
update various RubyGem dependencies
Gotta keep using the latest and greatest.
commit 40edc84784864063a38ba38bf854a2119c243ce4
Author: Eric Wong
Date: Thu Jun 9 00:34:00 2011 +0000
stream_response_epoll: our most "special" concurrency option yet
This doesn't use Rainbows::Base so we have no keepalive support
at all. This could eventually be an option for streaming
applications.
commit 54deb6a9a0e868c0958c9ec145e311661ce90e54
Author: Eric Wong
Date: Thu Jun 9 00:23:28 2011 +0000
move reopen_worker_logs to base
We may not always use Rainbows! :Base since we don't want
keepalive/immediate log reopening in some cases.
commit 99244e8e30eded813bd8eaf7f2136a3871bd486c
Author: Eric Wong
Date: Mon Jun 6 10:24:05 2011 -0700
doc: remove --sanitize-html for pandoc
pandoc 1.8 no longer supports this, and we don't need it anyways
since we only generate documentation from our repository.
commit d40aff8c3fb6ecce314897837c28d9400fbf38a8
Author: Eric Wong
Date: Tue May 31 08:33:04 2011 -0700
xepoll_thread_*: update docs for Linux 3
Linux 3.0.0 is just around the corner and of course newer
than 2.6.
commit cfe9a6d38533d380112f2b99bea9a1a3664f0395
Author: Eric Wong
Date: Mon May 30 21:31:23 2011 +0000
test-lib: enable splice(2) for Linux 3.x
The latest Linux series is now 3.x, not 2.6.x
commit 983722912028f35348c8ff276df48855281be715
Author: Eric Wong
Date: Sat May 21 03:02:09 2011 +0000
Rainbows 3.4.0 - minor updates and fixes
SIGQUIT (graceful shutdown) now drops idle keepalive clients for
the concurrency models where maintaining an idle client is
relatively inexpensive: Coolio, CoolioThreadPool,
CoolioThreadSpawn, Epoll, EventMachine, XEpoll,
XEpollThreadPool, XEpollThreadSpawn.
Kgio.autopush now works properly for all multi-threaded
concurrency models (if you're using :tcp_nopush).
commit e5eda7790806d6d7709d02db04c75f09340e9a24
Author: Eric Wong
Date: Sat May 21 03:01:50 2011 +0000
pkg.mk: update to the latest version
* locale fix for grep
commit 7bd77ef78055af5d5232d16f00568ce02b947ae0
Author: Eric Wong
Date: Fri May 20 18:23:50 2011 -0700
use and recommend sleepy_penguin 3.0.1
It's better under 1.9.3 (sleepy_penguin 3.0.1 was bogus)
commit 07cb79c14399a292ae2a50db007180941c758c69
Author: Eric Wong
Date: Fri May 20 18:23:50 2011 -0700
use and recommend sleepy_penguin 3.0.0
It's better under 1.9.3
commit 9009074ae535438696b706b4d6b8d4c72187c33e
Author: Eric Wong
Date: Fri May 20 18:15:30 2011 -0700
t0044: increase test reliability
commit f83fe5edb79e51616afcf2a9f991cfe153eabd48
Author: Eric Wong
Date: Fri May 20 15:44:48 2011 -0700
try_defer: enable documentation
It should hopefully give this more visibility even though it's
an internal feature.
commit 0b9b4edc63c0021e567c68137e1ee7f9e99ddcc5
Author: Eric Wong
Date: Fri May 20 18:13:21 2011 -0700
xepoll_thread_pool/client: improve autopush support
We need to trigger a recv() to uncork the response.
This won't affect fairness (much) since all recv()s
are non-blocking and a successful header parse will
put us in the back of the queue.
commit a5419a5fd57a231e40b7a3ba48a02cdef15909be
Author: Eric Wong
Date: Fri May 20 15:30:11 2011 -0700
.gitignore: add tags/TAGS files
Some folks use them.
commit f4b084225b7115efecfbfb2b5d16da1f1da5c39e
Author: Eric Wong
Date: Fri May 20 15:17:21 2011 -0700
add tests for Kgio autopush on Linux
We can support it fully for a subset of concurrency models where
we have full control over buffering and HTTP/1.1 keepalive
clients.
commit a396de855e291d27d43454618031432634fe7d37
Author: Eric Wong
Date: Fri May 20 14:24:14 2011 -0700
add test for SIGQUIT disconnect
This will only be supported for certain concurency models, but
it's probably good enough.
commit 5d5033afa9052dc0d60e743f07bc694f008182b3
Author: Eric Wong
Date: Fri May 20 14:22:37 2011 -0700
event_machine: disconnect idle clients at on SIGQUIT
Since it's cheap to maintain keepalive clients with EM, we need
a way of disconnecting them in a timely fashion on rare SIGQUIT
events.
commit bba079d8a605b546bc262e80234c3c233a386e44
Author: Eric Wong
Date: Fri May 20 18:58:04 2011 +0000
client: use kgio_write across the board
This should enable Kgio "autopush" support for ThreadSpawn,
ThreadPool, XEpollThreadSpawn, and XEpollThreadPool.
(still needs tests)
commit ea6d0eab436c78113f8a61e7fcc34db4117d14c0
Author: Eric Wong
Date: Fri May 20 09:19:51 2011 +0000
coolio* + *epoll*: drop keepalive clients on SIGQUIT
In concurrency models long keepalive times are cheap (and thus
more likely to be used), this allows Rainbows! to gracefully
shut down more quickly.
commit 90af18f6884857704d72fd6b2bb91718aad72117
Author: Eric Wong
Date: Thu May 19 23:54:59 2011 -0700
epoll/xepoll: more consistent client implementations
There's less logic in the server this way and easier
to potentially share code this way.
commit 5e4f790847198e1267b2fbd5decfa09e5cc3d618
Author: Eric Wong
Date: Tue May 17 17:38:12 2011 -0700
doc: recommend io_splice 4.1.1 or later
io_splice 4.1.1 works around issues with socket
buffers filling up pipe buffers on blocking splice.
See http://lkml.org/lkml/2009/1/13/478 for a better
explanation.
commit bc4f5510cd0e5ccf85f077cca019bca70309bf01
Author: Eric Wong
Date: Mon May 16 14:12:27 2011 -0700
Rainbows! 3.3.0 - doc improvements and more
* improved documentation all around, suggestions/comments to further
improve documentation is greatly welcome at: rainbows-talk@rubyforge.org
* added GPLv3 option to the license (now (Ruby|GPLv2|GPLv3), though
Unicorn is still (Ruby|GPLv2) for now)
* added client_header_buffer_size config directive (default 1K)
* small default header buffer size (16K => 1K) to reduce memory usage,
Rails apps with cookie sessions may want to increase this (~2K)
* all concurrency models default to 50 connections per process
* all concurrency models with a secondary :pool_size parameter also
default to 50 (threads/fibers/whatever)
* RLIMIT_NOFILE and RLIMIT_NPROC are automatically increased if needed
* Rainbows::ThreadTimeout middleware rewritten, still not recommended,
lazy people should be using Unicorn anyways :)
* Several experimental Linux-only edge-triggered epoll options:
XEpollThreadSpawn, XEpollThreadPool, XEpoll, and Epoll.
The latter two were in previous releases but never announced.
These require the "sleepy_penguin", "raindrops", and "sendfile" RubyGems
=== Deprecations
* Rainbows::Fiber::IO* APIs all deprecated, Rainbows! will avoid
having any concurrency model-specific APIs in the future and
also avoid introducing new APIs for applications.
* Fiber-based concurrency models are no longer recommended, they're
too fragile for most apps, use at your own risk (they'll continue to
be supported, however). Linux NPTL + Ruby 1.9 is pretty lightweight
and will be even lighter in Ruby 1.9.3 if you're careful with stack
usage in your C extensions.
commit bcd0825fc77a2986aebb3f1f5a653a64faf6a8c5
Author: Eric Wong
Date: Mon May 16 21:01:47 2011 +0000
writer_thread_*: fix sendfile detection under Ruby 1.8
I can't wait until I stop supporting Ruby 1.8
commit 912c328ecfccf189239c4ad2bb7863d64342868f
Author: Eric Wong
Date: Mon May 16 20:42:10 2011 +0000
document RubyGem requirements
Hopefully makes things easier to try out.
commit 46ac7ca9f3e5c7736aa1c9430d2de218e27bf730
Author: Eric Wong
Date: Mon May 16 20:32:29 2011 +0000
doc: cleanup rdoc for Rainbows module
The only supported method is Rainbows.sleep in here
commit 362ac7801d4f6ddd85cbafdc7e9118f88089564a
Author: Eric Wong
Date: Mon May 16 20:13:00 2011 +0000
use :pool_size for RLIMIT_NPROC with thread pool models
Only needed for Ruby 1.9
commit f9de85b9a35c9f95b390249ea855858c5e4a3ae2
Author: Eric Wong
Date: Mon May 16 20:05:12 2011 +0000
more reliable shutdown for epoll concurrency models
Just close the epoll descriptor, since the sleepy_penguin
epoll_wait wrapper may not return EINTR in the future.
commit 49b60d6f67a94560a802c6ff80c16c92093de877
Author: Eric Wong
Date: Mon May 16 19:43:38 2011 +0000
tests: unify checks for copy_stream and threaded app dispatch
This makes things easier to maintain as we add more concurrency
options.
commit 39f625fff05d457b01f088017f463a86d3b6c626
Author: Eric Wong
Date: Mon May 16 19:04:06 2011 +0000
add "copy_stream" config directive
This allows using IO::Splice.copy_stream from the "io_splice"
RubyGem on recent Linux systems. This also allows users to
disable copy_stream usage entirely and use traditional
response_body.each calls which are compatible with all Rack
servers (to workaround bugs in IO.copy_stream under 1.9.2-p180).
commit d520222050ce88388ae5e446c63642d79cc9796e
Author: Eric Wong
Date: Tue May 10 16:34:51 2011 -0700
configurator: update user-facing documentation
Finally, we have all methods in configurator and it's
much easier to document!
commit 95cec890409ac07d51c87ab157fe7e101d6f8432
Author: Eric Wong
Date: Tue May 10 16:33:07 2011 -0700
max_body: documentation updates
It can't be used as middleware for fully-buffering concurrency
models.
commit 382d3cabfda9fdd391228d24e8a8d4cb014648b9
Author: Eric Wong
Date: Tue May 10 15:35:21 2011 -0700
LICENSE: add GPLv3 to license terms
GPLv2 and Ruby-specific terms remain intact, but this means
we can be combined and redistributed with GPLv3-only software
(once Unicorn has GPLv3 added to its license).
commit 704f843054f3ca32941d42972a1c7d1b144d06ad
Author: Eric Wong
Date: Mon May 9 04:39:54 2011 +0000
configurator: move validation logic over
There's actually no reason we can't have these methods
in Rainbows::Configurator where it's easier to document
nowadays.
commit 598525843ee1d120fd9878011ca2b6328c2cf95f
Author: Eric Wong
Date: Mon May 9 02:24:26 2011 +0000
doc: better document :pool_size options
CoolioThreadPool has had it supported forever, but
only NeverBlock had it documented.
commit 1e3b7e9bfef992b337a9a113da6c99071dce60e1
Author: Eric Wong
Date: Mon May 9 02:15:55 2011 +0000
TODO: misc updates
Some things were never going to get done due to lack of interest
from users.
commit 87632aac323bd41701900a03dc78bc307fa8229a
Author: Eric Wong
Date: Mon May 9 02:13:51 2011 +0000
doc: update comparison and README
Clearly users need to know about more options
commit d0336075a772d040b9fe3100098e1815ce609cb4
Author: Eric Wong
Date: Mon May 9 01:57:16 2011 +0000
xepoll_thread_*: add rdoc for users
It's good to describe what they're useful for.
commit a62e9240fffe544d171c87f94946ecf50888a6df
Author: Eric Wong
Date: Mon May 9 01:56:46 2011 +0000
xepoll_thread_spawn/client: remove rdoc
It's an internal implementation detail.
commit 6b430295177c4689a6a5d421d575867c5da8ba2b
Author: Eric Wong
Date: Mon May 9 01:55:32 2011 +0000
max_body: rdoc updates
speling ficks and less confusing #initialize documentation
commit 9afcdde9a92f817330e4dfd5e1ef77a7bf461253
Author: Eric Wong
Date: Mon May 9 00:21:23 2011 +0000
xepoll_thread_pool: add optional :pool_size argument
We're now able to configure the number of threads independently
of worker_connections.
commit 725adcc6986bc2658d92ea3ebebe61d2b83060ad
Author: Eric Wong
Date: Mon May 9 00:17:06 2011 +0000
split out pool_size module
coolio_thread_pool, neverblock both use it, and
xepoll_thread_pool will support it next, too.
commit 3c1649226d2371ce09d14f3fcce18fec0af1ba02
Author: Eric Wong
Date: Mon May 9 00:16:23 2011 +0000
t0041: less confusing skip message
Just the test name is irrelevant
commit 380ef63bc2c8f7b6f1cab7387aa9343bc5720c9c
Author: Eric Wong
Date: Mon May 9 00:02:51 2011 +0000
add XEpollThreadPool concurrency option
This is probably friendlier on server resources in the worst
case than XEpollThreadSpawn but may perform worse in the client
client-visible way, too.
commit df00f2b1028ba95450246c82e468878b6ec903a3
Author: Eric Wong
Date: Sun May 8 07:54:30 2011 +0000
Revert "epoll: fixes for Ruby 1.9.3dev"
Fixed in kgio 2.4.0 now
This reverts commit a1168e7d2bfe182896f139d051ef099616fd1646.
commit ed869514211a908748f04a881e6fb18a395914ae
Author: Eric Wong
Date: Sun May 8 07:47:03 2011 +0000
join_threads: simplify thread stoppage check
No need for a string comparison
commit 8af417bbacb285c90a376c55a42fe39a981a328d
Author: Eric Wong
Date: Sun May 8 07:39:38 2011 +0000
require kgio 2.4.0
kgio 2.4.0 has some 1.9.3dev fixes which affect us
commit ec3f871c9a34734b865365a43979a0b459654b05
Author: Eric Wong
Date: Sun May 8 07:26:55 2011 +0000
epoll_wait: flags argument is unused
We only poll for one event (EPOLLIN/EPOLLOUT) at a time,
so there's no need to actually check since they're too
rare.
commit e64e2e0045d63c4edd291839febba978534be652
Author: Eric Wong
Date: Sun May 8 07:22:36 2011 +0000
xepoll: cleanup acceptor logic
worker_yield is safer than setting a threshold with multiple
acceptors when thread limits are hit. Also, avoid sleep +
Thread#run since it's potentially racy if threads are extremely
unfairly scheduled.
Same things applied to xepoll_thread_spawn.
commit 07a0bee9dd6f2c366d11284b7e9ab09d66b411e4
Author: Eric Wong
Date: Sun May 8 04:06:12 2011 +0000
xepoll_thread_spawn: rework acceptor logic
Infinite sleep is too dangerous due to possible race conditions,
so use worker_yield which is safer and cheaper in the general
case. We can also avoid sleeping on new threads by only
spawning when the client module is included.
commit c543b295ff2108623f3748a141e04e5530d06377
Author: Eric Wong
Date: Sun May 8 03:58:21 2011 +0000
xepoll_thread_spawn/client: close returns nil
Otherwise pipeline_ready can false positive on us
commit 497ce74310baaa7ac4835b8d6aa76acb40d44b7c
Author: Eric Wong
Date: Sun May 8 01:28:43 2011 +0000
xepoll_thread_spawn: inline needless method
shorter line and 3 lines of code killed!
commit ef9376775b1a6eeae8807160b2b8ea23fbfd3607
Author: Eric Wong
Date: Sun May 8 01:27:25 2011 +0000
process_client: fix pipeline_ready arity
Not that it's actually used, right now.
commit 3decb4375847b97c117440e5167dbba33d5f33b5
Author: Eric Wong
Date: Fri May 6 01:04:39 2011 +0000
remove unnecessary variable assignments
commit bcca2d3bc609e9ecaa77ec93bef861b1ddcc01dd
Author: Eric Wong
Date: Fri May 6 00:52:18 2011 +0000
test_isolate: update to latest raindrops and unicorn
Newer versions should be better
commit 21a1a20223986af8c8962cafe2e0f1eae0dcfd19
Author: Eric Wong
Date: Fri May 6 00:38:53 2011 +0000
ensure some requires get loaded in master
More sharing, faster startups, and most importantly,
better error reporting if some things are missing.
commit 0efe7b677b076a32ef54e5f2f0a9861eb1f7f3d9
Author: Eric Wong
Date: Thu May 5 07:16:48 2011 +0000
http_server: XEpollThreadSpawn sets RLIMIT_NPROC
It *can* have as many threads as it does idle connections.
commit 8fb350e00c1421907cbc36cbf29c499b8ad051e4
Author: Eric Wong
Date: Tue May 3 01:18:45 2011 +0000
Rainbows! defaults more DRY
We won't forget to reset defaults on SIGHUP anymore.
commit e9a229c639dd6bda08a3fa8ce14af3688dc2ba63
Author: Eric Wong
Date: Tue May 3 01:15:37 2011 +0000
s/max_bytes/client_max_body_size/ for consistency
Too confusing otherwise...
commit a7f5f17ba2047ef7143465f612007ea81871a79e
Author: Eric Wong
Date: Tue May 3 01:05:11 2011 +0000
add client_header_buffer_size tuning parameter
We're changing our default to 1K buffers to save memory. This
should reduce memory usage of idle clients and lower pressure on
the MRI GC. Rails applications using session cookies (the
default) may want to up this to 2K or more.
commit 01381ab4dfeb032c85e72724df889c7aa381aa32
Author: Eric Wong
Date: Mon May 2 22:05:52 2011 +0000
rainbows: get rid of MODEL_WORKER_CONNECTIONS constant
Just use regular autoload, now. Less guesswork.
commit 25c5930988d6deab8f885981fdaf6c1eb12fdf98
Author: Eric Wong
Date: Mon May 2 08:05:45 2011 -0700
http_server: default all options to 50 connections
pavinging the way for changing MODEL_WORKER_CONNECTIONS
commit ce4f5cd7197fb99ed99399b22cbece1684532f85
Author: Eric Wong
Date: Sun May 1 01:44:28 2011 +0000
doc: add Sandbox document
Rainbows! is a bit bigger than Unicorn and usually requires
being sandboxed, too.
commit 8c086f095a2f3be0f71829af9037d99c79604a37
Author: Eric Wong
Date: Sat Apr 30 06:56:47 2011 +0000
lower header buffer sizes for synchronous models
HTTP headers are usually smaller than 4K, so 16K was way too
much for most users and often caused unnecessary GC runs.
EventMachine and Coolio models can all share the same initial
read buffer, so it's less urgent that they get this lowered for
now...
commit bfb58da95e13f3061feb2c1f284efc80a13ba23c
Author: Eric Wong
Date: Sat Apr 30 06:50:17 2011 +0000
xepoll_thread_spawn: lower memory usage
This one actually has a realistic chance of running
hundreds/thousands of clients, and 32K per-client is
a huge amount.
commit ca8021d4177e5f7131f88daf6b56402ff39c3a35
Author: Eric Wong
Date: Fri Apr 29 18:14:10 2011 +0000
epoll: fix timeout
Epoll#wait and epoll_wait(2) timeouts are in milliseconds,
not seconds. This affects xepoll, too.
commit 73ed28f1863d5ae3048a284e25a918255bdafe8a
Author: Eric Wong
Date: Fri Apr 29 18:11:04 2011 +0000
xepoll_thread_spawn: fix race condition with acceptors
Noticed under 1.8.7
commit aff36865d5e738babdbf36f34fd0693b67bb3d90
Author: Eric Wong
Date: Fri Apr 29 05:45:44 2011 +0000
xepoll_thread_spawn: initial implementation
Whee! This is going to be awesome.
commit 40cf3eb79054caa4b7d81120a736491aca8259eb
Author: Eric Wong
Date: Thu Apr 28 18:42:46 2011 +0000
document epoll and xepoll
They're probably ready for general use in a very limited
capacity...
commit 6ea50dd6866a7b4eda5134cb2c8980710285e127
Author: Eric Wong
Date: Tue Apr 26 14:04:26 2011 -0700
doc: stop recommending Fiber* stuff
Too much NIH and too fragile.
commit 5bd08f7bb06367823412bd3410bcb41babd6d57b
Author: Eric Wong
Date: Tue Apr 26 14:00:25 2011 -0700
revactor: remove documentation for internal methods
commit 00b9b46b2a49ab96f74fd21807ee9c93b218bc2d
Author: Eric Wong
Date: Tue Apr 26 13:30:28 2011 -0700
revactor: do not recommend, upstream is dormant
commit e3c8152e016fe29f76a996b8802df7158c081db0
Author: Eric Wong
Date: Tue Apr 26 12:56:20 2011 -0700
stream_file: hide internals
No need to expose things that don't need exposing.
commit 012d3e3d1ae9186434efcaa746f25118683fe8b3
Author: Eric Wong
Date: Mon Apr 25 19:44:13 2011 -0700
make all concurrency options use 50 by default
This may change again in the future, but it
paves the way for simplifying this code...
commit f6471ed9cafe6e65e72fa9486ecdcc4b2f8d1373
Author: Eric Wong
Date: Thu Apr 21 15:38:20 2011 -0700
thread_timeout: annotate as much as possible
This should make code review easier.
commit 63b3b40abf054bce2846bc9e36770a6ed2791a8b
Author: Eric Wong
Date: Sat Apr 9 18:58:23 2011 -0700
increase RLIMIT_NPROC for thread-crazy folks
Might as well, threads are free and cheap on 64-bit
commit 066bbf930d023ecf61ed4af363aebadbce2c51db
Author: Eric Wong
Date: Fri Apr 8 13:38:11 2011 -0700
http_server: attempt to increase RLIMIT_NOFILE
In case people try to do C10K, make life easier for them.
commit e5c4125c348104444714b5111c90016d520461d6
Author: Eric Wong
Date: Thu Apr 21 21:22:06 2011 +0000
thread_timeout: document Thread.pass usage
Thread-switching sometimes takes too long under YARV, so we
force a switch since the watchdog thread is lower-priority.
commit 71d48a01a7c257dffa22c10781c55deff64037d2
Author: Eric Wong
Date: Thu Apr 21 21:21:13 2011 +0000
join_threads: workaround blocking accept() issues
Should be fixed in 1.9.3 and/or future Kgio...
commit 7f368d2cf9e456e37f1489dc275ed0de007175dd
Author: Eric Wong
Date: Thu Apr 21 06:48:46 2011 +0000
bump dependency to Unicorn 3.6.0
Might as well use the latest and greatest.
commit 15505863ce2080bdf342930530acc35c0d112df1
Author: Eric Wong
Date: Tue Apr 19 04:35:43 2011 +0000
http_server: less hacky loading of concurrency model
Ugh the old way was gross.
commit 367ba00d2f3a4e9a0fa848d076f97f754a9d7cc5
Author: Eric Wong
Date: Mon Apr 11 07:54:50 2011 +0000
t: only enable Revactor tests under 1.9.2 for now
Revactor doesn't seem to work under 1.9.3dev, and Revactor is
dead upstream.
commit a1168e7d2bfe182896f139d051ef099616fd1646
Author: Eric Wong
Date: Mon Apr 11 07:53:57 2011 +0000
epoll: fixes for Ruby 1.9.3dev
commit 321e3dfbd5c4a585c00a8d5221ebdf9b934aaea1
Author: Eric Wong
Date: Mon Apr 11 04:16:31 2011 +0000
thread_timeout: rewrite for safety
This attempts to fix all the danger associated with using
Thread#raise. Hopefully I succeeded.
Note: this logic _cannot_ be used to fix the timeout.rb
module in the Ruby standard library, that one needs to
allow nested timeouts (which seems impossible).
commit 5170b767ef1bbc94554920959d1792fce43899a9
Author: Eric Wong
Date: Sun Apr 10 07:42:31 2011 +0000
thread_pool: get used of dead thread_join method
It's in the JoinThreads module now
commit 777beb3e27785d2da2865cb5fc0d43f1c158cb5e
Author: Eric Wong
Date: Tue Mar 22 11:08:31 2011 -0700
queue_pool: switch to ivars to protect internals
commit dd6d5168e4f3dcb4555264265a05e5b61273893d
Author: Eric Wong
Date: Tue Mar 22 17:22:00 2011 +0000
thread_pool+thread_spawn: update documentation
They're not bad with slow clients a previously thought.
commit 53fdbda1ba1d88e93d662a040fe4c7fb52810155
Author: Eric Wong
Date: Mon Mar 21 02:45:02 2011 +0000
simplify LISTENERS closing
No need to obfuscate what it's doing
commit c7e75cfe241a621f50c750720c47149a156e8e7f
Author: Eric Wong
Date: Sun Mar 20 03:07:31 2011 +0000
fix various warnings with "check-warnings" target
Run under 1.9.3dev
commit d327a0d468e5b5cfb05bb56621fb22d156ce3a40
Author: Eric Wong
Date: Thu Mar 17 09:59:55 2011 +0000
pkg.mk: new task for checking Ruby warnings
commit ee9e7886d9101a6376d268a931c645026e9f6b0f
Author: Eric Wong
Date: Tue Mar 15 21:44:14 2011 +0000
fiber/io: fix broken call to Kgio.trywrite
Fortunately it's a deprecated class that nobody
uses...
commit e9cb419a7887fce13fc7b185177c87fc45279383
Author: Eric Wong
Date: Tue Mar 15 12:36:10 2011 +0000
Rainbows! 3.2.0 - trying to send files to slow clients
We now use IO#trysendfile in the sendfile 1.1.0 to reduce the
cost of generating backtraces for slow clients (from EAGAIN).
Nothing new for people not serving static files (but more
on the way).
Existing "sendfile" gem users must upgrade to 1.1.0
or risk being left without sendfile support at all:
http://bogomips.org/rainbows.git/patch?id=cd8a874d
commit f550b2ac5cdfedba53564609af19db38c302bbf4
Author: Eric Wong
Date: Tue Mar 15 12:35:06 2011 +0000
bump Unicorn dependency to 3.5.0
Latest and greatest :D
commit c158f140e6a402278602b3be890c2c1dc494465d
Author: Eric Wong
Date: Thu Mar 10 15:22:06 2011 -0800
doc: update Static_Files for new sendfile gem
Ugh, and still no usable IO.copy_stream under 1.9.2 :<
commit cd8a874d18fe01e11bb57b91186b6c9f712a4b3f
Author: Eric Wong
Date: Thu Mar 10 15:06:10 2011 -0800
switch from IO#sendfile_nonblock to IO#trysendfile
IO#trysendfile does not raise exceptions for common EAGAIN
errors, making it far less expensive to use with the following
concurrency models:
* Coolio
* CoolioFiberSpawn
* Revactor
* FiberSpawn
* FiberPool
This requires the new sendfile 1.1.0 RubyGem and removes support
for the sendfile 1.0.0. All sendfile users must upgrade or be
left without sendfile(2) support. IO#sendfile behaves the same
if you're using a multi-threaded concurrency option, but we
don't detect nor use it unless IO#trysendfile exists.
commit afea5cd7c691de95b37d29728ab4880e3b737a42
Author: Eric Wong
Date: Tue Mar 8 14:08:43 2011 -0800
test_isolate: bump dependencies
New sendfile gem will give us IO#trysendfile.
We might as well use and test the latest and greatest
versions of everything else since thats what users
pull in by default.
commit 85784e1b5fca7bbadc7fb5dba1f100785188954f
Author: Eric Wong
Date: Mon Feb 28 03:10:55 2011 +0000
use IO#wait instead of IO.select for single readers
It's a simpler interface and avoids allocating an array
which is nice.
commit 829d58c261ba64bb4f512c6591eba2f468df15a6
Author: Eric Wong
Date: Wed Feb 16 10:47:27 2011 -0800
README: clarify license terms and versions
Ruby 1.9.3dev switched to BSD but we remain under the same terms
as the old Ruby 1.8 license. Mongrel2 exists now and also uses
the BSD, so don't confuse people with that, either.
commit 23be173e2506f8a39d3e7b3097cef4e3b8a31ccc
Author: Eric Wong
Date: Tue Feb 15 09:44:23 2011 -0800
tests: updates for cramp 0.12
The Cramp::Controller namespace is gone.
commit 061cb38ee10c431a015276c2cf3db37e5e3e66ef
Author: Eric Wong
Date: Fri Feb 11 10:49:56 2011 +0000
Rainbows! 3.1.0 - minor updates
Small bug fixes that have been sitting around, not much but
it's already been one month since our last release.
* Unicorn dependency updated to 3.4.0, so we get IPv6 support
and Kgio.autopush support for ":tcp_nopush => true" users.
* Optional :pool_size argument is fixed for NeverBlock and
CoolioThreadPool users.
* Mostly minor internal code cleanups
* Sunshowers support removed, it was out-of-date and
unmaintained. Cramp remains supported for now.
* X-Rainbows-* response headers support removed, nobody used it.
There are severalnew features in this release not documented
here. Consider any new features not mentioned in these release
notes to be subject to removal/renaming in future releases.
commit 93625a24f0b20a89f4ab732c92f76640e387c1a0
Author: Eric Wong
Date: Fri Feb 11 11:12:17 2011 +0000
pkg.mk: update to the latest
* Fixes Ruby 1.9.3dev deprecation warnings
* Fixes some documentation dependency issues
commit 3b3047f2f60a5f9c4f526fe8fcfc0d7897422abb
Author: Eric Wong
Date: Fri Feb 11 10:49:07 2011 +0000
reverse_proxy: document as "not ready for production"
Of course some folks believe nothing in Rainbows! is :.
commit 04b8de2cf6c3037c45e60d3720472b09dd23efd5
Author: Eric Wong
Date: Mon Feb 7 19:48:46 2011 -0800
Revert t/bin/unused_listen simplification
This conflicts with ports clients may automatically use
in the ephemeral range.
This reverts commit c9a7560bb684bbdadb641ebc7597303f38c37d4f.
commit 662a146457689110c83bfd18987938475966f454
Author: Eric Wong
Date: Mon Feb 7 19:26:04 2011 -0800
new test for optional :pool_size handling
This will help prevent us from breaking :pool_size in the
future.
commit a34b1048d05397f72ad579fcef72cbb1a9e9d8bc
Author: Graham Hughes
Date: Mon Feb 7 16:49:31 2011 -0800
fix optional "use" argument handling
Actually use the Rainbows::O constant for use
[ew: rewritten commit message subject]
Acked-by: Eric Wong
commit b7d974960b58d732149d5fabf870b2332b6877f7
Author: Eric Wong
Date: Mon Feb 7 18:52:51 2011 -0800
gemspec: remove unnecessary statements
No need for these
commit 40871775044a88662b9593d86a631755ca516bab
Author: Eric Wong
Date: Mon Feb 7 18:51:50 2011 -0800
doc: rdoc cleanups and fixes
Don't need to document things that aren't ready, yet.
commit 53bac4f65d9430495c8043b239cc936012ea7a8d
Author: Eric Wong
Date: Sun Feb 6 06:19:09 2011 +0000
minimize &block usage for yield
No need to allocate a proc every time when we can just
yield much more efficiently.
commit 44eb53f5a5f1ea2e5aee93d0caf995f42b3179f7
Author: Eric Wong
Date: Sun Feb 6 01:42:31 2011 +0000
kill some unnecessary &block usage
We were needlessly allocating objects even when using yield.
commit 90a86c9822238f01e8d60c9303b9a0da64351c7f
Author: Eric Wong
Date: Sat Feb 5 10:44:52 2011 +0000
*epoll: refactor common loop code
acceptor thread pools could use some work, still
commit c9ca82c76f1eb0e06b0aa204a243d00f382579c5
Author: Eric Wong
Date: Sat Feb 5 10:11:56 2011 +0000
*epoll: consolidate re-run logic
There's a lot of code duplication here :<
commit d8e3edadd128a2ee5712b87a6b660295de2df6be
Author: Eric Wong
Date: Sat Feb 5 09:22:05 2011 +0000
writer_thread_pool: needless use of Array#map
Array#each will do..
commit fa7a282502c253ad3203f28bb10eede8b3a3cd3e
Author: Eric Wong
Date: Sat Feb 5 09:06:37 2011 +0000
less expensive QUIT processing
Avoid constantly nuking the method cache and raising
repeated exceptions while our master process is shutting
us down.
commit 723ca7b440b1cf161d999aedcfadba8498adaa7c
Author: Eric Wong
Date: Sat Feb 5 08:46:40 2011 +0000
http_server: kill a warning
Ugh, I need to think of a way to clean this up...
commit 7246d2f2d1601dbb5486ce7f9ddbebd1bb975b58
Author: Eric Wong
Date: Fri Feb 4 20:39:41 2011 -0800
bump required Unicorn dependency for Kgio
We want to use the singleton methods in Kgio to reduce
conditionals.
commit e00c2e8c53ad5b47baa5bc6a8765b7c3c92296b9
Author: Eric Wong
Date: Fri Feb 4 18:59:18 2011 -0800
bump wrongdoc development dependency
1.5 is nicer than older versions
commit 8e2e8adda8adbadee8ab31cde700b7e486b1154c
Author: Eric Wong
Date: Fri Feb 4 18:58:26 2011 -0800
rename XAcceptEpoll to XEpoll
It's too long especially since XEpollThreadPool is planned :>
commit 0f4f015737297ac5245d0be9ee83553770ade0a9
Author: Eric Wong
Date: Fri Feb 4 15:05:25 2011 -0800
test_isolate: use latest Unicorn
It supports IPv6 and pulls in a better Kgio. Since Unicorn
defaults to ":tcp_nopush => true", we need to flip it back
to false to be compatible with the types of apps Rainbows!
is targetted as.
commit f015a843fcfa120286628ec75829575ee2391380
Author: Eric Wong
Date: Fri Feb 4 17:48:34 2011 -0800
tests: replace several sed invocations with ed
ed can do in-place editing portably, unlike sed.
commit 82579a5f20531e69eb40e6a58a931b6c5f77d548
Author: Eric Wong
Date: Fri Feb 4 15:06:23 2011 -0800
reverse_proxy: small reorganization
Put all of our constants in one place for easy reference
commit d20bb75518669444ad65fffe4c6e5d2654436193
Author: Eric Wong
Date: Fri Feb 4 15:01:03 2011 -0800
reverse_proxy: properly read IPv6 addreses in upstreams
Yes it's fugly
commit ba9a22b6926db058199d44a626b923376c8a850f
Author: Eric Wong
Date: Fri Feb 4 22:38:31 2011 +0000
epoll: handle EINTR properly in Ruby-space
We can't work around it effectively in the C extension
itself. This requires the latest sleepy_penguin gem.
commit da93ad1c07ff9deb4d3a2e765b26f87ccf68aa23
Author: Eric Wong
Date: Fri Feb 4 05:41:14 2011 +0000
test_isolate: only load sleepy_penguin under Linux
It's Linux-only, after all
commit c9a7560bb684bbdadb641ebc7597303f38c37d4f
Author: Eric Wong
Date: Fri Feb 4 04:20:15 2011 +0000
t/bin/unused_listen: simplify this
Binding to a random port is much easier this way
commit 130d086666ccd825fcb13cf02fcf941b8fe661af
Author: Eric Wong
Date: Tue Feb 1 15:05:52 2011 -0800
preliminary reverse proxy Rack application
This can be a starting point for developing Cool.io or
EventMachine-based reverse proxy applications on Rainbows!
Eventually Rainbows! could replace nginx for Unicorn users!
Just don't consider this code production ready, yet, at all,
it doesn't handle any sort of failover and has no automated
tests, yet.
commit 9bf406655a84090426a62ab60677df529e408f17
Author: Eric Wong
Date: Mon Jan 31 14:21:18 2011 -0800
coolio/client: on_write_complete triggers read
This allows us to more aggressively handle pipelining
as well as trigger future Kgio autopush behavior.
commit 5cbe276ef1e797aef77e7401593f4a7827c37fe3
Author: Eric Wong
Date: Thu Jan 27 12:52:15 2011 -0800
test for client_max_body_size being zero
Some users never, ever accept uploads, so we should test
for it.
commit 7d623489dd51667e0a2eec9d44aec57cb4c5ba44
Author: Eric Wong
Date: Wed Jan 26 17:42:55 2011 +0000
epoll/client: avoid unnecessary Epoll#set calls
We should only attempt to modify the descriptor when we
block, and not for subsequent events.
commit bc8a71ea4fee6e4ed35dad245511508ac0b7bf4b
Author: Eric Wong
Date: Wed Jan 26 17:40:01 2011 +0000
GNUmakefile: only enable epoll-based models in Linux
epoll is Linux-only right now. kqueue probably isn't worth
supporting directly (and even direct epoll support is debatable
given the current GVL situation)
commit 667b05819b85165061c445fb2c75ef161a5de5b6
Author: Eric Wong
Date: Mon Jan 24 20:04:20 2011 -0800
initial XAcceptEpoll concurrency model
Edge-triggered epoll concurrency model with blocking accept() in
a (hopefully) native thread. This is recommended over Epoll for
Ruby 1.9 users as it can workaround accept()-scalability issues
on multicore machines.
commit 9f7f497dc21d904a1af20465318d85811daf0652
Author: Eric Wong
Date: Mon Jan 24 17:13:14 2011 -0800
epoll/client: thread-safety for write queuing
We're living on the EDGE and mixing epoll with threads :D
commit 04b8649b3750a0002094e90a62f7566059c8a4e9
Author: Eric Wong
Date: Mon Jan 24 17:00:51 2011 -0800
epoll: make Epoll.quit more reusable
We'll be using this more in the future
commit 85ccfbc75abc78f977583db6303e3fb270fd2ec9
Author: Eric Wong
Date: Mon Jan 24 13:20:23 2011 -0800
neverblock: fix app_call under 1.8.7
super doesn't seem to capture arguments inside a block
under 1.8.7 :<
commit 9e146021e17056976e61d824d228922bf81a4f24
Author: Eric Wong
Date: Mon Jan 24 11:47:43 2011 -0800
clear LISTENERS array on close
No reason to keep it around
commit 6f6a95b6e3b4f76278cd19b787c8487453dae4d4
Author: Eric Wong
Date: Fri Jan 21 22:56:29 2011 -0800
epoll/client: minor optimization
We know @wr_queue is empty since we just initialized it
and the first thing an HTTP client does is read.
commit 01fbc4a7f2fd5b751b9183d11aa74aadaffd145b
Author: Eric Wong
Date: Fri Jan 21 17:34:21 2011 -0800
ev_core: force input to be given to app_call
No need to setting an ivar for most requests
commit 9719da13b8aabeabbf2eebc37f127e88550c3121
Author: Eric Wong
Date: Fri Jan 21 17:27:25 2011 -0800
epoll/client: factor out on_close method
We'll override it, maybe...
commit 97d8f9b49e3f4637c7c573a971cdbc54b5698dce
Author: Eric Wong
Date: Fri Jan 21 17:10:00 2011 -0800
epoll/client: remove unused client
We don't do Level-Triggered I/O around here
commit cc08315b7821cf7178d233451fd6bbe84eb90dcc
Author: Eric Wong
Date: Fri Jan 21 15:34:15 2011 -0800
extract common tasks to pkg.mk to simplify our makefile
commit fb24ca8f30edbf5086dbe288d4dd4fa213684236
Author: Eric Wong
Date: Fri Jan 21 15:11:16 2011 -0800
epoll: reduce expiration calls and Time objects
We'll lower our precision for keepalive timeouts a little
and and reduce our Time object allocation rate.
commit 43d6ec33c3dd7497e27127adfffeb94722fd4b8d
Author: Eric Wong
Date: Fri Jan 21 15:08:07 2011 -0800
ev_core: garbage reduction
We don't need to allocate new string objects for short-lived
strings. We'll pay the price of a constant lookup instead.
commit 247ce76b4aabfa42157b9cbf9ebae824819cfff6
Author: Eric Wong
Date: Fri Jan 21 13:21:07 2011 -0800
epoll: use newer sleepy_penguin
We can eliminate the State module to simplify our code
since 1.3.x keeps better track of things.
commit b33ab73a984660ab2d741b32725ab21d7860bef3
Author: Eric Wong
Date: Fri Jan 21 13:50:12 2011 -0800
max_body: disable for epoll
It's almost just like Coolio
commit 6750d3b50a9d4e66cbdb3b3ce295a1f16a54c678
Author: Eric Wong
Date: Fri Jan 21 12:35:05 2011 -0800
doc: git.bogomips.org => bogomips.org
bogomips.org is slimming down and losing URL weight :)
commit 805f0eba4f63d0c9020708e1122f64776933c06f
Author: Eric Wong
Date: Fri Jan 21 00:16:57 2011 -0800
epoll: use sleepy_penguin default size for epoll_wait
It was based off the nginx window of 64 events. Not that
any servers are really that busy...
commit 1b024d48169442a5498d490699ea1eee41563587
Author: Eric Wong
Date: Thu Jan 20 15:27:46 2011 -0800
epoll: close epoll descriptor on graceful shutdown
This allows us to gracefully shutdown more quickly.
commit ea4a01df8b1fa29e2088816f4734bb0073eb9380
Author: Eric Wong
Date: Thu Jan 20 22:15:12 2011 +0000
remove support for Sunshowers
The WebSocket protocol is still undergoing changes and unused.
We won't waste time supporting it until it's finalized and
doesn't break HTTP.
commit 7ec2e407206036a993aadbcd39b13a2d86b7a288
Author: Eric Wong
Date: Thu Jan 20 13:26:59 2011 -0800
epoll: ignore ECONNRESET errors
Nothing we can do about that from clients. Perhaps kgio
should just return nil for those...
commit 7ad4e300c29b06fd53aca9f9bad18f97f9a34633
Author: Eric Wong
Date: Thu Jan 20 20:32:24 2011 +0000
ev_core: simplify setup steps
ev_core is always loaded after forking, so eliminate the
need for extra setup steps for each concurrency model that
uses it
commit 72cbecfe01b8c4b2c7bb7e362401805374036dc2
Author: Eric Wong
Date: Thu Jan 20 02:28:12 2011 -0800
merge rack_input into process_client
It turns out to be less-used than previous anticipated,
so there's no point in having yet another module.
commit ed33b9c0d060806b41e952a50e0ab65a0f5fe21a
Author: Eric Wong
Date: Thu Jan 20 02:20:19 2011 -0800
ev_core: localize 413 error constant
It's the only place we ever use it
commit e0ad4353f0c0f8ae27301df3e694384f687a4264
Author: Eric Wong
Date: Thu Jan 20 02:16:04 2011 -0800
remove unused 416 error constants/exceptions
We handle that locally in rainbows/response now
commit fa0b3774dd9cd73331e83b3517c37964ab265074
Author: Eric Wong
Date: Thu Jan 20 02:13:38 2011 -0800
dev_fd_response: garbage reduction
Constant strings mean the runtime won't have to allocate new
objects all the time since GC is currently the biggest
performance problem of Ruby 1.9.x in my experience.
commit fc355db99bdbe72644e4691a7a107b6a29c77be6
Author: Eric Wong