From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.3.2 (2011-06-06) on dcvr.yhbt.net X-Spam-Level: X-Spam-ASN: AS16276 91.121.0.0/16 X-Spam-Status: No, score=0.0 required=3.0 tests=AWL,BAYES_20,KHOP_DYNAMIC, RCVD_IN_XBL shortcircuit=no autolearn=no version=3.3.2 X-Original-To: rainbows-public@bogomips.org Received: from 80x24.org (ns359843.ip-91-121-159.eu [91.121.159.196]) by dcvr.yhbt.net (Postfix) with ESMTP id 78B436362C1 for ; Sat, 21 Nov 2015 08:52:40 +0000 (UTC) From: Eric Wong 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> In-Reply-To: <20151121085232.23086-1-e@80x24.org> References: <20151121085232.23086-1-e@80x24.org> List-Id: 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