From: Tiago Pasqualini Date: Fri, 31 Jan 2020 18:22:19 +0000 (-0300) Subject: rgw: make max_connections configurable in beast X-Git-Tag: v13.2.9~80^2 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=acafbc871b873db061fb96d790eb83d126aa594c;p=ceph.git rgw: make max_connections configurable in beast Beast frontend currently accepts a hardcoded number of connections that is defined by boost::asio::socket_base::max_connections. This commit makes it configurable via a 'max_connections' config option on rgw frontend. Fixes: https://tracker.ceph.com/issues/43952 Signed-off-by: Tiago Pasqualini (cherry picked from commit d6dada5bcb356abaef8d9237ceca8f42d4fcfb74) Conflicts: src/rgw/rgw_asio_frontend.cc - trivial resolution --- diff --git a/doc/radosgw/frontends.rst b/doc/radosgw/frontends.rst index ce58c6ee2c9b..d6f5d8d278df 100644 --- a/doc/radosgw/frontends.rst +++ b/doc/radosgw/frontends.rst @@ -70,6 +70,15 @@ Options :Type: Integer (0 or 1) :Default: 0 +``max_connection_backlog`` + +:Description: Optional value to define the maximum size for the queue of + connections waiting to be accepted. If not configured, the value + from ``boost::asio::socket_base::max_connections`` will be used. + +:Type: Integer +:Default: None + Civetweb ======== diff --git a/src/rgw/rgw_asio_frontend.cc b/src/rgw/rgw_asio_frontend.cc index dbefeb0c3ab7..2557b5f47c4a 100644 --- a/src/rgw/rgw_asio_frontend.cc +++ b/src/rgw/rgw_asio_frontend.cc @@ -11,6 +11,7 @@ #include #include "common/errno.h" +#include "common/strtol.h" #include "rgw_asio_client.h" #include "rgw_asio_frontend.h" @@ -395,7 +396,18 @@ int AsioFrontend::init() << ": " << ec.message() << dendl; return -ec.value(); } - l.acceptor.listen(boost::asio::socket_base::max_connections); + + auto it = config.find("max_connection_backlog"); + auto max_connection_backlog = boost::asio::socket_base::max_listen_connections; + if (it != config.end()) { + string err; + max_connection_backlog = strict_strtol(it->second.c_str(), 10, &err); + if (!err.empty()) { + ldout(ctx(), 0) << "WARNING: invalid value for max_connection_backlog=" << it->second << dendl; + max_connection_backlog = boost::asio::socket_base::max_listen_connections; + } + } + l.acceptor.listen(max_connection_backlog); l.acceptor.async_accept(l.socket, [this, &l] (boost::system::error_code ec) { accept(l, ec);