Increase timeout for Git-over-HTTP requests.
This commit is contained in:
parent
2f4656b5c7
commit
516bcabbf4
7 changed files with 50 additions and 16 deletions
|
@ -16,6 +16,7 @@ v 7.9.0 (unreleased)
|
|||
- Allow user confirmation to be skipped for new users via API
|
||||
- Add a service to send updates to an Irker gateway (Romain Coltel)
|
||||
- Add brakeman (security scanner for Ruby on Rails)
|
||||
- Increase timeout for Git-over-HTTP requests to 1 hour since large pulls/pushes can take a long time.
|
||||
|
||||
v 7.8.1
|
||||
- Fix run of custom post receive hooks
|
||||
|
|
3
Gemfile
3
Gemfile
|
@ -177,6 +177,9 @@ gem 'ace-rails-ap'
|
|||
# Keyboard shortcuts
|
||||
gem 'mousetrap-rails'
|
||||
|
||||
# Shutting down requests that take too long
|
||||
gem "slowpoke"
|
||||
|
||||
gem "sass-rails", '~> 4.0.2'
|
||||
gem "coffee-rails"
|
||||
gem "uglifier"
|
||||
|
|
|
@ -149,6 +149,7 @@ GEM
|
|||
enumerize (0.7.0)
|
||||
activesupport (>= 3.2)
|
||||
equalizer (0.0.8)
|
||||
errbase (0.0.2)
|
||||
erubis (2.7.0)
|
||||
escape_utils (0.2.4)
|
||||
eventmachine (1.0.4)
|
||||
|
@ -428,6 +429,7 @@ GEM
|
|||
rack
|
||||
rack-test (0.6.3)
|
||||
rack (>= 1.0)
|
||||
rack-timeout (0.2.0)
|
||||
rails (4.1.9)
|
||||
actionmailer (= 4.1.9)
|
||||
actionpack (= 4.1.9)
|
||||
|
@ -481,6 +483,8 @@ GEM
|
|||
rest-client (1.6.7)
|
||||
mime-types (>= 1.16)
|
||||
rinku (1.7.3)
|
||||
robustly (0.0.3)
|
||||
errbase
|
||||
rouge (1.7.4)
|
||||
rspec (2.99.0)
|
||||
rspec-core (~> 2.99.0)
|
||||
|
@ -563,6 +567,9 @@ GEM
|
|||
temple (~> 0.6.6)
|
||||
tilt (>= 1.3.3, < 2.1)
|
||||
slop (3.6.0)
|
||||
slowpoke (0.0.5)
|
||||
rack-timeout (>= 0.1.0)
|
||||
robustly
|
||||
spinach (0.8.7)
|
||||
colorize (= 0.5.8)
|
||||
gherkin-ruby (>= 0.3.1)
|
||||
|
@ -772,6 +779,7 @@ DEPENDENCIES
|
|||
six
|
||||
slack-notifier (~> 1.0.0)
|
||||
slim
|
||||
slowpoke
|
||||
spinach-rails
|
||||
spring (= 1.3.1)
|
||||
spring-commands-rspec (= 1.0.4)
|
||||
|
|
8
config/initializers/timeout.rb
Normal file
8
config/initializers/timeout.rb
Normal file
|
@ -0,0 +1,8 @@
|
|||
# Slowpoke extends Rack::Timeout to gracefully kill Unicorn workers so they can clean up state.
|
||||
Slowpoke.timeout = 60
|
||||
|
||||
# The `Rack::Timeout` middleware kills requests after 60 seconds (as set above).
|
||||
# We're replacing it with our `Gitlab::Middleware::Timeout` that does the same,
|
||||
# except ignoring Git-over-HTTP requests, letting those take as long as they need.
|
||||
|
||||
Rails.application.config.middleware.swap(Rack::Timeout, Gitlab::Middleware::Timeout)
|
|
@ -35,22 +35,10 @@ working_directory "/home/git/gitlab" # available in 0.94.0+
|
|||
listen "/home/git/gitlab/tmp/sockets/gitlab.socket", :backlog => 1024
|
||||
listen "127.0.0.1:8080", :tcp_nopush => true
|
||||
|
||||
# nuke workers after 30 seconds instead of 60 seconds (the default)
|
||||
#
|
||||
# NOTICE: git push over http depends on this value.
|
||||
# If you want be able to push huge amount of data to git repository over http
|
||||
# you will have to increase this value too.
|
||||
#
|
||||
# Example of output if you try to push 1GB repo to GitLab over http.
|
||||
# -> git push http://gitlab.... master
|
||||
#
|
||||
# error: RPC failed; result=18, HTTP code = 200
|
||||
# fatal: The remote end hung up unexpectedly
|
||||
# fatal: The remote end hung up unexpectedly
|
||||
#
|
||||
# For more information see http://stackoverflow.com/a/21682112/752049
|
||||
#
|
||||
timeout 60
|
||||
# Kill workers after 1 hour.
|
||||
# A shorter timeout of 60 seconds is enforced by rack-timeout for web requests.
|
||||
# Git-over-HTTP only has the below timeout since large pulls/pushes can take a long time.
|
||||
timeout 60 * 60
|
||||
|
||||
# feel free to point this anywhere accessible on the filesystem
|
||||
pid "/home/git/gitlab/tmp/pids/unicorn.pid"
|
||||
|
|
13
lib/gitlab/middleware/timeout.rb
Normal file
13
lib/gitlab/middleware/timeout.rb
Normal file
|
@ -0,0 +1,13 @@
|
|||
module Gitlab
|
||||
module Middleware
|
||||
class Timeout < Rack::Timeout
|
||||
GRACK_REGEX = /[-\/\w\.]+\.git\//.freeze
|
||||
|
||||
def call(env)
|
||||
return @app.call(env) if env['PATH_INFO'] =~ GRACK_REGEX
|
||||
|
||||
super
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
13
public/503.html
Normal file
13
public/503.html
Normal file
|
@ -0,0 +1,13 @@
|
|||
<!DOCTYPE html>
|
||||
<html>
|
||||
<head>
|
||||
<title>Page took too long to load (503)</title>
|
||||
<link href="/static.css" media="screen" rel="stylesheet" type="text/css" />
|
||||
</head>
|
||||
<body>
|
||||
<h1>503</h1>
|
||||
<h3>Page took too long to load.</h3>
|
||||
<hr/>
|
||||
<p>Please contact your GitLab administrator if this problem persists.</p>
|
||||
</body>
|
||||
</html>
|
Loading…
Reference in a new issue