Rainbows! Rack HTTP server user/dev discussion
 help / Atom feed
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
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


  parent reply index

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 publically 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://bogomips.org/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

Rainbows! Rack HTTP server user/dev discussion

Archives are clonable:
	git clone --mirror https://bogomips.org/rainbows-public
	git clone --mirror http://ou63pmih66umazou.onion/rainbows-public

Newsgroups are available over NNTP:
	nntp://news.public-inbox.org/inbox.comp.lang.ruby.rainbows
	nntp://ou63pmih66umazou.onion/inbox.comp.lang.ruby.rainbows

 note: .onion URLs require Tor: https://www.torproject.org/
       or Tor2web: https://www.tor2web.org/

AGPL code for this site: git clone https://public-inbox.org/ public-inbox