diff --git a/History.md b/History.md index 8bb312edf8..fbb1ffe73b 100644 --- a/History.md +++ b/History.md @@ -34,6 +34,7 @@ * Log binding on http:// for TCP bindings to make it clickable * Bugfixes + * Fix JSON loading issues on phased-restarts (#2269) * Improve shutdown reliability (#2312, #2338) * Close client http connections made to an ssl server with TLSv1.3 (#2116) * Do not set user_config to quiet by default to allow for file config (#2074) diff --git a/lib/puma.rb b/lib/puma.rb index bd667116f1..86f5d97a27 100644 --- a/lib/puma.rb +++ b/lib/puma.rb @@ -20,6 +20,7 @@ def self.stats_object=(val) end def self.stats + require 'json' @get_stats.stats.to_json end diff --git a/lib/puma/app/status.rb b/lib/puma/app/status.rb index efffc43cff..0fdef3824a 100644 --- a/lib/puma/app/status.rb +++ b/lib/puma/app/status.rb @@ -1,7 +1,5 @@ # frozen_string_literal: true -require 'json' - module Puma module App # Check out {#call}'s source code to see what actions this web application @@ -19,6 +17,10 @@ def call(env) return rack_response(403, 'Invalid auth token', 'text/plain') end + if env['PATH_INFO'] =~ /\/(gc-stats|stats|thread-backtraces)$/ + require 'json' + end + case env['PATH_INFO'] when /\/stop$/ @cli.stop diff --git a/lib/puma/cluster.rb b/lib/puma/cluster.rb index 4ffe0cc41c..7e9dd95b20 100644 --- a/lib/puma/cluster.rb +++ b/lib/puma/cluster.rb @@ -5,7 +5,6 @@ require 'puma/plugin' require 'time' -require 'json' module Puma # This class is instantiated by the `Puma::Launcher` and used @@ -95,6 +94,7 @@ def term? def ping!(status) @last_checkin = Time.now + require 'json' @last_status = JSON.parse(status, symbolize_names: true) end @@ -333,6 +333,7 @@ def worker(index, master) while true sleep Const::WORKER_CHECK_INTERVAL begin + require 'json' io << "p#{Process.pid}#{server.stats.to_json}\n" rescue IOError Thread.current.purge_interrupt_queue if Thread.current.respond_to? :purge_interrupt_queue