From 6d6bae66dffefeb3f34f2646b0e801b3c1002170 Mon Sep 17 00:00:00 2001 From: Jan Provaznik Date: Wed, 29 May 2019 18:53:44 +0000 Subject: Added rack-timeout for Puma It assures that requests are aborted after 60 seconds, otherwise an exception is raised. This exception is logged by Sentry, also there is a Prometheus counter for measuring number of requests in each state. --- config/initializers/rack_timeout.rb | 23 +++++++++++++++++++++++ 1 file changed, 23 insertions(+) create mode 100644 config/initializers/rack_timeout.rb (limited to 'config/initializers/rack_timeout.rb') diff --git a/config/initializers/rack_timeout.rb b/config/initializers/rack_timeout.rb new file mode 100644 index 00000000000..5c4f2dd708c --- /dev/null +++ b/config/initializers/rack_timeout.rb @@ -0,0 +1,23 @@ +# frozen_string_literal: true + +# Unicorn terminates any request which runs longer than 60 seconds. +# Puma doesn't have any timeout mechanism for terminating long-running +# requests, to make sure that server is not paralyzed by long-running +# or stuck queries, we add a request timeout which terminates the +# request after 60 seconds. This may be dangerous in some situations +# (https://github.com/heroku/rack-timeout/blob/master/doc/exceptions.md) +# and it's used only as the last resort. In such case this termination is +# logged and we should fix the potential timeout issue in the code itself. + +if defined?(::Puma) && !Rails.env.test? + require 'rack/timeout/base' + + Gitlab::Application.configure do |config| + config.middleware.insert_before(Rack::Runtime, Rack::Timeout, + service_timeout: 60, + wait_timeout: 90) + end + + observer = Gitlab::RackTimeoutObserver.new + Rack::Timeout.register_state_change_observer(:gitlab_rack_timeout, &observer.callback) +end -- cgit v1.2.1