Skip to content

Commit

Permalink
Set shutdown error response as a default
Browse files Browse the repository at this point in the history
  • Loading branch information
zanker-stripe committed Mar 16, 2020
1 parent bb0939e commit 06979d7
Show file tree
Hide file tree
Showing 4 changed files with 8 additions and 12 deletions.
5 changes: 4 additions & 1 deletion lib/puma/configuration.rb
Expand Up @@ -13,6 +13,8 @@ module ConfigDefault
DefaultTCPPort = 9292
DefaultWorkerTimeout = 60
DefaultWorkerShutdownTimeout = 30

DefaultThreadShutdownResponse = [503, {}, ["Request was internally terminated early\n"]].freeze
end

# A class used for storing "leveled" configuration options.
Expand Down Expand Up @@ -186,7 +188,8 @@ def puma_default_options
:logger => STDOUT,
:persistent_timeout => Const::PERSISTENT_TIMEOUT,
:first_data_timeout => Const::FIRST_DATA_TIMEOUT,
:raise_exception_on_sigterm => true
:raise_exception_on_sigterm => true,
:force_shutdown_error_response => DefaultThreadShutdownResponse,
}
end

Expand Down
4 changes: 2 additions & 2 deletions lib/puma/dsl.rb
Expand Up @@ -545,8 +545,8 @@ def lowlevel_error_handler(obj=nil, &block)
# @example
# force_shutdown_error_response(500, {"Content-Type" => "application/json"}, [JSON.generate({message: "Server shutdown."})])
def force_shutdown_error_response(status, headers, response)
raise "Headers must be a hash" unless headers.is_a?(Hash)
raise "Response must be enumerable" unless response.is_a?(Enumerable)
raise "Not a Rack-compatible header (must respond to each)" unless headers.respond_to?(:each)
raise "Not a Rack-compatible response (must respond to each)" unless response.respond_to?(:each)

@options[:force_shutdown_error_response] = [
Integer(status),
Expand Down
9 changes: 1 addition & 8 deletions lib/puma/server.rb
Expand Up @@ -593,14 +593,7 @@ def handle_request(req, lines)
@events.log "Detected force shutdown of a thread, returning 503"
@events.unknown_error self, e, "Rack app"

if @options[:force_shutdown_error_response]
status, headers, res_body = @options[:force_shutdown_error_response]
else
status = 503
headers = {}
res_body = ["Request was internally terminated early\n"]
end

status, headers, res_body = @options[:force_shutdown_error_response]
rescue Exception => e
@events.unknown_error self, e, "Rack app", env

Expand Down
2 changes: 1 addition & 1 deletion test/test_puma_server.rb
Expand Up @@ -278,7 +278,7 @@ def test_force_shutdown_custom_error_message
end

def test_force_shutdown_error_default
@server = Puma::Server.new @app, @events, {:force_shutdown_after => 2}
@server = Puma::Server.new @app, @events, {:force_shutdown_after => 2, :force_shutdown_error_response => Puma::ConfigDefault::DefaultThreadShutdownResponse}

server_run app: ->(env) do
@server.stop
Expand Down

0 comments on commit 06979d7

Please sign in to comment.