From: Eric Wong <e@80x24.org>
To: rainbows-public@bogomips.org
Subject: [PATCH 2/5] Ruby 1.9.3+-only cleanups
Date: Sat, 21 Nov 2015 08:52:29 +0000 [thread overview]
Message-ID: <20151121085232.23086-3-e@80x24.org> (raw)
In-Reply-To: <20151121085232.23086-1-e@80x24.org>
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.
---
bin/rainbows | 6 +++---
lib/rainbows.rb | 5 ++---
lib/rainbows/configurator.rb | 16 ++++++++--------
lib/rainbows/coolio.rb | 9 ++-------
lib/rainbows/coolio/heartbeat.rb | 2 +-
lib/rainbows/epoll/client.rb | 5 ++---
lib/rainbows/fiber/base.rb | 2 +-
lib/rainbows/writer_thread_pool.rb | 4 ++--
lib/rainbows/xepoll_thread_pool/client.rb | 3 +--
lib/rainbows/xepoll_thread_spawn/client.rb | 3 +--
10 files changed, 23 insertions(+), 32 deletions(-)
diff --git a/bin/rainbows b/bin/rainbows
index f5ddaa7..c659afa 100755
--- a/bin/rainbows
+++ b/bin/rainbows
@@ -117,9 +117,9 @@
if $DEBUG
require 'pp'
pp({
- :unicorn_options => options,
- :app => app,
- :daemonize => rackup_opts[:daemonize],
+ unicorn_options: options,
+ app: app,
+ daemonize: rackup_opts[:daemonize],
})
end
diff --git a/lib/rainbows.rb b/lib/rainbows.rb
index f23b387..6e7e4f2 100644
--- a/lib/rainbows.rb
+++ b/lib/rainbows.rb
@@ -11,8 +11,7 @@ module Rainbows
# map of numeric file descriptors to IO objects to avoid using IO.new
# and potentially causing race conditions when using /dev/fd/
- FD_MAP = {}
- FD_MAP.compare_by_identity if FD_MAP.respond_to?(:compare_by_identity)
+ FD_MAP = {}.compare_by_identity
require 'rainbows/const'
require 'rainbows/http_parser'
@@ -92,7 +91,7 @@ def self.quit!
tmp = @readers.dup
@readers.clear
tmp.each { |s| s.close rescue nil }.clear
- @at_quit.each { |task| task.call }
+ @at_quit.each(&:call)
# XXX hack to break out of IO.select in worker_loop for some models
Process.kill(:QUIT, $$)
diff --git a/lib/rainbows/configurator.rb b/lib/rainbows/configurator.rb
index 92dacd6..73820a1 100644
--- a/lib/rainbows/configurator.rb
+++ b/lib/rainbows/configurator.rb
@@ -21,14 +21,14 @@
# stdout_path "/path/to/output.log"
module Rainbows::Configurator
Unicorn::Configurator::DEFAULTS.merge!({
- :use => Rainbows::Base,
- :worker_connections => 50,
- :keepalive_timeout => 5,
- :keepalive_requests => 100,
- :client_max_body_size => 1024 * 1024,
- :client_header_buffer_size => 1024,
- :client_max_header_size => 112 * 1024,
- :copy_stream => IO.respond_to?(:copy_stream) ? IO : false,
+ use: Rainbows::Base,
+ worker_connections: 50,
+ keepalive_timeout: 5,
+ keepalive_requests: 100,
+ client_max_body_size: 1024 * 1024,
+ client_header_buffer_size: 1024,
+ client_max_header_size: 112 * 1024,
+ copy_stream: IO,
})
# Configures \Rainbows! with a given concurrency model to +use+ and
diff --git a/lib/rainbows/coolio.rb b/lib/rainbows/coolio.rb
index a993060..2aba3ea 100644
--- a/lib/rainbows/coolio.rb
+++ b/lib/rainbows/coolio.rb
@@ -27,15 +27,10 @@
module Rainbows::Coolio
# :stopdoc:
# keep-alive timeout scoreboard
- KATO = {}
+ KATO = {}.compare_by_identity
# all connected clients
- CONN = {}
-
- if {}.respond_to?(:compare_by_identity)
- CONN.compare_by_identity
- KATO.compare_by_identity
- end
+ CONN = {}.compare_by_identity
autoload :Client, 'rainbows/coolio/client'
autoload :Master, 'rainbows/coolio/master'
diff --git a/lib/rainbows/coolio/heartbeat.rb b/lib/rainbows/coolio/heartbeat.rb
index fcfbb0f..adea248 100644
--- a/lib/rainbows/coolio/heartbeat.rb
+++ b/lib/rainbows/coolio/heartbeat.rb
@@ -9,7 +9,7 @@ class Rainbows::Coolio::Heartbeat < Coolio::TimerWatcher
KATO = Rainbows::Coolio::KATO
CONN = Rainbows::Coolio::CONN
Rainbows.config!(self, :keepalive_timeout)
- Rainbows.at_quit { KATO.each_key { |client| client.timeout? }.clear }
+ Rainbows.at_quit { KATO.each_key(&:timeout?).clear }
def on_timer
if (ot = KEEPALIVE_TIMEOUT) >= 0
diff --git a/lib/rainbows/epoll/client.rb b/lib/rainbows/epoll/client.rb
index fe04258..85e504c 100644
--- a/lib/rainbows/epoll/client.rb
+++ b/lib/rainbows/epoll/client.rb
@@ -9,9 +9,8 @@ module Rainbows::Epoll::Client
IN = SleepyPenguin::Epoll::IN | SleepyPenguin::Epoll::ONESHOT
OUT = SleepyPenguin::Epoll::OUT | SleepyPenguin::Epoll::ONESHOT
EPINOUT = IN | OUT
- KATO = {}
- KATO.compare_by_identity if KATO.respond_to?(:compare_by_identity)
- Rainbows.at_quit { KATO.each_key { |k| k.timeout! }.clear }
+ KATO = {}.compare_by_identity
+ Rainbows.at_quit { KATO.each_key(&:timeout!).clear }
Rainbows.config!(self, :keepalive_timeout)
EP = Rainbows::EP
@@last_expire = Rainbows.now
diff --git a/lib/rainbows/fiber/base.rb b/lib/rainbows/fiber/base.rb
index 7c4fb59..a3c098a 100644
--- a/lib/rainbows/fiber/base.rb
+++ b/lib/rainbows/fiber/base.rb
@@ -50,7 +50,7 @@ def schedule_sleepers
false
end
}
- fibs.each { |fib| fib.resume }
+ fibs.each(&:resume)
max_sleep = 1.0 # wake up semi-frequently to prevent SIGKILL from master
if max
diff --git a/lib/rainbows/writer_thread_pool.rb b/lib/rainbows/writer_thread_pool.rb
index b5688e0..657d076 100644
--- a/lib/rainbows/writer_thread_pool.rb
+++ b/lib/rainbows/writer_thread_pool.rb
@@ -50,9 +50,9 @@ def worker_loop(worker) # :nodoc:
end
end
- @@q = qp.map { |q| q.queue }
+ @@q = qp.map(&:queue)
super(worker) # accept loop from Unicorn
- qp.each { |q| q.quit! }
+ qp.each(&:quit!)
end
# :startdoc:
end
diff --git a/lib/rainbows/xepoll_thread_pool/client.rb b/lib/rainbows/xepoll_thread_pool/client.rb
index 760bbde..ca62727 100644
--- a/lib/rainbows/xepoll_thread_pool/client.rb
+++ b/lib/rainbows/xepoll_thread_pool/client.rb
@@ -38,8 +38,7 @@ def self.app_run(queue)
ep = SleepyPenguin::Epoll
EP = ep.new
IN = ep::IN | ep::ONESHOT
- KATO = {}
- KATO.compare_by_identity if KATO.respond_to?(:compare_by_identity)
+ KATO = {}.compare_by_identity
LOCK = Mutex.new
Rainbows.at_quit do
clients = nil
diff --git a/lib/rainbows/xepoll_thread_spawn/client.rb b/lib/rainbows/xepoll_thread_spawn/client.rb
index 67c5976..218db3e 100644
--- a/lib/rainbows/xepoll_thread_spawn/client.rb
+++ b/lib/rainbows/xepoll_thread_spawn/client.rb
@@ -27,8 +27,7 @@ def self.included(klass) # included in Rainbows::Client
ep = SleepyPenguin::Epoll
EP = ep.new
IN = ep::IN | ep::ONESHOT
- KATO = {}
- KATO.compare_by_identity if KATO.respond_to?(:compare_by_identity)
+ KATO = {}.compare_by_identity
LOCK = Mutex.new
Rainbows.at_quit do
clients = nil
--
EW
next prev parent reply other threads:[~2015-11-21 8:52 UTC|newest]
Thread overview: 6+ messages / expand[flat|nested] mbox.gz Atom feed top
2015-11-21 8:52 [PATCH 0/5] a few more odds and ends before 5.0 Eric Wong
2015-11-21 8:52 ` [PATCH 1/5] tiny bytecode reductions for cold paths Eric Wong
2015-11-21 8:52 ` Eric Wong [this message]
2015-11-21 8:52 ` [PATCH 3/5] response: avoid garbage string entirely Eric Wong
2015-11-21 8:52 ` [PATCH 4/5] revactor: remove fcntl dependency Eric Wong
2015-11-21 8:52 ` [PATCH 5/5] response: simplify regexp Eric Wong
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
List information: https://yhbt.net/rainbows/
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20151121085232.23086-3-e@80x24.org \
--to=e@80x24.org \
--cc=rainbows-public@bogomips.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
Code repositories for project(s) associated with this public inbox
https://yhbt.net/rainbows.git/
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).