diff options
author | Eric Wong <e@80x24.org> | 2023-04-12 10:17:42 +0000 |
---|---|---|
committer | Eric Wong <e@80x24.org> | 2023-04-14 16:25:34 +0000 |
commit | 74bb661ee521d275b636eda4a5caeabb9e387e75 (patch) | |
tree | 4da9c5387c86864c294bd771949bfb3f05087766 /lib/PublicInbox/Daemon.pm | |
parent | 924fcdc5a5095043388bcce85da09af0d3161bd0 (diff) | |
download | public-inbox-74bb661ee521d275b636eda4a5caeabb9e387e75.tar.gz |
While accepting a single connection at-a-time is likely best for multi-worker and/or load-balanced deployments; accepting multiple connections at once should be less bad on overloaded single-worker systems. We can't automatically pick the best value here since worker counts are dynamic via SIGTTIN/SIGTTOU. Process managers (e.g. systemd) can also spawn multiple instances sharing a single listener with no knowledge sharing between listeners.
Diffstat (limited to 'lib/PublicInbox/Daemon.pm')
-rw-r--r-- | lib/PublicInbox/Daemon.pm | 8 |
1 files changed, 6 insertions, 2 deletions
diff --git a/lib/PublicInbox/Daemon.pm b/lib/PublicInbox/Daemon.pm index 57435421..30442227 100644 --- a/lib/PublicInbox/Daemon.pm +++ b/lib/PublicInbox/Daemon.pm @@ -136,6 +136,8 @@ sub load_mod ($;$$) { } my $err = $tlsd->{err}; $tlsd->{warn_cb} = sub { print $err @_ }; # for local $SIG{__WARN__} + $opt->{'multi-accept'} and + $xn{'multi-accept'} = $opt->{'multi-accept'}->[-1]; \%xn; } @@ -167,6 +169,7 @@ EOF 'u|user=s' => \$user, 'g|group=s' => \$group, 'D|daemonize' => \$daemonize, + 'multi-accept=i' => \$PublicInbox::Listener::MULTI_ACCEPT, 'cert=s' => \$default_cert, 'key=s' => \$default_key, 'help|h' => \(my $show_help), @@ -251,7 +254,7 @@ EOF $s->blocking(0); my $sockname = sockname($s); warn "# bound $scheme://$sockname\n"; - $xnetd->{$sockname} //= load_mod($scheme); + $xnetd->{$sockname} //= load_mod($scheme, $opt); $listener_names->{$sockname} = $s; push @listeners, $s; } @@ -712,7 +715,8 @@ sub daemon_loop ($) { defer_accept($_, $tls_cb ? 'dataready' : $xn->{af_default}); # this calls epoll_create: - PublicInbox::Listener->new($_, $tls_cb || $xn->{post_accept}) + PublicInbox::Listener->new($_, $tls_cb || $xn->{post_accept}, + $xn->{'multi-accept'}) } @listeners; PublicInbox::DS::event_loop($sig, $oldset); } |