about summary refs log tree commit homepage
AgeCommit message (Collapse)AuthorFilesLines
2019-01-05Rainbows! 5.2.0 HEAD v5.2.0 masterEric Wong1-1/+1
Mainly fixes some mismatched indentation warnings with Ruby 2.6+ Some doc updates, too. 4 changes since v5.1.1 (2017-04-02) quiet mismatched indentation warnings t/hijack.ru: avoid shadow warning t/test_isolate: various version updates various documentation updates
2019-01-05various documentation updatesEric Wong4-27/+34
Point to HTTPS to discourage sniffable traffic. olddoc and pandoc are only necessary for packaging gems/updating-the-website, not development. Update some references to other projects.
2019-01-02t/test_isolate: various version updatesEric Wong1-5/+5
2019-01-02t/hijack.ru: avoid shadow warningEric Wong1-1/+1
2019-01-02quiet mismatched indentation warningsEric Wong26-93/+93
Ruby trunk started warning about more mismatched indentations starting around r62836.
2017-04-02Rainbows! 5.1.1 v5.1.1Eric Wong1-1/+1
This release fixes an incompatibility introduced with the release of unicorn 5.3.0, yesterday :x. Thanks to Claudio Poli for reporting the bug (and reminding me this project exists). Two changes since 5.1.0 (2017-01-12): workaround for unicorn 5.3.0 tests: update isolate deps for unicorn and raindrops
2017-04-02tests: update isolate deps for unicorn and raindropsEric Wong1-2/+2
Newer versions were just released, so we should test with them to prevent mishaps like <https://bogomips.org/rainbows-public/9267B33C-D13C-47E1-8892-4777B96DDCD1@gmail.com/> from surfacing :x
2017-04-02workaround for unicorn 5.3.0Eric Wong1-0/+9
unicorn 5.3.0 introduced a new Unicorn::TCPSrv and Unicorn::TCPClient constants to distinguish TCP sockets from Unix ones from its check_client_connection feature. These classes screw up our direct inheritance of Kgio::Socket from the Rainbows::Client class. Since we do not support check_client_connection, we do not need these new classes in unicorn. Removing Unicorn::TCPSrv and aliasing it as Kgio::TCPServer is sufficient for now. In the future, removing all kgio dependencies from Rainbows! will be prioritized. Thanks to Claudio Poli for reporting the bug: https://bogomips.org/rainbows-public/9267B33C-D13C-47E1-8892-4777B96DDCD1@gmail.com/
2017-01-12Rainbows! 5.1.0 - rack 2.x compat, EM fixes v5.1.0Eric Wong1-1/+1
This release now supports rack 2.x along with existing rack 1.x applications. Additionally, we now wait for deferred actions for EventMachine users on graceful shutdown. Thanks to Julia López Aladro and <alex0375@gmail.com> for bringing up these changes in the open-to-all rainbows-public@bogomips.org mailing list: https://bogomips.org/rainbows-public/CAPhSs6OAU+motd+MF=WOSek9==StLjEQJsNwAO3-aRWCZzhs=g@mail.gmail.com/T/ https://bogomips.org/rainbows-public/CAKwvcL-VH3we4qA1pkNAstTmWvqNA=Rir2N_YiWztV_qbaLQvA@mail.gmail.com/T/ There's also a few documentation and test fixes. 9 changes since Rainbows! 5.0.0: doc: bump olddoc to ~> 1.2 for extra NNTP URLs doc: move homepage and update URLs to HTTPS doc: Static_Files: remove Future section tests: use correct file:// URL for random_blob path support rack 2.x Revert "t/t0044-autopush.sh: remove test" tests: re-enable EventMachine tests, again eventmachine: wait for deferred actions to finish doc: additional disclaimers
2017-01-12doc: additional disclaimersEric Wong2-0/+14
Honestly, these disclaimers should've been there all along; and should apply to all servers handling multiple clients within a single process.
2017-01-09eventmachine: wait for deferred actions to finish em-deferredEric Wong4-8/+34
Since EventMachine 1.0.0 in 2012, the EM.defers_finish? API exists to check for the existence of deferred actions. Support it if it exists in the running version of EM and update the note in our SIGNALS document. Thanks to <alex0375@gmail.com> on the mailing list for bringing this up: https://bogomips.org/rainbows-public/CAKwvcL-VH3we4qA1pkNAstTmWvqNA=Rir2N_YiWztV_qbaLQvA@mail.gmail.com/
2017-01-09tests: re-enable EventMachine tests, againEric Wong1-1/+1
Based on activity in <git://github.com/eventmachine/eventmachine>, EventMachine seems to be maintained, again, so resume testing our integration tests.
2016-12-24Revert "t/t0044-autopush.sh: remove test"Eric Wong2-1/+122
Stuck between a rock and a hard place.. This reverts commit 5c911ab2470a2ca9c140b3a2e20ae810bf758590 and restores autopush support when using kgio 2.11.0+ Explanations on the kgio mailing list below: https://bogomips.org/kgio-public/20161216-kgio-2.11.0-released@fail/ https://bogomips.org/kgio-public/20161216000110.GA7366@untitled/T/#u We can drop kgio when we drop Ruby <= 2.2 support in a few years.
2016-11-17support rack 2.xEric Wong3-11/+13
This requires updating to unicorn 5.1+ to relax the rack requirement. Unlike unicorn, Rainbows! is considerably larger and cannot function without rack installed. There were no code changes required to pass the test suite; but some other optional gems needed to be updated for testing. Support for async_sinatra is no longer tested as that is tied to rack 1.x; but the remaining EventMachine-dependent parts remain tested. Thanks to Julia López Aladro for reminding us on the mailing list: https://bogomips.org/rainbows-public/CAPhSs6OAU+motd+MF=WOSek9==StLjEQJsNwAO3-aRWCZzhs=g@mail.gmail.com/
2016-11-17tests: use correct file:// URL for random_blob pathEric Wong1-8/+9
Apparently RFC1738 designates hostname support for file:// and curl historically had this wrong, but my current curl version (7.38.0-4+deb8u5 from Debian 8) is stricter. Anyways, this seems to handle $PWD with spaces and possibly other strange characters, so URL encoding here doesn't seem to be strictly necessary.
2016-10-31doc: Static_Files: remove Future sectionEric Wong1-8/+0
sendfile(2) is fewer syscalls and FDs than splice(2), and an open-file-cache is unlikely to be worth the complexity.
2016-10-31doc: move homepage and update URLs to HTTPSEric Wong14-23/+22
Let's Encrypt is working well for us and having fewer domains reduces subjectAltName bloat to speed up connection establishment HTTP will remain working indefinitely since some old systems do not have modern TLS stacks.
2016-01-09doc: bump olddoc to ~> 1.2 for extra NNTP URLsEric Wong2-1/+4
I forgot to add any NNTP servers to our .olddoc.yml :x nntp://news.public-inbox.org/inbox.comp.lang.ruby.rainbows nntp://news.gmane.org/gmane.comp.lang.ruby.rainbows.general Not advertising additional HTTP-based URLs just yet. They could contain images/frames/JS/CSS and add unnecessary clutter to the footer. NNTP puts the client in control of UI.
2015-11-25Rainbows! 5.0.0 - maintained as long as anybody uses it! v5.0.0Eric Wong2-3/+4
This release syncs with unicorn 5 and drops some old compatibility cruft from old releases. Performance should be roughly unchanged for Ruby 2.2 users while older Rubies (1.9.3 - 2.1) will see minor, probably unnoticeable performance regressions. Compatibility: * The horrible, proprietary (:P) "Status:" response header is finally gone, saving at least 16 precious bytes in every HTTP response. This should make it easier to write custom HTTP clients which are compatible across all HTTP servers. It will hopefully make migrating between different Rack servers easier for new projects. * Ruby 1.8 support removed. Ruby 1.9.3 is currently the earliest supported version. However, expect minor, likely-unnoticeable performance regressions if you use Ruby 2.1 or earlier. Going forward, Rainbows! will favor the latest version (currently 2.2) of the mainline Ruby implementation, potentially sacrificing performance on older Rubies. New features: * sd_listen_fds(3) emulation added for systemd compatibility. You may now stop using PID files and other process monitoring software when using systemd. * Newly-set TCP socket options are now applied to inherited sockets. * Dynamic changes in the application to Rack::Utils::HTTP_STATUS hash is now supported; allowing users to set custom status lines in Rack to be reflected in unicorn. This feature causes a minor performance regression, but is made up for Ruby 2.2 users with other optimizations. * The monotonic clock is used under Ruby 2.1+, making the timeout feature immune to system clock changes. As Rainbows! may be used anonymously without registration, the project is committed to supporting anonymous and pseudonymous help requests, contributions and feedback via plain-text mail to: rainbows-public@bogomips.org The mail submission port (587) is open to those behind firewalls and allows access via Tor and anonymous remailers. Archives are accessible via: * http://bogomips.org/rainbows-public/ * nntp://news.public-inbox.org/inbox.comp.lang.ruby.rainbows * nntp://news.gmane.org/gmane.comp.lang.ruby.rainbows.general and mirrored to various other places, so you do not even need to use a valid address when posting. 18 changes since Rainbows! 4.7.0 README: remove Zbatery references http_parser: handle keepalive_requests internally kill the moronic Status: header reflect changes in Rack::Utils::HTTP_STATUS_CODES reduce constant lookup dependencies http_parser: workaround hijack changes in unicorn 5 http_server: add master_pid attribute stream_response_epoll: remove hijack_prepare call bump to unicorn 5.0.1, use monotonic clock add .gitattributes for Ruby method detection response: avoid garbage string entirely tiny bytecode reductions for cold paths Ruby 1.9.3+-only cleanups revactor: remove fcntl dependency response: simplify regexp t0105: fix test reliability fix Rainbows.now definition for old Rubies fix broken constant lookups in unmaintained bits
2015-11-24fix broken constant lookups in unmaintained bitsEric Wong4-6/+6
In case Revactor starts being maintained again... (heck, it was probably the reason I started Rainbows! in the first place...) Our ReverseProxy stuff was never complete nor marketed; and probably not worth keeping around at all.
2015-11-24fix Rainbows.now definition for old RubiesEric Wong1-1/+1
Oops, blind substitution :x
2015-11-24t0105: fix test reliabilityEric Wong1-2/+10
It's possible curl will be sending to us and detect an error in the send before it has a chance to read our (premature) 413 response. Of course, we cannot afford to read an entire request when returning a premature 413 response because we risk wasting bandwidth that way.
2015-11-21response: simplify regexpEric Wong1-1/+1
Redundant \z statements are ugly and wastes 4 bytes on x86-64 according to ObjectSpace.memsize_of
2015-11-21revactor: remove fcntl dependencyEric Wong2-3/+1
In the unlikely case somebody runs revactor, they won't need to load the extra fcntl.so library into their process anymore. In retrospect, we could've alway used IO#close_on_exec= since it appeared in 1.9.1 and (IIRC) revactor always required 1.9.1+
2015-11-21Ruby 1.9.3+-only cleanupsEric Wong10-32/+23
unicorn 5 will only support Ruby 1.9.3 and later, so remove some checks for Hash#compare_by_identity and IO.copy_stream which we know exist in Ruby 1.9. Favor &:sym proc dispatch to avoid unnecessary captures and bytecode size increases, too. Finally, ensure we fail fast by converting some literal hashes to use non-arrow syntax for symbolic keys.
2015-11-21tiny bytecode reductions for cold pathsEric Wong3-5/+5
Less code in cold paths can improve speed for hot paths. Single-byte strings for String#split is optimized in mainline Ruby, so it's not actually a performance loss for sendfile_range in response.rb Regexps are at least 400 bytes each, so prefer non-Regexps if possible, especially for cold sites where performance does not matter.
2015-11-21response: avoid garbage string entirelyEric Wong1-2/+2
Even with frozen string literals enabled in Ruby 2.3.0dev, dstrings still create garbage as the optimizer is not yet smart enough to optimize it despite the limited choice of internals being known. Maybe in the future Ruby will be smart enough, but not yet...
2015-11-21add .gitattributes for Ruby method detectionEric Wong1-0/+5
The "diff" function detection for C does not map well to Ruby files, take advantage of gitattributes(5) to improve method name detection in generated patches as well as making "git diff -W" output more useful.
2015-11-21bump to unicorn 5.0.1, use monotonic clockEric Wong15-26/+39
The timeout (mis)feature in unicorn uses the monotonic clock if available. We must follow suit to avoid having our timeout functionality completely broken.
2015-11-21stream_response_epoll: remove hijack_prepare callEric Wong1-1/+1
unicorn 5.0.0 assumes Rack hijack is always available if the application tries to use it, so the wrapper method is removed.
2015-11-21http_server: add master_pid attributeEric Wong1-0/+1
We'll need this for unicorn 5, as they dropped this publically accessible attribute while retaining the ivar. Eventually we may not have to check this attribute at all, instead detecting parent death via worker pipe.
2015-11-18http_parser: workaround hijack changes in unicorn 5Eric Wong7-19/+18
unicorn lost the hijack_setup method in version 5, so we must recreate it ourselves.
2015-11-18reduce constant lookup dependenciesEric Wong17-134/+78
Unicorn 5 removes some constants we were using, and constant lookups + inline caching are waste of time anyways on newer Rubies with the opt_str_freeze bytecode instruction. This may reduce performance for folks on older Rubies (probably not noticeable); but improves performance for folks on newer Rubies.
2015-11-18reflect changes in Rack::Utils::HTTP_STATUS_CODESEric Wong2-5/+6
Applications may want to alter the message associated with HTTP status codes in Rack::Utils::HTTP_STATUS_CODES. Avoid memoizing status lines ahead-of-time Note: this introduces a minor performance regression, but ought to be unnoticeable unless you're running "Hello world"-type apps.
2015-11-18kill the moronic Status: headerEric Wong2-3/+2
Whatever compatibility reasons which existed in 2009 likely do not exist now. Other servers (e.g. thin, puma) seem to work alright without it, so there's no reason to waste precious bytes.
2015-11-18http_parser: handle keepalive_requests internallyEric Wong2-2/+17
unicorn 5 dropped support for this, essentially allowing unlimited persistent connections if we used the parser as-is. Since most of our concurrency models cannot handle infinite persistent connections without being vulnerable to DoS, we must support keepalive_requests like nginx does.
2015-10-19README: remove Zbatery referencesEric Wong1-7/+2
yahns runs as a single process just fine.
2015-10-19Rainbows! 4.7.0 - updates for ruby 2.3.0dev v4.7.0Eric Wong1-1/+1
This release includes fixes for upcoming changes in Ruby 2.3.0 (due December 2015). Use of Rainbows! for new projects is not recommended, try other servers instead. * update dependencies for Ruby 2.2.0dev * switch docs + website to olddoc * gemspec: fix bad reference to rdoc_options * README: reference yahns * build: fix quoting issue with double parens * response: avoid unnecessary args to IO.copy_stream * t/close-has-env.ru: ensure close is idempotent * sync_close: This fix breakage from Ruby-trunk r50118 * t/t0044-autopush.sh: remove test * t/test_isolate.rb: updates for various gem versions * response: convert source arg to path before IO.copy_stream * speed up QUIT for users of the unicorn worker_loop * gemspec: use SPDX-compatible license for GPL-2.0+
2015-10-19gemspec: use SPDX-compatible license for GPL-2.0+Eric Wong1-3/+7
Current versions of RubyGems still complains about the '+' is valid according to: http://spdx.org/licenses
2015-10-15speed up QUIT for users of the unicorn worker_loopEric Wong1-0/+3
WriterThreadPool, WriterThreadSpawn, Base, and potentially other rarely-used concurrency options experienced slow shutdowns due to the destruction of a listener socket failing to wake up a thread in IO.select. Send ourselves a signal to interrupt the IO.select call in the main thread to force the wakeup.
2015-10-14response: convert source arg to path before IO.copy_streamEric Wong2-8/+5
This will allow us use the sendfile syscall under Linux on Ruby which favor #read/#readpartial methods for non-IO objects. This also allows us to revert changes made in commit db790ff3531acdfa23ab290998bba29360a6782b ("sync_close: This fix breakage from Ruby-trunk r50118")
2015-09-14t/test_isolate.rb: updates for various gem versionsEric Wong1-8/+8
2015-09-14t/t0044-autopush.sh: remove testEric Wong1-121/+0
kgio no longer does anything with autopush, so this test is broken. Autopush was overkill and badly done (MSG_MORE is better on Linux, FreeBSD should copy it :P).
2015-09-14sync_close: This fix breakage from Ruby-trunk r50118Eric Wong1-2/+10
By providing read+readpartial methods IO.copy_stream behaves slightly differently when operating on non-IO-subclassed objects nowadays. Ref: > * io.c (copy_stream_body): use the arguments without conversion if > having read, readpartial, and write methods, than conversion by > to_path method. [ruby-core:68676] [Bug #11015]
2015-09-14t/close-has-env.ru: ensure close is idempotentEric Wong1-0/+1
Ruby 2.3.0 will have idempotent IO#close, so closing an IO twice will be idempotent and not raise an IOError exception. Ensure we do not rely on the IOError exception to catch our own errors.
2015-09-14response: avoid unnecessary args to IO.copy_streamEric Wong1-1/+1
Not all responses are seekable, so do not attempt to pass seek arguments to them since Ruby may attempt to seek (and fail!).
2015-09-14build: fix quoting issue with double parensEric Wong1-1/+1
Apparently GNU make parses that strangely and mangles it for the shell...
2015-02-12README: reference yahnsEric Wong1-0/+4
Because nobody has time to read about all the options Rainbows! provides. yahns is basically XEpollThreadPool, with minor improvements which weren't easily supportable with other concurrency options.
2015-01-13gemspec: fix bad reference to rdoc_optionsEric Wong1-1/+0
olddoc does not need or use this
2015-01-10switch docs + website to olddocEric Wong17-168/+66
wrongdoc was difficult to maintain because of the tidy-ffi dependency and the HTML5 changes in Darkfish could not be handled well by Tidy. olddoc is superior as it generates leaner HTML which loads faster, requires less scrolling and less processing power to render. Aesthetic comparisons are subjective of course but completely unimportant compared to speed and accessibility. The presence of images and CSS on the old (Darkfish-based) site probably set unreasonable expectations as to my ability and willingness to view such things. No more, the new website is entirely simple HTML which renders well with even the wimpiest browser (hell, olddoc even tries to generate readable raw HTML).