From: Tiago Pasqualini Date: Fri, 31 Jan 2020 18:22:19 +0000 (-0300) Subject: rgw: make max_connections configurable in beast X-Git-Tag: v14.2.10~220^2 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=refs%2Fpull%2F33340%2Fhead;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) --- diff --git a/doc/radosgw/frontends.rst b/doc/radosgw/frontends.rst index 1ab4ad73bc46..e863a7d2728f 100644 --- a/doc/radosgw/frontends.rst +++ b/doc/radosgw/frontends.rst @@ -73,6 +73,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 f7c13e1d473e..9377458b2ccf 100644 --- a/src/rgw/rgw_asio_frontend.cc +++ b/src/rgw/rgw_asio_frontend.cc @@ -14,6 +14,7 @@ #include "common/async/shared_mutex.h" #include "common/errno.h" +#include "common/strtol.h" #include "rgw_asio_client.h" #include "rgw_asio_frontend.h" @@ -466,7 +467,17 @@ int AsioFrontend::init() 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);