From f89bd1444a595b569606679293d2d01b0b7a049e Mon Sep 17 00:00:00 2001 From: Eric Wong Date: Sat, 9 Jul 2016 03:18:34 +0000 Subject: qspawn: allow configurable limiters And bump the default limit to 32 so we match git-daemon behavior. This shall allow us to configure different levels of concurrency for different repositories and prevent clones of giant repos from stalling service to small repos. --- lib/PublicInbox/GitHTTPBackend.pm | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) (limited to 'lib/PublicInbox/GitHTTPBackend.pm') diff --git a/lib/PublicInbox/GitHTTPBackend.pm b/lib/PublicInbox/GitHTTPBackend.pm index ebb0850a..ed8fdf00 100644 --- a/lib/PublicInbox/GitHTTPBackend.pm +++ b/lib/PublicInbox/GitHTTPBackend.pm @@ -13,6 +13,9 @@ use HTTP::Status qw(status_message); use Plack::Util; use PublicInbox::Qspawn; +# 32 is same as the git-daemon connection limit +my $default_limiter = PublicInbox::Qspawn::Limiter->new(32); + # n.b. serving "description" and "cloneurl" should be innocuous enough to # not cause problems. serving "config" might... my @text = qw[HEAD info/refs @@ -176,6 +179,7 @@ sub prepare_range { # returns undef if 403 so it falls back to dumb HTTP sub serve_smart { my ($env, $git, $path) = @_; + my $limiter = $default_limiter; my $in = $env->{'psgi.input'}; my $fd = eval { fileno($in) }; unless (defined $fd && $fd >= 0) { @@ -248,7 +252,7 @@ sub serve_smart { # holding the input here is a waste of FDs and memory $env->{'psgi.input'} = undef; - $x->start(sub { # may run later, much later... + $x->start($limiter, sub { # may run later, much later... ($rpipe) = @_; $in = undef; if ($async) { -- cgit v1.2.3-24-ge0c7